Verilog中没有结构体,用户常常以相同的字符开始或结尾来命名信号名,以此表示一组相关的信号。system verilog中增加了类似C语言中的结构体类型,可以方便的表示一组相关的信号。结构体表示如下:
struct {
int a,b; //32bit variables
opcode_t opcode; //user-defined type
logic[23:0] address; //24-bit variable
bit error; //1-bit 2-state var
} Instruction_Word;
结构体中的成员变量可以是任意variable类型,但不可以是net型。结构体成员变量的引用和C语言类似:
<structure_name>.<variable_name>
例如:
Instruction_Word.address = 32'hF000001E;
结构体也可以是自定义类型,如:
typedef struct { //structure definition
logic [31:0] a,b;
logic [7:0] opcode;
logic [23:0] address;
} Instruction_Word_t;
Instruction_Word_t IW; //structure allocation
初始化结构体:在声明的同时初始化,格式为:‘{…}(注意与verilog拼接符{…}区分),数据类型必须完全匹配,如:
Instruction_Word_t IW = '{100,3,8'hFF,0};
如果不按照原有顺序赋值,则必须指明,如:
IW = '{address:0,opcode:8'hFF,a:100,b:3};