在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循环。
答案 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];