我正在尝试将二维数组复制到另一个中,如下所示:
reg [11:0] input_matrix [0:array_width - 1] [0:array_height - 1];
reg [11:0] output_matrix [0:array_width - 1] [0:array_height - 1];
always @(posedge clk)
begin
if(<some condition>)
output_matrix <= input_matrix;
end
因此,我们有两个12位值的2D数组。我想把一个复制到另一个。
这似乎不可能。有谁知道这样做的正确方法?或者,如果没有,解释为什么不可能?我看不出为什么这个任务无法合成的任何原因。
由于显而易见的原因,for循环通常不能很好地合成。但是,这种情况是否可以使用for循环,因为循环是静态定义的?
答案 0 :(得分:2)
您编写的代码是可综合的。见本文第2.5.2节: http://www.lcdm-eng.com/papers/snug13_SNUG-SV-2013_Synthesizable-SystemVerilog_paper.pdf
答案 1 :(得分:2)
正如@toolic所提到的for
循环是可综合的。这是完全正常的情况,因为它可以静态展开。
内部循环可能没有必要,但我发现某些版本的综合工具在内存(阵列)分配方面苦苦挣扎,但它们工作但是重新命名了总线,这可能会导致ECO出现问题。
reg [11:0] input_matrix [0:array_width - 1] [0:array_height - 1];
reg [11:0] output_matrix [0:array_width - 1] [0:array_height - 1];
integer i;
integer j;
always @(posedge clk) begin
if(<some condition>) begin
for (i=0; i<array_width; i=i+1 ) begin
for (j=0; j<array_height; j=j+1 ) begin
output_matrix[i][j] <= input_matrix[i][j];
end
end
end
end