如何在系统verilog中将一个多维数组分配给另一个多维数组

时间:2016-02-24 22:19:47

标签: multidimensional-array system-verilog

在System Verilog中,我有:

wire [2:0][1:0] sig1;
wire [2:0][3:0] sig2;

我正在尝试:

assign sig1[2:0][1:0] = sig2[2:0][1:0];

NCVerilog告诉我:

assign sig1[2:0][3:0] = sig2[2:0][3:0];
                |
ncvlog: *E,MISEXX (acc_llcprdbctl.v,89|48): expecting an '=' or '<=' sign in an assignment [9.2(IEEE)].

有没有办法分配多维数组?

编辑:显然,您无法使用多个索引分配数组。所以上面的例子并没有完全代表我想做的事情。我想拼接第二个维度并将其分配给第一个维度。

如果我重新排列数组,这可以实现:

wire [1:0][2:0] sig1;
wire [3:0][2:0] sig2;

assign sig1[1:0] = sig2[1:0];

但是对于任何其他更精确的拼接,我必须使用嵌套的for循环。

2 个答案:

答案 0 :(得分:3)

您可以使用如下的生成块。

  generate
    for(genvar i=0; i<3; i++) 
      assign sig1[i][1:0] = sig2[i][1:0];
  endgenerate

答案 1 :(得分:1)

来自LRM: -

可以使用索引名称选择打包或解包数组的单个元素。

<li>

实际上相当于

bit[3:0] [7:0] j; // j is a packed array 
byte k;
k = j[2]; // select a single 8-bit element from j

wire [2:0][1:0] sig1;
wire [2:0][3:0] sig2;

因此,该工具无法执行wire [1:0] sig1 [2:0]; wire [3:0] sig2 [2:0];

所以您也可以将其定义为

assign sig1[2:0][1:0] = sig2[2:0][1:0];