如何在 Verilog 中展平数组

How to flatten array in Verilog

由于 Verilog 不允许将数组作为输入传递给模块,因此我们如何在 Verilog 中展平任何数组。假设我有这个数组:

parameter [31:0] A [0:31];
wire [31:0] B

我想将其传递到任何模块中,例如:

module1 M1 (.input(A), .output (B));

我怎样才能做到这一点?

这个 verilog 限制只是...等方面的一个难题,但我们必须处理它。

您可以像这样将二维数组映射到一维数组:

wire [32*32-1:0]One_D_array;
integer i;
for (i=0; i<32; i=i+1) assign One_D_array[32*i+31:32*i] = A[i];

然后在您的模块中,您可以使用反向 for 循环重新创建二维数组:

wire [31:0]local_2D_array[0:31];
integer i;
for (i=0;i<32;i=i+1) assign local_2D_array[i] = input[32*i+31:32*i];

综合工具会将其处理为连线重新映射,因此不会使用 LUT/FLIP_FLOP。这是我找到的针对此限制的最简单解决方法。