加算器、またはサマー[ 1 ]は、数値の加算を実行するデジタル回路です。多くのコンピュータやその他の種類のプロセッサでは、加算器は算術論理演算ユニット(ALU)で使用されています。また、プロセッサの他の部分でも使用され、アドレス、テーブルインデックス、インクリメントおよびデクリメント演算子、および同様の操作の計算に使用されます。
加算器は、2進化10進数や3超過数など、多くの数値表現に対応して構築できますが、最も一般的な加算器は2進数で動作します。2の補数や1の補数を用いて負の数を表現する場合、加算器を加算減算器に簡単に変更できます。その他の符号付き数値表現では、基本加算器に加えて、より複雑なロジックが必要になります。
ジョージ・スティビッツは1937年に2ビット二進加算器(モデルK)を発明した。
半加算器は2つの単一の2進数を加算します。そして出力は 2 つあります。合計 ()そして運ぶ() キャリー信号は、多桁加算の次の桁へのオーバーフローを表します。合計の値は最も単純な半加算器の設計では、 XORゲートが組み込まれています。そしてANDゲート合計のブール論理(この場合)) は一方、キャリー() はORゲートを追加してキャリー出力を組み合わせることで、2つの半加算器を組み合わせて全加算器を作ることができます。[ 2 ]
半加算器の真理値表は次のとおりです。
様々な半加算器デジタル論理回路:
全加算器はバイナリ数を加算し、入力値と出力値の両方を考慮します。1ビット全加算器は3つの1ビット数を加算し、多くの場合次のように表記されます。、、 そして;そしてはオペランドであり、前の下位ステージから繰り上げられたビットです。[ 3 ]この回路は2ビットの出力を生成します。出力キャリーと出力和は通常、次の信号で表されます。そして合計は全加算器は通常、8ビット、16ビット、32ビットなどの2進数を加算する加算器のカスケード接続における構成要素の一つです。
全加算器は、カスタムトランジスタレベル回路や他のゲートで構成するなど、さまざまな方法で実装できます。最も一般的な実装方法は以下のとおりです。
上記の式はそしてカルノー図を用いて真理値表を簡略化することで、この真理値を導き出すことができる。
この実装では、キャリー出力前の最後のOR ゲートをXOR ゲートに置き換えても、結果として得られる論理は変わりません。これは、A と B の両方が 1 の場合、項がは常に 0 であり、したがっては0しかあり得ません。したがって、最終的なORゲートへの入力が両方とも1になることは決してありません(これはOR出力とXOR出力が異なる唯一の組み合わせです)。
NANDゲートとNORゲートの機能的完全性により、全加算器は9つのNANDゲート[ 4 ]または9つのNORゲートを使用して実装することもできます。
回路を実装する際に、1つのチップに1種類のゲートしか含まれていないシンプルな集積回路チップを使用する場合、2種類のゲートのみを使用することは便利です。
全加算器は、2つの半加算器を接続することによっても構成できます。そして半加算器の入力に渡し、その合計出力を取る。2番目のハーフアダーへの入力の1つとして、もう一方の入力として、そして最後に、2 つの半加算器からのキャリー出力が OR ゲートに接続されます。2 番目の半加算器からの和出力が最終的な和出力です (全加算器の出力と OR ゲートからの出力は最終キャリー出力 (全加算器のクリティカルパスは、両方のXORゲートを通過し、和ビットで終了します。XORゲートの処理に1回の遅延がかかると仮定すると、全加算器のクリティカルパスによって生じる遅延は次のようになります。
キャリーのクリティカルパスは、加算器内の 1 つの XOR ゲートとキャリーブロック内の 2 つのゲート (AND と OR) を通過するため、AND または OR ゲートが完了するのに 1 遅延かかる場合、遅延は次のようになります。
全加算器の真理値表は以下のとおりです。
全加算器のすべての入力を反転すると、すべての出力も反転します。これは、キャリーを反転する必要がないため、高速リップルキャリー加算器の設計に利用できます。[ 5 ]
様々な全加算器デジタル論理回路:


複数の全加算器を使用してNビット数を加算する論理回路を作成することが可能です。各全加算器は入力としてこれは前の加算器の。この種の加算器は、各キャリービットが次の全加算器に「波及」するため、リップルキャリー加算器(RCA)と呼ばれます。最初の(そして最初の)全加算器は、半加算器に置き換えることができます()
リップルキャリー加算器のレイアウトはシンプルなので、設計時間を短縮できます。しかし、各全加算器が前の全加算器からのキャリービットの計算を待つ必要があるため、リップルキャリー加算器は比較的低速です。ゲート遅延は、全加算器回路を調べることで簡単に計算できます。各全加算器は3レベルのロジックを必要とします。32ビットリップルキャリー加算器では、32個の全加算器があるため、クリティカルパス(最悪ケース)遅延は3(入力から)です。最初の加算器の)+ 31 × 2(後の加算器でのキャリー伝播用)= 65 ゲート遅延。[ 6 ]和ビットとキャリービットの両方を考慮したnビットキャリーリップル加算器 の最悪ケース遅延の一般式は次のとおりです。
交互にキャリー極性を切り替え、最適化されたAND-OR-Invertゲートを使用した設計では、約2倍の速度を実現できます。[ 7 ] [ 5 ]


計算時間を短縮するために、ワインバーガーとスミスは、キャリー先読み加算器(CLA)を使用して2つのバイナリ数を加算するより高速な方法を発明しました。[ 8 ]彼らは2つの信号(そして各ビット位置について、下位ビット位置からキャリーが伝播されるか(少なくとも1つの入力が1)、そのビット位置で生成されるか(両方の入力が1)、またはそのビット位置で消滅するか(両方の入力が0)に基づいて、)が決定されます。ほとんどの場合、これは単に半加算器の出力の合計であり、これは同じ加算器のキャリー出力です。そして生成されると、各ビット位置のキャリーが生成されます。
Weinberger-Smith CLA 再帰の単純な導出としては、Brent–Kung 加算器(BKA) [ 9 ]とKogge–Stone 加算器(KSA) [ 10 ] [ 11 ]がある。 これは、IEEE Journal of Solid-State Circuits に掲載された Oklobdzija と Zeydel の論文で示された。[ 12 ]
他のマルチビット加算器アーキテクチャでは、加算器をブロックに分割します。回路の伝搬遅延に基づいてこれらのブロックの長さを変更することで、計算時間を最適化できます。これらのブロックベースの加算器には、キャリースキップ(またはキャリーバイパス)加算器が含まれます。そして各ビットではなく各ブロックの値、およびキャリー選択加算器は、ブロックへの可能なキャリー入力(0または1)のいずれかに対して和とキャリー値を事前に生成し、キャリービットが既知の場合にマルチプレクサを使用して適切な結果を選択します。
複数のキャリー先読み加算器を組み合わせることで、さらに大きな加算器を作成できます。これは複数のレベルで使用して、さらに大きな加算器を作成することが可能です。例えば、以下の加算器は、2レベルのキャリー先読みユニットを備えた4つの16ビットCLAを使用する64ビット加算器です。
その他の加算器の設計には、キャリー選択加算器、条件付き和加算器、キャリースキップ加算器、キャリー完全加算器などがあります。
加算回路で3つ以上の数値の合計を計算する場合、桁上がり結果を伝播させない方が有利な場合があります。その代わりに、3入力加算器を使用し、合計と桁上がりの2つの結果を生成します。合計と桁上がりは、桁上がり信号の伝播を待つことなく、後続の3数加算器の2つの入力に入力できます。ただし、すべての加算段階が完了したら、最終的な合計と桁上がりの結果を結合するために、従来の加算器(リップルキャリー加算器やルックアヘッド加算器など)を使用する必要があります。
全加算器は3:2 の損失圧縮器と見なすことができます。これは 3 つの 1 ビット入力を合計し、結果を単一の 2 ビット数として返します。つまり、8 つの入力値を 4 つの出力値にマッピングします (「カウンタ」の代わりに「圧縮器」という用語が導入されたのは[ 13 ]です)。したがって、たとえば、バイナリ入力 101 は、1 + 0 + 1 = 10 (10 進数 2) の出力になります。キャリーアウトは結果のビット 1 を表し、合計はビット 0 を表します。同様に、半加算器は2:2 の損失圧縮器として使用でき、4 つの可能な入力を 3 つの可能な出力に圧縮します。
このようなコンプレッサは、3つ以上の加数の加算を高速化するために使用できます。加数の数がちょうど3の場合、このレイアウトはキャリーセーブ加算器と呼ばれます。加数の数が4以上の場合、複数のコンプレッサ層が必要となり、回路にはさまざまな設計が可能です。最も一般的なのは、ダッダツリーとウォレスツリーです。この種の回路は乗算器回路で最もよく使用されるため、これらの回路はダッダ乗算器とウォレス乗算器とも呼ばれます。

トフォリゲートとCNOTゲートのみを使用して、量子全加算器と半加算器を生成することが可能です。[ 14 ] [ 15 ] [ 16 ] CNOTゲートとトフォリゲートはどちらも古典的論理ゲートであるため、同じ回路を古典的な可逆計算にも実装できます。
バイナリ加算器と同様に、2 つの入力電流を組み合わせることで、それらの電流を効果的に加算できます。ハードウェアの制約内で、非バイナリ信号 (つまり、ベースが 2 より大きい信号) を加算して合計を計算できます。「加算増幅器」とも呼ばれるこの技術[ 20 ]は、加算回路のトランジスタ数を減らすために使用できます。