數位電子學/數字加法器
數字加法器是一種能夠新增兩個數字 n 位二進位制數的數字裝置,其中 n 取決於電路的實現方式。數字加法器將兩個二進位制數 A 和 B 相加,以產生一個和 S 和一個進位 C。
半加器是一種數字裝置,用於新增兩個二進位制位 0 和 1。半加器輸出兩個輸入的和以及一個進位值。
- 0 + 0 = 和 0 進位 0
- 0 + 1 = 和 1 進位 0
- 1 + 0 = 和 1 進位 0
- 1 + 1 = 和 0 進位 1
0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1
___________
A ------| |
| Half |----- |
| Adder |
| |-----
B ------|___________|
半加器可以使用 AND 門和 XOR 門來構建,如下所示
全加器是一種邏輯電路,它對三個一位二進位制數執行加法運算。全加器產生三個輸入的和以及進位值。它可以與其他全加器組合(見下文)或獨立工作。
真值表
| A | B | Cin | Cout | S |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
注意,進位輸出前的最終 OR 門可以用 XOR 門替換,而不會改變結果邏輯。這是因為 OR 門和 XOR 門之間的唯一區別僅在兩個輸入都為 1 時才會出現;對於這裡所示的加法器,這是不可能的。如果希望直接使用常見的 IC 晶片實現加法器,使用兩種型別的門很方便。
全加器可以使用兩個半加器來構建,將A 和B 連線到一個半加器的輸入,將該半加器的和連線到第二個加法器的輸入,將Ci 連線到另一個輸入,並將兩個進位輸出進行 OR 運算。等效地,S 可以是A、B 和Ci 的三位 XOR,Co 可以是A、B 和Ci 的三位 多數函式。
可以使用多個全加器建立一個邏輯電路來新增N 位數。每個全加器輸入一個Cin,它是前一個加法器的Cout。這種加法器被稱為行波進位加法器,因為每個進位位都“行波”到下一個全加器。注意,第一個(也是唯一的第一個)全加器可以用半加器代替。
行波進位加法器的佈局很簡單,這允許快速設計時間;然而,行波進位加法器比較慢,因為每個全加器必須等待來自前一個全加器的進位位被計算出來。門延遲可以透過檢查全加器電路很容易地計算出來。每個全加器需要三個邏輯級。在 32 位 [行波進位] 加法器中,有 32 個全加器,因此關鍵路徑(最壞情況)延遲為 門延遲。
為了減少計算時間,工程師們設計了更快的二進位制數加法方法,使用**超前進位加法器**。超前進位加法器透過為每個位元位建立兩個訊號(*P* 和 *G*)來工作,這兩個訊號基於以下情況:進位是否從低位傳播過來(至少一個輸入為 '1'),該位是否產生進位(兩個輸入都為 '1'),或者該位是否抑制進位(兩個輸入都為 '0')。在大多數情況下,*P* 只是半加器的求和輸出,而 *G* 是同一個加器的進位輸出。在生成 *P* 和 *G* 之後,就可以建立每個位元位的進位。一些先進的超前進位架構包括**曼徹斯特進位鏈**、**布倫特-孔加法器**和**科格-斯通加法器**。

其他一些多位元加法器架構將加法器分解成多個塊。可以根據電路的傳播延遲來改變這些塊的長度,以最佳化計算時間。這些基於塊的加法器包括**進位旁路加法器**,它將為每個塊而不是每個位元確定 *P* 和 *G* 值,以及**進位選擇加法器**,它預先生成每個塊的兩個可能的進位輸入的和與進位值。
其他加法器設計包括**條件求和加法器**、**進位跳躍加法器**和**進位完全加法器**。
超前進位單元
[edit | edit source]透過組合多個超前進位加法器,可以建立更大的加法器。這可以在多個級別上使用,以建立更大的加法器。例如,以下加法器是一個 32 位加法器,它使用四個 8 位 CLA 和兩級 LCU。