有符号位和无符号为的加法运算

  Verilog 里面如果有符号数和无符号数做运算,会强制当做无符号数运算;

  例如 c = a + b; 其中a和b都是四位数,c是五位。在计算时,verilog会将a和b都扩展到5位,然后再做加法,而如果a和b中有无符号数,则位宽扩展就按照无符号数来,也就是高位补0。所以如果a和b中既有无符号又有有符号,结果就不正确了。

  解决方法是用  signed来修饰。

  如:请描述如下代码,实现加法:

      C = A + B,A是21bit无符号数,B是18位有符号数,如何才能保证正确得到一个不溢出的有符号数C;

 testbench:

 Modelsim仿真结果:

参考:

  【1】https://blog.csdn.net/CAOXUN_FPGA/article/details/79614456?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

  【2】https://blog.csdn.net/alangaixiaoxiao/article/details/106209193?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

  【3】https://blog.csdn.net/darknessdarkness/article/details/105003186?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare

原文地址:https://www.cnblogs.com/571328401-/p/13288765.html