[問題] verilog 進位問題

看板Electronics作者 (...)時間10年前 (2013/12/28 20:03), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
各位前輩好,初學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

12/28 21:28, , 1F
你的sum是負的阿 carry是1沒錯啊
12/28 21:28, 1F

12/28 21:33, , 2F
對不起剛剛耍笨了 2補數加減法器的carry是捨棄的
12/28 21:33, 2F

12/28 21:35, , 3F
可能是{carry,S}被當成是5bit的sum了吧
12/28 21:35, 3F

12/28 22:00, , 4F
若把~B寫成寫成 {1'b0, ~B} 呢
12/28 22:00, 4F

12/28 22:04, , 5F
左邊是5-bit,右邊的變數要做有號數運算應該也要extend到5
12/28 22:04, 5F

12/28 22:05, , 6F
-bit,這樣結果應該就對了? (太久沒寫,有錯多包涵)
12/28 22:05, 6F

12/28 22:10, , 7F
我寫A-B都是直接寫成 {1'b0, 4'b0111} - {1'b1, 4'b1001}
12/28 22:10, 7F

12/30 12:39, , 8F
直接宣告signed寫A-B就好了 不用假會
12/30 12:39, 8F
文章代碼(AID): #1Ilhts0R (Electronics)