計算機里的加減乘除四則運算,最基本的就是加法運算,其余三種運算都可以通過加法運算來實現。
I. 半加器 (Half Adder)
考慮一位二進制加法運算,如果不考慮進位的話,我們可以得到如下真值表:

A,B表示輸入,C(Carry)表示進位,S(Sum)表示結果。
可以得到:

用邏輯門來實現:

II. 全加器 (Full Adder)
有了半加器以后我們發現,這種加法器並不能實現多位數的加法,因此誕生了有進位的全加器。和半加器不一樣,一個全加器有三個輸入(A,B和低位進位)和兩個輸出(和以及進位輸出)。
列出真值表:

可以得到:


邏輯門實現:

III. 紋波進位加法器 (Ripple Carry Adder)
將n個全加器級聯起來,就是一個n位的加法器,這就是逐級進位加法器。

考慮到門電路中的電場狀態改變需要時間,如果輸入電平發生了變化,那么輸出電平需要一段時間后才會響應,當然這段時間很小,小到了納秒級別。因此,這種加法器有個缺點:每一位的進位輸入依賴於上一位的進位輸出,只有前一位的進位信號穩定后,這一位的全加器的運算才是有意義的。如果位數n很大的話,整個加法器會變慢,最后會限制CPU主頻的提高。
IV. 超前進位加法器 (Carry-lookahead Adder)
既然級聯一位的加法器算有這樣的缺點,那就干脆直接設計一個位數足夠大的加法器!
我們列出2位的全加器的真值表:

我們看到,隨着n增大,真值表的行數是指數級別增長的。即使位數僅僅只有2,真值表的行數都達到了32,人工求解布爾表達式變得很困難。但是理論上,這樣的全加器的確存在,而且實際上,有一個更優雅的設計方法。
再次考慮上面講到的全加器,不再以級聯的方式獲得進位輸入,而是直接根據輸入,設計電路得到合適的進位,這樣設計出來的加法器叫做超前進位加法器。

其中,每一級的進位可以由當前的兩個位產生(generate),
;或者由上一級傳遞(propagate)的進位
和當前輸入累加導致的,
,因此下一級的進位是
。
因此,得到關於2位超前進位加法器的布爾表達式:





考慮到集成電路的面積,成本,功耗,散熱等因素,超前進位加法器的位數一般不會過大。一般將幾個超前進位加法器(如8位,16位)級聯起來,得到位數夠寬的加法器。
鏈接:https://www.zhihu.com/question/29707696/answer/114610705
來源:知乎
