わっふるぶろぐ

わっふるが日々の出来事をただただ書いていきます~

『CODE』第12章 2進数加算器

第12章では、論理ゲートを組み合わせて、2進数のたし算をする2進数加算器を作る方法を紹介します!論理ゲートについては第11章で詳しく解説したので、よろしければご覧ください。

 

waffle202.hatenablog.com

 

2進数のたし算はとてもシンプルです。

  • 0足す0は0
  • 0足す1は1
  • 1足す0は1
  • 1足す1は0、繰り上げ1

の4種類です。表にすると↓のようになります。

f:id:waffle202:20200229063953p:image

こうして、1桁目のサムビット(和ビット)と2桁目のキャリービット(繰り上げビット)からなるビットのペアが得られました。それぞれの表は↓です。

f:id:waffle202:20200229064749p:image

2つの2進数のたし算は、10進数のように右から1桁ずつ足していきます。

 

     0 1 1 0 0 1 0 1

   + 1 0 1 1 0 1 1 0 

       1 0 0 0 1 1 0 1 1

 

この例では、3、6、7、8桁目で隣の桁への繰り上がりが起きています。繰り上がりは3つの2進数を加えます。さて、そろそろ2進数加算器を設計していきましょう!

 

まずは外部設計です。2進数加算器のコントロールパネルの外観は次のようなものです。

f:id:waffle202:20200229075717p:image

これらの8個ずつ2列のスイッチは入力デバイスです。上がオン(1)で、下がオフ(0)を意味します。下部の電球は出力デバイスです。点灯すれば1、点灯しなければ0を意味します。図は先の例で実行した結果を示しています。

 

次に内部設計です。キャリービットは先の表から ANDゲートで実現できそうですが、問題はサムビットです。第11章で紹介した4つのゲートでは実現できませんが、次のように、いくつかのゲートを組み合わせることで実現できます。

f:id:waffle202:20200229082302p:image

この回路はよく使われるので、XORゲートという名前が付いています。

f:id:waffle202:20200229083249p:plain

XORゲート

よって、2進入力AとBは、次のような回路で加算されます。

f:id:waffle202:20200229084404p:image

複数桁の加算では、この回路を複数使うので、簡単のため次のようなボックスで表現します。このボックスを半加算器といいます。

f:id:waffle202:20200229084441p:image

ちなみに、僕は基本情報技術者試験に合格していますが、半加算器はよく試験に出てきたイメージです笑

さて、先の例でも見たように、繰り上がり(キャリーイン)の場合は3つの2進数を加える必要があります。これは、↓の回路で実現できます。

f:id:waffle202:20200229093333p:image

これもよく使われるので、ボックスで表現します。このボックスは全加算器といいます。

f:id:waffle202:20200229092458p:image

この全加算器を組み合わせることにより、複数桁の加算ができます。次の図では、各キャリーアウトが次のキャリーインになっています。

f:id:waffle202:20200229102601p:image

それぞれのAとBにスイッチをつなぎます。また、それぞれのサムアウトと最後のキャリーアウトに電球をつなぎ、最初のキャリーインを接地すれば、外部設計の要件を満たすことができます。

 

これで8ビットの2進数加算器が完成しました!次の図は、8ビット加算器全体を一つのボックスとして描いたものです。

f:id:waffle202:20200229102842p:image

これを複数つなげば、より多くの桁の2進数加算器を作ることも可能です。では引き算はどうすればいいのか、それは第13章で解説します!

 

waffle202.hatenablog.com