一个很简单的问题。想问一下为什么quartus和modelsim编译结果会不同
时间:10-02
整理:3721RD
点击:
代码里是一个很简单的ripple adder,在modelsim10.1C里通过编译,但是在quartus15.0里没有通过,想知道一下是为什么,代码应该怎么改?
quartus15.0中显示的错误代码是:
Error (10232): Verilog HDL error at test.v(19): index 4 cannot fall outside the declared range [3:0] for vector "carry"
大致意思也就是第19行的carry[i+1]循坏展开后会超过定义中的wire [N-1:0] carry
quartus15.0中显示的错误代码是:
Error (10232): Verilog HDL error at test.v(19): index 4 cannot fall outside the declared range [3:0] for vector "carry"
大致意思也就是第19行的carry[i+1]循坏展开后会超过定义中的wire [N-1:0] carry
- module test(co,sum,a0,a1,ci);
- parameter N=4;
- output [N-1:0] sum;
- output co;
- input[N-1:0] a0,a1;
- input ci;
- wire [N-1:0] carry;
- genvar i;
- generate
- for(i=0;i<N;i=i+1) begin:r_loop
- wire t1,t2,t3;
- xor g1(t1,a0[i],a1[i]);
- xor g2(sum[i],t1,carry[i]);
- and g3(t2,a0[i],a1[i]);
- and g4(t3,t1,carry[i]);
- or g5(carry[i+1],t2,t3);
- end
- endgenerate
- assign carry[0] = ci;
- assign co = carry[N];
- endmodule
modelsim编译可过,仿真报错!对于未定义的信号默认为wire型,这跟软件无关。而对于已定义长度的信号使用超出范围,按你使用情况quartus报错。个人觉得应该只是报Waring就行了。因为按默认来说不影响理解!把‘wire [N-1:0] carry;’改为‘wire [N:0] carry;’试试,理论上应该你的carry位宽是data+co这么宽。
嗯可以了!谢谢啦~
