Struct Verilog强制对结构进行打包

Struct Verilog强制对结构进行打包,struct,verilog,system-verilog,Struct,Verilog,System Verilog,我在一个模块中声明了一个结构,如下所示: module myModule; struct { logic a; logic b; logic [A - 1:0] c[0:B - 1]; logic [C - 1:0] d; } [D - 1:0] e [0:E - 1][0:F - 1]; endmodule 我想使用c作为未打包的数组,但Verilog不允许这样做。它在定义了c的行上抛出一个错误: Unsupported: Unpacked arr

我在一个模块中声明了一个结构,如下所示:

module myModule;

  struct {
    logic a;
    logic b;
    logic [A - 1:0] c[0:B - 1];
    logic [C - 1:0] d;
  } [D - 1:0] e [0:E - 1][0:F - 1];

endmodule
我想使用
c
作为未打包的数组,但Verilog不允许这样做。它在定义了
c
的行上抛出一个错误:

Unsupported: Unpacked array in packed struct/union

有办法解决这个问题吗?

为了有一个压缩数组,所有元素都必须压缩。因此,要么将结构打包:

struct packed {
    logic a;
    logic b;
    logic [A - 1:0] [0:B - 1] c;
    logic [C - 1:0] d;
  } [D - 1:0] e [0:E - 1][0:F - 1];
或者将e阵列全部解包

  struct {
        logic a;
        logic b;
        logic [A - 1:0] [0:B - 1] c;
        logic [C - 1:0] d;
      } e [0:E - 1][0:F - 1][D - 1:0];

顺便说一句,强烈建议对结构使用
typedef
,而不是使用匿名结构类型。

为了拥有压缩数组,必须压缩所有元素。因此,要么将结构打包:

struct packed {
    logic a;
    logic b;
    logic [A - 1:0] [0:B - 1] c;
    logic [C - 1:0] d;
  } [D - 1:0] e [0:E - 1][0:F - 1];
或者将e阵列全部解包

  struct {
        logic a;
        logic b;
        logic [A - 1:0] [0:B - 1] c;
        logic [C - 1:0] d;
      } e [0:E - 1][0:F - 1][D - 1:0];

顺便说一句,强烈建议对结构使用
typedef
,而不是匿名结构类型。

由于
c
是一个未打包的变量,因此不能使用SV的
packed
结构。以下操作将起作用:
typedef结构压缩{logic a;logic b;logic[a-1:0]c[0:b-1];logic[c--1:0]d;}mystruct;我的结构e[0:e-1][0:F-1]
注意,
e
不应该有压缩维度,因为它是一个结构变量数组。因为
c
是一个未压缩变量,所以不能使用SV的
packed
结构。以下操作将起作用:
typedef结构压缩{logic a;logic b;logic[a-1:0]c[0:b-1];logic[c--1:0]d;}mystruct;我的结构e[0:e-1][0:F-1]
注意,
e
不应该有压缩维度,因为它是一个结构变量数组。谢谢。解决方案是将结构标记为已打包,并将e数组解包。我还为结构添加了一个typedef。如果结构只是一个项目,如何解决这个问题<代码>结构{…}e?@Moberg如果
struct
有一个项目,则原始问题的答案不会改变。(就像元素
c
)@dave_59我指的是
e
根本不是数组的情况,例如:is
struct{logic[A-1:0]c[0:B-1];}e法律?我得到了一个相同措辞的错误,但在我的情况下,可能只是Verilator根本不支持结构中的解包数组。解包结构可以包含任何类型。谢谢。解决方案是将结构标记为已打包,并将e数组解包。我还为结构添加了一个typedef。如果结构只是一个项目,如何解决这个问题<代码>结构{…}e
?@Moberg如果
struct
有一个项目,则原始问题的答案不会改变。(就像元素
c
)@dave_59我指的是
e
根本不是数组的情况,例如:is
struct{logic[A-1:0]c[0:B-1];}e法律?我得到了一个相同措辞的错误,但在我的例子中,可能只是Verilator根本不支持结构中的解包数组。解包结构可以包含任何类型。