Verilog强制结构被打包

时间:2017-05-05 01:23:43

标签: 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 array in packed struct/union

有解决方法吗?

1 个答案:

答案 0 :(得分:2)

为了拥有一个打包数组,必须打包所有元素。所以要么使结构包装:

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];

BTW,强烈建议您使用typedef作为结构,而不是使用匿名结构类型。