1. 程式人生 > >加法器

加法器

div 加減乘除 半加器 ner 直接 輸入 clas 級聯 這就是

計算機裏的加減乘除四則運算,最基本的就是加法運算,其余三種運算都可以通過加法運算來實現

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
來源:知乎

加法器