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仿真結果:
參考: