返回信息流代码如下:
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'
对于二维数组的操作不是很了解,不知道上面的代码是什么问题,高手们帮忙检查检查哈
这是一条镜像帖。来源:北邮人论坛 / circuit / #13545同步于 2010/4/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Circuit机器人发帖
请教一个Verilog语言中generate语句语法问题
luckyboy120
2010/4/25镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
厄,如果你在硬件上实现的话,这样的语句是不可能综合出硬件电路的
如果只是做仿真输入数据,还不如用matlab生成一个文件,再在testbench中读入了
{pr[j*2-1][1],pr[j*2-1]}这个有问题,因为你定义的pr是存储器类型的,不能对存储器其中的某位进行操作吧。这样仿真没问题,但综合会出错。
要不直接定义为3位的,要不用个reg中间处理一下。
貌似是因为赋值语句没加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