看板 Electronics 關於我們 聯絡資訊
各位前輩好,初學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