System verilog 为什么typedef不能在本地systemveriliog中使用?

System verilog 为什么typedef不能在本地systemveriliog中使用?,system-verilog,System Verilog,为什么typedef不能在本地systemveriliog中使用 我指的是 我在使用struct而不是typedef struct时遇到了问题。为什么不使用?关于您的第一个问题“为什么不能在本地使用typedef?” Typedef可在任何SystemVerilog模块内使用,并可根据我们的需要进行访问/初始化。参考第6.18节SV LRM的用户定义类型 下面是一个在模块中使用typedef的示例 struct { //using struct without typedef byte a

为什么typedef不能在本地systemveriliog中使用

我指的是

我在使用struct而不是typedef struct时遇到了问题。为什么不使用?

关于您的第一个问题“为什么不能在本地使用typedef?” Typedef可在任何SystemVerilog模块内使用,并可根据我们的需要进行访问/初始化。参考第6.18节SV LRM的用户定义类型

下面是一个在模块中使用typedef的示例

struct { //using struct without typedef 
  byte a;
  reg  b;
  shortint unsigned c;
} myStruct;

module struct_data ();

struct {
  byte a;
  reg b;
  shortint unsigned c;
} myLocalStruct = '{11,1,101};

typedef struct {  //using typedef inside the module
real r0, r1;
int i0, i1;
logic [ 7:0] opcode;
logic [23:0] address;
} instruction_word_t;

instruction_word_t IW;
assign IW = '{ real:1.0,default:0};

assign myStruct = '{10,0,100};

initial begin
  #1;
  $display ("a = %b b = %b c = %h", myStruct.a, myStruct.b, myStruct.c);
  $display ("a = %b b = %b c = %h", myLocalStruct.a, myLocalStruct.b, myLocalStruct.c);
  $display ("r0 = %b r1 = %d opcode = %h ,address = %h ",IW.r0, IW.r1, IW.opcode,IW.address);
  #1 $finish;
end

endmodule
对于第二个问题,我们也可以在不使用typedef的情况下使用struct,我已经在上面的示例中展示了这一点

以上代码的输出

a = 00001010 b = 0 c = 0064
a = 00001011 b = 1 c = 0065
r0 = 00000000000000000000000000000001 r1 =           1 opcode = 00 ,address = 000000

如果只使用struct而不使用typedef,您将面临什么确切的问题/错误?