本声明如下:
reg [7:0] register_file [3:0] = 0;产生此错误:
Error (10673): SystemVerilog error at simpleprocessor.v(27): assignments to unpacked arrays must be aggregate expressions首先,我使用的是Verilog,而不是SystemVerilog,那么为什么它给了我一个SystemVerilog错误?
第二,造成这个错误的原因是什么,我如何修复它?我正在用它来表示内部工作寄存器为一个多维度的内存数组。
这样,我的寄存器就可以直接从指令中获得。例如,这一行:
register_file[instruction[5:4]] <= register_file[instruction[3:2]] + register_file[instruction[1:0]];但这不管用。有什么想法吗?
发布于 2014-08-04 13:51:00
来自SystemVerilog LRM:
打包数组一词用于指在数据标识符名称之前声明的维度。未打包数组一词用于指在数据标识符名称之后声明的维度。
bit [7:0] c1; // packed array of scalar bit types
real u [7:0]; // unpacked array of real types您已经声明了一个未打包的数组,因此不能将它赋值给值,因此出现了错误消息。对于未打包的数组,您必须使用聚合表达式来分配整个数组:
logic [7:0] register_file [3:0] = {8'b0, 8'b0, 8'b0, 8'b0};如果您声明了一个打包数组,那么就可以将其赋值,就好像它是一个平面向量一样:
logic [7:0][3:0] register_file = '0;发布于 2014-08-03 09:40:11
您已经暗示了一个内存,但没有指定要设置为0的位置。
可以使用聚合表达式定义一行中的所有值:
reg [7:0] register_file [3:0] = {8'b0, 8'b0, 8'b0, 8'b0};如果是用于fpga,也可以使用initial。
reg [7:0] register_file [3:0];
initial begin
for(int i=0; i<4; i++) begin
register_file[i] = 8'b0
end
end在这个瞬间,循环可以静态地展开,因此是可合成的。
NB Verilog是折旧。Verilog标准已于2009年与SystemVerilog合并,SystemVerilog 2012是最新版本。
https://stackoverflow.com/questions/25100692
复制相似问题