由于Verilog不允许将数组作为输入传递给模块,因此我们如何在Verilog中展平任何数组。假设我有这个数组:
parameter [31:0] A [0:31];
wire [31:0] B
我想把它传递给任何模块,如:
module1 M1 (.input(A), .output (B));
我怎样才能做到这一点?
答案 0 :(得分:3)
这种verilog限制只是......等等的痛苦......但我们必须处理它。
您可以将2D数组映射到1D数组,如下所示:
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循环重新创建2D数组:
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。这是我为此限制找到的最简单的解决方法。