2016-02-17 82 views
-1

我真的是Verilog的新手...我在Verilog中編寫了一個加減法器,只有當A大於B時,它纔會起作用,如果結果是錯誤的,它會給我一個錯誤的十進制輸出一個負數,看到從試驗檯的結果是:Verilog減法輸出錯誤的十進制輸出

time= 0 A= 0 B= 0 : R= 0 
time= 100 A= 1 B= 0 : R= 1 
time= 110 A= 24512 B= 3 : R= 24509 
time= 120 A= 262141 B= 10 : R= 262131 
time= 130 A= 14 B= 81 : R=4294967229 
time= 140 A= 15 B= 34 : R=4294967277 

這似乎是Verilog的不知道是哪裏的符號位和翻譯都爲正數,我應該怎麼做才能正確的輸出?

+2

很難知道什麼可能是錯了你的Verilog,而不能看到它... ... – wilcroft

+3

向我們展示您的'$ display'或類似的陳述。它看起來像是一個明顯的有符號和無符號表示的情況。 – hexafraction

回答

1

您最有可能將A,B和R聲明爲無符號變量。如果您將其聲明爲已簽名,您將看到正確的結果。

reg signed [31:0] A, B, R; 

如果你只是想看看在簽訂格式的結果,你可以做

$display("time= %t A= %0d B= %0d : R= %0d",$time, A, B, $signed(R));