正在verilog中分配整个阵列



我正试图将一个2d数组复制到另一个类似的数组中:

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循环的情况之一吗,因为循环是静态定义的?

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

您编写的代码是可合成的。见本文2.5.2节:http://www.lcdm-eng.com/papers/snug13_SNUG-SV-2013_Synthesizable-SystemVerilog_paper.pdf

最新更新