首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >verilog多维reg误差

verilog多维reg误差
EN

Stack Overflow用户
提问于 2014-08-03 00:57:30
回答 2查看 2.5K关注 0票数 0

本声明如下:

代码语言:javascript
运行
复制
reg [7:0] register_file [3:0] = 0;

产生此错误:

代码语言:javascript
运行
复制
Error (10673): SystemVerilog error at simpleprocessor.v(27): assignments to unpacked arrays must be aggregate expressions

首先,我使用的是Verilog,而不是SystemVerilog,那么为什么它给了我一个SystemVerilog错误?

第二,造成这个错误的原因是什么,我如何修复它?我正在用它来表示内部工作寄存器为一个多维度的内存数组。

这样,我的寄存器就可以直接从指令中获得。例如,这一行:

代码语言:javascript
运行
复制
register_file[instruction[5:4]] <= register_file[instruction[3:2]] + register_file[instruction[1:0]];

但这不管用。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-04 13:51:00

来自SystemVerilog LRM:

打包数组一词用于指在数据标识符名称之前声明的维度。未打包数组一词用于指在数据标识符名称之后声明的维度。

代码语言:javascript
运行
复制
bit [7:0] c1; // packed array of scalar bit types
real u [7:0]; // unpacked array of real types

您已经声明了一个未打包的数组,因此不能将它赋值给值,因此出现了错误消息。对于未打包的数组,您必须使用聚合表达式来分配整个数组:

代码语言:javascript
运行
复制
logic [7:0] register_file [3:0] = {8'b0, 8'b0, 8'b0, 8'b0};

如果您声明了一个打包数组,那么就可以将其赋值,就好像它是一个平面向量一样:

代码语言:javascript
运行
复制
logic [7:0][3:0] register_file = '0;
票数 2
EN

Stack Overflow用户

发布于 2014-08-03 09:40:11

您已经暗示了一个内存,但没有指定要设置为0的位置。

可以使用聚合表达式定义一行中的所有值:

代码语言:javascript
运行
复制
reg [7:0] register_file [3:0] = {8'b0, 8'b0, 8'b0, 8'b0};

如果是用于fpga,也可以使用initial

代码语言:javascript
运行
复制
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是最新版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25100692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档