Re: [問題] 二補數運算全加器 carry out 的問題

看板Electronics作者 (迪諾~)時間17年前 (2008/05/01 01:07), 編輯推噓1(108)
留言9則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《DerekJeter (MLB第一型男)》之銘言: : 4-bit 對 4-bit 二補數的加法運算 : 也就是 input a[3:0], b[3:0] : 和 output sum[3:0] 都是二補數表示法 : 另外還有 input carry_in 和 output carry_ou, overflow : 想請問 carry_out 的定義以及如何工作? : overflow 就是當 sum 不在 -8 ~ 7 之間時要顯示 overflow = 1 : 當 overflow 發生時,計算結果應該把 carry_out 一起拿來看 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 也就是 {carry_out,sum} : 那如果沒有發生 overflow 時的 carry_out 應該如何顯示呢? 你的問題有點奇怪... @@" 我記得白算盤裡面也有提, 算術溢位(arithmetic overflow)算是硬體例外(exception) 當overflow發生時(overflow = 1), 運算數值是多少已經不重要了, 必需靠其他機制來處理這個exception case 當然, 如果 overflow = 0, 才需要care/verify最後的運算結果正不正確~ : 是否不用理它(顯示0或1都OK)? 對~ 最後一級的carry_out, 如果沒拿來作特殊設計, 通常不用管它~ _ 這情況很有點類似 D-type flip-flop 的 Q 那條訊號,  就是硬體運算時會產生這條線, 但實際上通常我們不需要這條~ (不過也有例外就是了) : 我有在網路找過一些電路圖 : 譬如說 ripple carry adder : 它就直接把最後一個的 full adder 的 c_out 當作 carry_out ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 沒錯~ 就是這樣~ : 可是當 3+(-1) 時 : 加法器做的其實是 a = 0011, b = 1111, c_in = 0 : carry 1 1 1 1 : a 0 0 1 1 : b 1 1 1 1 : +) c_in 0 : ---------------------------- : sum 0 0 1 0 : 也就是會使 carry_out = 1 : 這樣是正確的嗎? : 還是應該讓它為 0 (因為計算結果2是正數) : 感激不盡 no no 你把sign-bit的位置搞錯了~!! 當 3+(-1) 時 carry 1 1 1 1 a 0 0 1 1 (+3) b 1 1 1 1 (-1) +) c_in 0 ---------------------------- sum 0 0 1 0 (+2) 畫黃色的位元是sign-bit, 不是你指的carry_out那條 如我之前所述, carry_out是多少並不重要, 它不是我們關心的重點~ 順帶一提, 通常用來判斷加法溢位(overflow/underflow)的法則很簡單, 只要判斷以下兩種case, 其中一種成立即為 "overflow = 1" (只要看sign-bit) 1. 正+正結果為負(overflow) 或 2. 負+負結果為正(underflow) 另外在白算盤書上有介紹, 比上面的方法更快更簡單就能判斷是否發生溢位, 而且整個過程只需要多加一個 "XOR gate" 就搞定了~!! 詳細作法請參閱白算盤"Arithmetic for Computers"那一章~ 如果不想讓overflow發生, 則必須透過有號擴充(sign extend). 這樣可省下判斷overflow的logic電路, (連overflow那條訊號也免了) 但付出的代價為運算時的bit width增加, 造成整個latency被拉長~ 你的問題以前也曾讓我感到非常confused~ 其實只要釐清幾個基本定義跟觀念, 自己花點時間, 實際舉一些例子, 搭配硬體架構圖好好想清楚, 應該不難理解~ -- 以上, 希望對原po有幫助~ 有錯的話還請板友指正~ <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.168.131 ※ 編輯: DinoZavolta 來自: 140.117.168.131 (05/01 02:09)

05/01 02:20, , 1F
你第二段[D-type flip-flop的Q_bar那條訊號,實際上
05/01 02:20, 1F

05/01 02:21, , 2F
我們通常不需要] 假設A,B是兩個 reg
05/01 02:21, 2F

05/01 02:22, , 3F
假設有某一段敘述使得有 B <= ~A; 的電路,那你覺得
05/01 02:22, 3F

05/01 02:23, , 4F
合成軟體會笨到把A的Q接反向器在接B還是直接接A的Q_bar
05/01 02:23, 4F

05/01 02:25, , 5F
此外,一開始[當overflow發生 運算數值多少已不重要]
05/01 02:25, 5F

05/01 02:26, , 6F
並非都是如此,一般應該會依照應用需求來對輸出做修正
05/01 02:26, 6F

05/01 02:28, , 7F
也許增加1bit來完成正確輸出或是做shift或飽和來減少
05/01 02:28, 7F

05/01 02:28, , 8F
因為溢流而產生的誤差損失
05/01 02:28, 8F

05/01 03:27, , 9F
多謝b大指教~ :)
05/01 03:27, 9F
文章代碼(AID): #186ATSWv (Electronics)
文章代碼(AID): #186ATSWv (Electronics)