module test; typedef struct packed { logic [2:0] b; } ST4; typedef struct packed { logic [9:-1][2:0] a; ST4 st4[1:0]; } ST3; typedef struct packed { ST3 st3; ST4 st4; } ST5; typedef struct { ST5 st5; ST2 st2[2:0]; } ST2; initial begin ST2 st2; st2 = '{'{ '{a:'h1, st4:'{ '{b:'h2} } }, '{a:'h0, st4:'{ '{b:'h1} } }, '{a:'h1, st4:'{ '{b:'h0} } }}; $display("%p", st2); end endmodule 这段代码用vcs编译会报 token is 'ST2', 的语法错误,应该怎么修改这段代码才能跑通呢?谢谢
时间: 2024-03-08 22:50:34 浏览: 57
systemverilog中struct和union的一种用法
这段代码中,定义 ST2 类型时使用了未定义的 ST2 类型,导致编译出错。需要将定义 ST2 的代码放到 ST4 和 ST3 的定义之后,如下所示:
```
module test;
typedef struct packed {
logic [2:0] b;
} ST4;
typedef struct packed {
logic [9:-1][2:0] a;
ST4 st4[1:0];
} ST3;
typedef struct packed {
ST3 st3;
ST4 st4;
} ST5;
typedef struct {
ST5 st5;
ST2 st2[2:0];
} ST2;
initial begin
ST2 st2;
st2 = '{'{ '{a:'h1, st4:'{ '{b:'h2} } }, '{a:'h0, st4:'{ '{b:'h1} } }, '{a:'h1, st4:'{ '{b:'h0} } }};
$display("%p", st2);
end
endmodule
```
这样修改后,代码就可以顺利编译了。
阅读全文