2018-08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【解説記事】2進数&全加算器

こんにちは、竹村です。

今回は2進数と全加算器についてです。
さっそく説明を始めていきましょう


ついに今回で足し算ができるようになるのですが、回路の説明の前にCPUで数がどのように表現されているか説明しなければなりません。
以前も話しましたが、CPUの内部では0と1だけですべてが表現されています。
すると、0と1だけで数を表す方法、つまり2進数が必要となってくるのです。

それではここで、2進数を復習しておきましょう。
10進数は9の次に繰り上がりが起こるのに対して、2進数は1の次に繰り上がりが起こります
10進数の0から10までと、それに対応する2進数を表1にまとめました。
2進数は下の桁から10進数の1,2,4,8,…を表しているので、2進数の1になっている桁に対応する10進数を足せば、2進数を10進数に変換できます。
たとえば、1011という2進数を10進数に直すと1+2+8=11となります。

10進数
0
1
2
3
4
5
6
7
8
9
10
2進数
0
1
10
11
100
101
110
111
1000
1001
1010
(表1:2進数と10進数)

では、2進数の足し算はどのようになるのでしょうか?
基本的には10進数と同じで、下の桁から足していって繰り上がりが生じたら次の桁に繰り上がった分の数を足します
たとえば、1110+1011=11001は図1のようになります。
一番上の行は繰り上がりを表しています。
1110と1011と11001は10進数でそれぞれ14と11と25なので、足し算が正しく行なわれていることがわかります。

2進数の足し算
(図1:2進数の足し算)

このような足し算を回路で実現していくのですが、一度にすべての桁を考えるのは難しいので、部分的に抜き出して一桁の足し算を計算する回路を考えていきます。
その回路のことを全加算器と呼びます。
では、全加算器は何を入力とし、何を出力とすればいいのでしょうか。

入力から考えていきます。
まず、足し合わせる2つの数が必要ですね。
それに、下の桁からの繰り上りがあった場合は、それも足さなくてはいけません。
すると、3つの0か1の入力が必要になります。

次に、出力を考えてみましょう。
当たり前ですが、その桁の足し合わされた結果の数が必要です。
さらに、繰り上がりがあった場合には、次の桁にそのことを伝えなくてはいけません。
よって、2つの0か1の出力が必要になります。

では、どのような入力のときにどのような出力になるのでしょうか。
真理値表を図2にまとめてみました。
入力は、下の桁からの繰り上がりをcin(carry inの略)、足し合わせる2つの数をin1、in2としました。
出力は、上の桁への繰り上がりをcout(carry outの略)、足し合わせた結果をoutとしました。
入力が3種類あるので、2×2×2=8種類の入力パターンがあることに注意しましょう。

 cin 
 in1 
 in2 
 cout 
 out 
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
(表2:全加算器の真理値表)

では、この真理値表が正しいか確認してみましょう。
実は以前の活動報告で説明したことがありますが、この記事でも説明します。
要は、3つの0か1を足して、結果を2桁の2進数で表せばいいのです。
このとき、上位の桁がcoutとなり、下位の桁がoutとなります。
足す順番は結果に関係ないので、以下の4パターンしかありません。

0+0+0=00
0+0+1=01
0+1+1=10
1+1+1=11

つまり、入力に1がいくつあるかで結果が決まります
実際に真理値表を確認してみると、確かに合っています。

そして、この真理値表に対応する回路、全加算器は図2のように論理ゲートを組み合わせることで実現できます。
線が重なっているところは、黒い丸があるところだけつながっています

FullAdder.png
(図2:全加算器)

これが先ほどの真理値表通りに動くかどうかの確認は、すべてのパターンをここで紹介するのは無駄に長くなるだけなので、2つの例で確認することにします。
以下の2つの図では、0を黒、1を赤で表しました

FullAdder-ex1.png
(図3:cin=0,in1=0,in2=1の場合)

FullAdder-ex2.png
(図4:cin=1,in1=1,in2=0の場合)

確かに真理値表と一致しています。
論理ゲートの挙動を覚えていない人は、前回の記事と見比べながら確かめるといいと思います。

さて、これで1桁の足し算ができるようになりました。
これから全加算器は図5のように表します。
FAはfull adderの略です。

FA.png
(図5:全加算器の略記)

あとは、前の桁のcoutを次の桁のcinにすれば、何桁の計算でもできるようになります。
ただし、一番下の桁のcinは0です。
例として、4桁の計算をする回路を図6に示します。
足し合わせる数をa,b、足した結果をcとし、それぞれ下の桁からa0,a1,a2,a3などとしました。

adder.png
(図6:4桁の足し算をする回路)

この回路では、4桁目のcoutを一番上の桁とすることで、出力で5桁の2進数を表現できますが、普通は4桁目のcoutを無視して、出力は4桁の2進数とします。
よって、この回路では出力が0から15までの数しか表現できないので、足した結果がこの範囲に収まるように、足し合わせる数に気を付ける必要があります。
もし、足した結果が15を超えるような入力をした場合、15の次は0に戻るので、15で割った余りが出力されることになります。


今回の解説は以上です。
足し算をするだけでこのややこしさです。わかりにくいことがあったら遠慮なくコメントで質問してくださいね。
さて次回は、ついに「計算」パート最終章!2の補数表現とマルチプレクサについて解説しようと思います。
足し算の次は引き算です!

それではまた、次回の更新で。


コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

http://antisemiconductor.blog.fc2.com/tb.php/18-614d3094
この記事にトラックバックする(FC2ブログユーザー)

«  | ホーム |  »

プロフィール

アンチ半導体同盟(仮)

Author:アンチ半導体同盟(仮)
東京工業大学 工大祭 2013でリレー式計算機を展示します。
日時:10月12日(土)、10月13日(日)
場所:大岡山キャンパス西9号館W934講義室
企画名:リレー式計算機展

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (0)
活動紹介 (19)
メンバー紹介 (2)
解説記事 (6)

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。