Re: [問題] 二補數運算全加器 carry out 的問題
※ 引述《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
05/01 02:20, 1F
→
05/01 02:21, , 2F
05/01 02:21, 2F
→
05/01 02:22, , 3F
05/01 02:22, 3F
→
05/01 02:23, , 4F
05/01 02:23, 4F
→
05/01 02:25, , 5F
05/01 02:25, 5F
→
05/01 02:26, , 6F
05/01 02:26, 6F
→
05/01 02:28, , 7F
05/01 02:28, 7F
→
05/01 02:28, , 8F
05/01 02:28, 8F
→
05/01 03:27, , 9F
05/01 03:27, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):