半加算器
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、デジタルコンピュータの加算器について説明しています。アナログ回路でのオペアンプの使用法のひとつとしての加算回路については「オペアンプ#加算回路」をご覧ください。

加算器[1][2](かさんき、: AdderあるいはSummerとも)あるいは加算回路[3][4][2][5][6](かさんかいろ、: adder circuit)は、加算を行う演算装置[7][8]。演算回路の基本となる演算器のうち、加算足し算)の機能を持つ演算器のことであり[6]、2進数の加算を行う論理回路[2]

半加算器が基本であり[2]、半加算器は下位桁からの桁上がりを考慮しない1ビット同士の加算を行い、和と桁上がりを出力する。全加算器は下位桁からの桁上がりを考慮した1ビット同士の加算を行い、和と桁上がりを出力する。そして、多桁の加算を行う場合は半加算器と全加算器を組み合わせて加算器を構成する[9]。ちなみに、情報処理技術者試験の教科書の説明では、加算回路の中でも半加算回路は二進数最下位桁の加算を行う回路であり、全加算回路は二進数最下位桁以外の加算を行う回路であり、これら2つの回路を組み合わせると、二進数の加算ができる[3]という説明になっている。

[注釈 1]
半加算器(半加算回路)

半加算器(はんかさんき、Half adder)あるいは半加算回路(はんかさんかいろ、: Half Adder Circuit)は、2進数の同じ桁どうしの演算をして(通常は最下位の桁)、桁上がりは桁上げ出力(Carry out)によって出力する。ANDゲートORゲートNOTゲートの組み合わせで作ると図のようになる。

入力A、入力B、出力(S、Sum)、桁上げ出力(C、Carry out)の関係を示す真理値表は次の通り。

半加算器ABCS
0000
0101
1001
1110

SはAとBのXORゲートによる出力に他ならない。論理の方式にもよるが、たとえば三路スイッチ(たとえば階段の上のスイッチでも下のスイッチでもオンとオフをトグル可能なスイッチに見られる方式)のような構造でXORを直接実装できる方式であれば、直接実現することができる。XORの実装方法の詳細についてはXORゲートの記事を参照のこと。ただし加算器の場合、後述する高速桁上げのためにANDとOR(ないしNOR)を生成する場合には、それらの結果を流用することもできるので、好適な設計が違うこともある。
全加算器(全加算回路)

全加算器(ぜんかさんき、Full adder)あるいは全加算回路(ぜんかさんかいろ、: Full Adder Circuit)は、2進数の最下位以外の同じ桁どうしの演算をして、下位からの桁上げ入力を含めて出力する。下位の桁上げ出力を上位の桁上げ入力に接続することにより、任意の桁数の2進数の加算が可能となる。1個の全加算器は、2個の半加算器と1個のORから構成される。

入力が3本存在し(入力A、入力B、桁上げ入力)、全て対等に動作する。しかし回路上は3入力が対称になっているとは限らない。

入力A、入力B、桁上げ入力(X)、出力(S)、桁上げ出力(C)の関係を示す真理値表は次の通り。

全加算器ABXCS
00000
00101
01001
01110
10001
10110
11010
11111

複数ビットの加算器

前述の半加算器1個を最下位桁用に、この全加算器を他の上位桁用に桁数分だけ組み合わせる事によって、任意の桁数の2進数加算器が構成できる。下図は6桁の加算器の回路図である。(A5A4A3A2A1A0+B5B4B3B2B1B0→CS5S4S3S2S1S0)
最上位桁から出るCは、単純には「桁あふれ、オーバーフロー、Overflow、Overflow Carry」とは判定できない(解釈による)ことに注意が必要である。敢えて呼ぶなら、「エンドキャリー、End Carry」となる。
6桁の加算器、左が最下位桁(最下位ビット) 右が最上位桁(最上位ビット
キャリー先読み加算器

加算は情報処理の基本であるため、高速な情報処理のためにはまず加算器の動作の高速性が求められる。論理回路の動作速度は、入力から出力までの間にある基本論理素子(ANDまたはOR回路)の個数が大きく影響するため、加算器におけるこの段数を考察してみよう。

上記の半加算器では入力AまたはBから出力Sまでの基本論理素子の段数は2、出力Cまでの段数は1である。(一般にはNOTは段数に含めない。基本論理素子を構成する回路の入力用トランジスタを逆に使うだけでNOTは実現できるからである。)

同様に、全加算器ではSの段数は4、Cの段数も4になる。このことより、上記の6桁の加算器では、最大の段数となるA0入力からC出力までの間は、全加算器Cの段数×5+半加算器Cの段数 = 4×5+1 = 21段ということになる。

桁数が大きくなってくるとこの段数はかなり大きいものとなるので、各素子の伝播遅延の合計の遅延時間も顕著となり高速処理の大きな障害になってくる。このため、段数を大きくしている桁上げ信号(キャリー信号)の部分を別に計算する事により、段数を減らすという事がしばしば行なわれる。この、桁上げ信号を別の論理回路で生成する手法の事を「キャリー先読み(キャリールックアヘッド : Carry look ahead)」と呼び、半加算器、全加算器とこのキャリー先読み回路を含めて全体を「キャリールックアヘッドアダー (Carry look ahead adder)」と呼ぶ。キャリー先読み方式の加算器

具体的には、S1を生成している全加算器の桁上げ入力は、X1 ← A0 AND B0

となり、S2を生成している全加算器の桁上げ入力は、X2 ← (A1 AND B1) OR (A0 AND B0 AND A1) OR (A0 AND B0 AND B1)

となる。さらに、S3を生成している全加算器の桁上げ入力は、X3 ← (A2 AND B2) OR (A1 AND B1 AND A2) OR (A1 AND B1 AND B2)OR (A0 AND B0 AND A1 AND A2) OR (A0 AND B0 AND A1 AND B2)OR (A0 AND B0 AND B1 AND A2) OR (A0 AND B0 AND B1 AND B2)

となる。このように、桁数が上がれば回路は飛躍的に複雑になるが、いずれもたった2段で桁上げ信号が生成される。(2入力のANDも3入力のANDも、回路上はトランジスタを並列に並べるだけの事であるので、1段である事に変わりがない。ORについても同様。)

この方法を用いると、桁数がいくつになってもたった4段しか必要としないため画期的な高速化を図る事ができる。しかし、必要となる回路素子数が格段に多くなるため、消費電力と回路のコストが大きく犠牲になる。
キャリー予測

キャリー先読みを行わない加算器の場合、上位桁の計算は、下位桁の値が決定するまで開始できない。

そこで、全桁数を半分に分割し、下位桁の計算と同時に、上位桁の計算を、下位桁から上位桁への桁上げの有無双方の2通りについて行う。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:22 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef