作者andy2007 (...)
看板Electronics
標題[問題] verilog 進位問題
時間Sat Dec 28 20:02:59 2013
各位前輩好,初學Verilog,有一問題想請教大家
我在進行verilog的加法與減法運算時,要觀察他們的進位值
於是寫下了以下程式碼(部分內容)
reg [3:0] A;
reg [3:0] B;
reg [3:0] S;
reg carry;
A = 4'b0111;
B = 4'b1001;
========加法部分========
{carry,S} = A + B;
verilog模擬出來的結果為:
S = 0000
carry = 1 (這是OK的,和用手算的結果一樣)
========減法部分========
{carry,S} = A + ~B + 1'b1; (也就是A-B)
S = 1110 (結果和用手算的一樣)
但是進位卻是...
carry = 1 (為什麼?不是應該為零的嗎?)
我用手算的結果也是carry = 0,請問是什麼地方出問題了呢?
(代表說進位的檢察不能用這種寫法嗎?)
謝謝各位前輩指點迷津 :)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.214.89
→ er230059:你的sum是負的阿 carry是1沒錯啊 12/28 21:28
→ er230059:對不起剛剛耍笨了 2補數加減法器的carry是捨棄的 12/28 21:33
→ er230059:可能是{carry,S}被當成是5bit的sum了吧 12/28 21:35
推 weop388:若把~B寫成寫成 {1'b0, ~B} 呢 12/28 22:00
→ weop388:左邊是5-bit,右邊的變數要做有號數運算應該也要extend到5 12/28 22:04
→ weop388:-bit,這樣結果應該就對了? (太久沒寫,有錯多包涵) 12/28 22:05
→ weop388:我寫A-B都是直接寫成 {1'b0, 4'b0111} - {1'b1, 4'b1001} 12/28 22:10
推 pupucar:直接宣告signed寫A-B就好了 不用假會 12/30 12:39