Verilog 强制结构被打包

Verilog forcing struct to be packed

我在这样的模块中声明了一个结构:

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 而不是匿名结构类型。