System verilog 将压缩阵列复制到未压缩阵列

System verilog 将压缩阵列复制到未压缩阵列,system-verilog,System Verilog,我编写了一段代码,用于将打包数组复制到未打包数组,如下所示: module m1; bit [2:0] temp; bit temp1[2:0]; initial begin temp=3'b011; temp1='{temp}; end endmodule 但它显示了一个错误:“对于给定的分配,分配模式项太少” 请提供解决方案。压缩数组和非压缩数组是不同的数据结构,不能直接从其他类型分配 对数组使用赋值模式必须基于位置或基于索引。比如说, temp1 = '{temp[2], temp[

我编写了一段代码,用于将打包数组复制到未打包数组,如下所示:

module m1;

bit [2:0] temp;
bit temp1[2:0];
initial
begin
temp=3'b011;
temp1='{temp};
end 
endmodule
但它显示了一个错误:“对于给定的分配,分配模式项太少”

请提供解决方案。

压缩数组和非压缩数组是不同的数据结构,不能直接从其他类型分配

对数组使用赋值模式必须基于位置或基于索引。比如说,

temp1 = '{temp[2], temp[1], temp[0]};
解决方案是在分配的左侧使用流式操作符

{>>{temp1}} = temp;

您可能需要使用尺寸参数。这应该起作用:

parameter MYSIZE = 3;
bit [MYSIZE-1:0] temp1;
bit temp2[0:MYSIZE-1];

{>> MYSIZE{temp2}} = temp1;

我知道这对VCS有效。

{>{temp1}}}=temp;这是行不通的。对于上面的一个,我们可以直接赋值,而不使用“'”运算符或强制转换。像temp1={temp[2],temp[1],temp[0]};但是我需要另一种方法来直接赋值。请评论你正在使用的模拟器。LHS上的流式操作符可能无效,或在某些模拟器或合成器中实现。