前回は、4 ビット加算器を構成し、動作を VerilogHDL でシミュレーションしました。
今回は、じっさいにロジック IC を使って、4 ビット加算器をつくってみたいと思います。
回路図
構成ブロック図
図 1 が、全体の構成ブロック図 (再掲) です。
加算器は、すべて全加算器です。
教科書的には、最下桁は半加算器となるのですが、同じ回路を 4 個組み立てて、パーツとして利用するほうがわかりやすいです。
そのために、最下桁の桁上がり入力 Ci は GND に接続し、常に 0 とします。
入力は A、B それぞれ 4 ビットです。信号 A[n] は、bit n の値です。
出力は S で、4 ビットです。
最終桁の桁上がり信号はオーバーフロー OF とします。これを 5 ビット目として扱うことも可能です。ただし、出力の最大値は 0b11110 です。
全加算器回路図
図 2 が、全加算器の回路図 (再掲) です。
入力信号は A、B です。下位からの桁上がり入力は CI、上位への桁上がり出力は CO です。
全体を FullAdder とし、1 つのパーツとしてあつかいます。4 ビット加算器には、FullAdder が 4 個必要なので、この回路を 4 組つくります。
上にも書きましたが、半加算器は使いません。
入力信号回路図
加算器だけつくっても、なにも起こりません。信号を入力し、出力を確認できるようにする必要がありますね。教科書にはでてこない (;´Д`)
入力信号は、4 ビットバイナリ信号を 2 組、用意します。
今回は簡単に、8 ビットのディップスイッチを使いました。左側 1~4 を信号 A、右側 5~8 を信号 B としています。
R1~R8 はプルダウン抵抗です。なぜこの抵抗が必要か? 一言でいうと、0 をつくるため、です。
そのほか、たとえばカウンタの出力をもってくるとか、Arduino で出力させるとか、どんな方法でもいいです。お好みで。
出力信号表示回路図
出力信号の確認のための表示回路です。
4 ビット信号なので、LED を 4 個ならべます。16 進表示ができる表示器ならなんでもいいです。お好みで。
オーバーフロー表示も LED です。
さらに上位桁へわたす桁上がり信号でもあり、5 ビット目でもあり、考え方、用途次第で、お好きなように。
使った LED は高輝度タイプでしたので、電流値を 1mA 以下としています。明るさは充分です。
LED に合わせて、抵抗値を調整して下さい。
ブレッドボードのようす
あ、ブレッドボード回路図ではありません。じっさいにつくったよ、という証拠写真 (;´Д`) です。
そういえば、実体配線図ってのは、俺が子どもだったころにもあった。当時は、真空管ラジオとかだったけど。でも、意味わかんねぇと思って、回路図をみるようになった。単なる線のつながりではなくて、どういう意味のある接続かを理解することが、回路の理解につながったと思います。
ってことで、じっさいに組み立てた 4 ビット加算器のブレッドボードの写真です。
左下が入力信号回路、8 ビットのディップスイッチです。右下が出力表示回路、LED が 5 個並んでいます。
わかりにくいですが、入力が 0b0100 と 0b0101 で、出力が 0b1001 となっています。つまり、4+5=9 の加算ができています。
中央の IC がゲート IC です。左から、XOR、AND、OR ゲートで、2 組の全加算器です。それが左右 2 組で、計 4 組の全加算器になっています。
おなじものをもう 1 セットつくれば、8 ビット加算器にできます。半加算器を使ってないので、何セットでもつないじゃってください (^_^;)
動作の確認
動作を確認しておきましょう。
シミュレーションでもやったように、いろいろな入力を与えて、加算された出力が得られればオッケーです。
いくつか撮影してみました (図 6)。
上: 0b0001 + 0b0101 = 0b0110
中央:0b1010 + 0b0010 = 0b1100
下: 0b1111 + 0b0011 = 0b0010 (overflow)
うまく加算できていますね。
ちなみに下の加算は、0b1111 + 0b0011 = 0b10010 (18d) と解釈することもできます。
製作後記
4 ビット加算器を製作し、動作を確認してみました。
ロジック回路で組むのはもう少しめんどうかなぁとか思っていたのですが、前にデジタル時計のカウンタ回路をいくつもつくっているので、慣れちゃって、簡単でした。8 ビット加算器でもよかったかな、とか思っちゃうくらい。
で、つくりながら考えたのですが、カウンタって、ある数に 1 を加算していくって回路ですよね。つまり、加算器でカウンタ回路がつくれる、ってこと。
それ、やってみようじゃありませんか。