加法器
計算機裏的加減乘除四則運算,最基本的就是加法運算,其余三種運算都可以通過加法運算來實現
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
來源:知乎
加法器