微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一个很简单的问题。想问一下为什么quartus和modelsim编译结果会不同

一个很简单的问题。想问一下为什么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

  1. module test(co,sum,a0,a1,ci);
  2. parameter N=4;
  3. output [N-1:0] sum;
  4. output co;
  5. input[N-1:0] a0,a1;
  6. input ci;

  7. wire [N-1:0] carry;

  8. genvar i;

  9. generate
  10.         for(i=0;i<N;i=i+1) begin:r_loop
  11.                 wire t1,t2,t3;
  12.                 xor g1(t1,a0[i],a1[i]);
  13.                 xor g2(sum[i],t1,carry[i]);
  14.                 and g3(t2,a0[i],a1[i]);
  15.                 and g4(t3,t1,carry[i]);
  16.                 or g5(carry[i+1],t2,t3);
  17.         end
  18. endgenerate

  19. assign carry[0] = ci;
  20. assign co = carry[N];

  21. endmodule

复制代码

modelsim编译可过,仿真报错!对于未定义的信号默认为wire型,这跟软件无关。而对于已定义长度的信号使用超出范围,按你使用情况quartus报错。个人觉得应该只是报Waring就行了。因为按默认来说不影响理解!把‘wire [N-1:0] carry;’改为‘wire [N:0] carry;’试试,理论上应该你的carry位宽是data+co这么宽。


嗯可以了!谢谢啦~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top