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
而不是匿名结构类型。
我在这样的模块中声明了一个结构:
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
而不是匿名结构类型。