跳轉到內容

電子學/加法器

來自華夏公益教科書

當將一個數字 A 與另一個數字 B 相加時,運算將產生一個和 S 和一個進位 C。加法器的操作如下所示。

數字加法器

[編輯 | 編輯原始碼]

半加器

[編輯 | 編輯原始碼]

如果有兩個二進位制數 A 和 B,則將這兩個數字相加的操作可以表示如下

A + B = S C
0 + 0 = 和 0 進位 0
0 + 1 = 和 1 進位 0
1 + 0 = 和 1 進位 0
1 + 1 = 和 0 進位 1

半加器的操作可以在下面的真值表中總結

0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

從上面可以看出,在邏輯閘方面,異或門會產生兩個輸入的和,與門會產生進位。

半加器可以由與門和異或門構成,如下圖所示

Half adder circuit diagram


              ___________
     A ------|           |
             |   Half    |----- 
             |   Adder   |
             |           |----- 
     B ------|___________|

全加器

[編輯 | 編輯原始碼]

全加器是一種邏輯電路,對三個一位二進位制數執行加法運算。全加器產生兩個輸入的和以及進位值。它可以與其他全加器組合(見下文),也可以獨立工作。

輸入 輸出
0 0 0 0 0
0 1 0 0 1
1 0 0 0 1
1 1 0 1 0
0 0 1 0 1
0 1 1 1 0
1 0 1 1 0
1 1 1 1 1
Full adder circuit diagram Inputs: {A, B, CarryIn} → Outputs: {Sum, CarryOut}
Schematic symbol for a 1-bit full adder

請注意,進位輸出之前的最終或門可以用異或門替換,而不會改變邏輯結果。這是因為或門和異或門之間的唯一區別在於兩個輸入都為 1 時;對於這裡顯示的加法器,這種情況永遠不可能發生。如果希望使用常用積體電路晶片直接實現加法器,則只使用兩種型別的門會很方便。

一個全加器可以使用兩個半加器構建,將AB連線到一個半加器的輸入,將來自該半加器的和連線到第二個加法器的輸入,將Ci連線到另一個輸入,並將兩個進位輸出或運算。等效地,S 可以是ABCi的三位異或運算,而Co可以是ABCi的三位 多數函式

多位加法器

[編輯 | 編輯原始碼]

行波進位加法器

[編輯 | 編輯原始碼]

可以使用多個全加器來建立邏輯電路,以新增N位數字。每個全加器都輸入一個Cin,它就是前一個加法器的Cout。這種加法器就是行波進位加法器,因為每個進位位都會“傳播”到下一個全加器。請注意,第一個(也是唯一第一個)全加器可以用半加器替換。

行波進位加法器的佈局很簡單,這使得設計時間很短;但是,行波進位加法器相對較慢,因為每個全加器都必須等待來自前一個全加器的進位位計算出來。 門延遲 可以透過檢查全加器電路輕鬆計算出來。每個全加器需要三個邏輯級。在 32 位 [行波進位] 加法器中,有 32 個全加器,因此關鍵路徑(最壞情況)延遲為 門延遲。

超前進位加法器

[編輯 | 編輯原始碼]

為了減少計算時間,工程師設計了使用**進位超前加法器**(carry lookahead adder)來更快地新增兩個二進位制數的方法。它們透過根據每個位元位置是否傳播進位(至少一個輸入為“1”)、在該位元位置生成進位(兩個輸入都為“1”)或在該位元位置殺死進位(兩個輸入都為“0”)來為每個位元位置建立兩個訊號(*P* 和 *G*)。在大多數情況下,*P* 只是半加器的求和輸出,而 *G* 是同一個加器的進位輸出。在生成 *P* 和 *G* 之後,會建立每個位元位置的進位。一些先進的進位超前架構包括**曼徹斯特進位鏈**(Manchester carry chain)、**布倫特-孔加法器**(Brent-Kung adder)和**科格-斯通加法器**(Kogge-Stone adder)。

帶有進位超前的4位加法器

一些其他的多位元加法器架構將加法器分解成塊。可以根據電路的傳播延遲來改變這些塊的長度,以最佳化計算時間。這些基於塊的加法器包括**進位旁路加法器**(carry bypass adder),它將為每個塊而不是每個位元確定 *P* 和 *G* 值,以及**進位選擇加法器**(carry select adder),它預先生成塊的兩種可能的進位輸入的求和值和進位值。

其他加法器設計包括**條件求和加法器**(conditional sum adder)、**進位跳躍加法器**(carry skip adder)和**進位完成加法器**(carry complete adder)。

進位超前單元

[編輯 | 編輯原始碼]

透過組合多個進位超前加法器,可以建立更大的加法器。這可以在多個級別上使用,以製作更大的加法器。例如,以下加法器是一個 64 位加法器,它使用四個 16 位 CLA,並有兩個級別的 LCU。

一個 64 位加法器
  1. 維基百科上的數字加法器
華夏公益教科書