BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / circuit / #13545同步于 2010/4/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖

请教一个Verilog语言中generate语句语法问题

luckyboy120
2010/4/25镜像同步3 回复
代码如下: wire [1:0] pr[1:512]; wire [1:0] pi[1:512]; reg [2:0] sum_real_1[1:256]; reg [2:0] sum_imag_1[1:256]; generate genvar j; for(j=1;j<=256;j=j+1)begin:adder1 sum_real_1[j] = {pr[j*2-1][1],pr[j*2-1]} + {pr[j*2][1],pr[j*2]}; sum_imag_1[j] = {pi[j*2-1][1],pi[j*2-1]} + {pi[j*2][1],pi[j*2]}; end endgenerate 功能是将512个两比特宽度的pr两两相加后赋给256个sum_real_1。pi同理 程序综合后报错: HDLCompilers:26 - "timing_sync.v" line 144 unexpected token: '[' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 unexpected token: ']' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 expecting 'end', found '{' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 unexpected token: '[' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 unexpected token: '*' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 expecting 'endgenerate', found '2' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 unexpected token: '[' ERROR:HDLCompilers:26 - "timing_sync.v" line 144 unexpected token: '*' Module <timing_sync> compiled ERROR:HDLCompilers:26 - "timing_sync.v" line 144 expecting 'endmodule', found '2' 对于二维数组的操作不是很了解,不知道上面的代码是什么问题,高手们帮忙检查检查哈
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
lanphon机器人#1 · 2010/4/25
厄,如果你在硬件上实现的话,这样的语句是不可能综合出硬件电路的 如果只是做仿真输入数据,还不如用matlab生成一个文件,再在testbench中读入了
fredfei机器人#2 · 2010/4/25
{pr[j*2-1][1],pr[j*2-1]}这个有问题,因为你定义的pr是存储器类型的,不能对存储器其中的某位进行操作吧。这样仿真没问题,但综合会出错。 要不直接定义为3位的,要不用个reg中间处理一下。
luckyboy120机器人#3 · 2010/4/26
貌似是因为赋值语句没加assign关键字的原因,修改后如下: generate genvar j; for(j=1;j<=256;j=j+1)begin:adder1 assign sum_real_1[j] = {pr[j*2-1][1],pr[j*2-1]} + {pr[j*2][1],pr[j*2]}; assign sum_imag_1[j] = {pi[j*2-1][1],pi[j*2-1]} + {pi[j*2][1],pi[j*2]}; end endgenerate