第3回: 加算器(その1)

半加算器と全加算器(p.131)

コンピュータは演算を行うもの、で、すべての演算は加算から導かれますから、 加算を行う加算器 (adder)は、まさにコンピュータの基本要素といえます。 そして2進数で数値・データをあらわす現在のコンピュータでは、 2進数の加算を行う加算器が必要なわけですが、 結局1桁分の2進数の加算を行う「1ビット加算器」があれば、 それを組み合わせて何桁の加算、さらにはどんな演算もできますから、 1ビットの加算器こそ、コンピュータの究極の基本要素といえます。

1桁の2進数、とは、0か1か、ですから、2つの1桁2進数の加算、は、 次の4通りしかありません。

最後の1+1のときだけ、結果が2桁になりますので、 上の桁をC (carry; 桁上がり)、下の桁をS (sum; 和)とすれば、 次のような真理値表を考えればよいことになります。
A B | C S
----+----
0 0 | 0 0
0 1 | 0 1
1 0 | 0 1
1 1 | 1 0
この真理値表を満たす論理回路こそ、「1ビットの加算器」であるわけです。 このような加算器を半加算器 (half adder; HA)と呼びますが、 実はこの半加算器だけでは、桁数の多い加算を行うことができません。 たとえば次のような2桁の加算を行うことを考えましょう。
   0 1
+) 1 1
------
 1 0 0
一番下の桁の加算の結果、上の桁に桁上がり1があって、 上の桁では、この下の桁からの繰り上がりと、与えられている0, 1の加算、 つまり結果として 1 + 0 + 1 = 10 という、3つの数の加算を 行っているわけです。 半加算器は2つの数の加算を行うだけでしたから、 これではまずいわけです。

そこで、3つの数の加算を行う加算器を考えることにしましょう。 つまり次のような真理値表を考えるわけです。

An Bn Cn-1 | Cn Sn
-----------+------
 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
このような真理値表を持つ論理回路を 全加算器 (full adder; FA)と呼びます。 これは、n桁目のAn, Bnと、下の桁(n-1桁目)からの桁上がり信号Cn-1を 加算する、というはたらきです。 そして結果のCnが、このn桁目で発生する桁上がり、つまり次のn+1桁目へ 渡される桁上がり信号であるわけです。

この全加算器の作り方はいろいろあります。 たとえば地道に真理値表からカルノー図を描いて論理関数を簡略化して 論理回路を作る方法、2つの半加算器を組み合わせる方法(下図)、 などです。 (この方法は、「A+B+C = (A+B)+Cと分け、A+Bか(A+B)+Cのどちらかで 桁上がりが起こると、全体として桁上がりが起こる、ということを 使っているわけです)

        +----+             ORゲート
An   ---|   C|-------------)--
        | HA |    +----+    )  >-- Cn
Bn   ---|   S|----|   C|---)--
        +----+    | HA |
Cn-1 -------------|   S|---------- Sn
                  +----+
このうち、 とかけますが、 桁上がりについて、もう少し考えてみると、 桁上がりが発生する(Cn=1となる)場合は、次のいずれかです。 この2つを分けて考えると、次のような論理式を書くことができます。 ところがPn=An + Bnとおくと、 PnとPnの違いはAn=Bn=1のときだけで、Pn=1, Q=0となりますが、 このときは生成項Gn=1なので、伝播項Qnに関係なく無条件にCn=1となります。 言い換えると、Cnは次のように書いても、結果はまったく同じであるわけです。 これらの式を使って、全加算器をつくることができるわけです。

直列加算器(p.135)

※ここは講義では触れていません

桁数の多い加算を行う回路構成で、もっともコンパクトなのは、 次のような直列加算器(ビットシリアル加算器)です。

これは、最下位(Least Significant Bit; LSB)から1桁ずつ、 順番に加算をしていくわけです。 1つ前の桁からの桁上がりを覚えておくために、 1ビットレジスタを置いているわけです。 そして被演算数のAn, Bnは、つながっているレジスタ(シフトレジスタ)から、 LSBから順番に1桁ずつ送られてくるわけです。

この直列加算器は、加算器自体が1個で済みますが、 N桁の加算を行うために、Nクロック周期かかりますから、 演算時間が大きくなるというデメリットがあります。

桁上げ伝播加算器(p.137)

直列加算器でやっていることを、N個の加算器をつないで 行うものが、桁上げ伝播加算器 (Ripple Carry Adder; RCAです。 つまり次の図のように、N個の全加算器をつなぐわけです。

課題1

4ビットの桁上げ伝播加算器(RCA)のブロック図を描いてみてください。 1つの演算ブロック(全加算器や半加算器)の演算遅延時間をΔTとおく (簡単のため全加算器と半加算器の演算遅延時間は同じとします)とき、 この4ビット加算器全体の演算時間を求めてみてください。 なお結果を導く途中過程も明記のこと。 解答例
この回のソボクな疑問集
戻る