トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第69回]
●Full Adder
お待たせしました。
やっと、Full Adder(全加算器)です。
Half Adderは加算後の桁上がりはありますが、下位桁からの桁上がりは考慮しません。
Half Adderだけでは、それを多桁につないでもまっとうな計算ができません。
上位桁への桁上がりだけあって下位桁からの桁上がりはないという、なんとも半端な加算器ですからHalf Adder(半加算器)です。
そのHalf Adder(半加算器)を2個つなぐとFull Adder(全加算器)になります。
それが下の回路図です。
A、Bが入力値でXが加算後の値です。
C0は下位桁からのキャリー(桁上がり)でC1が上位桁へのキャリー(桁上がり)です。
1桁の加算器だけでゲートを9個も使います。
トランジスタに換算すると32個も使います。
8ビットの加算器を作るとトランジスタが256個も必要です。
なんともたまらん、という感じではあります。
しかし、Half Adderのところでも書きましたように、このFull Adder回路はNOTを1つ追加するだけで、AND、OR、XORの論理演算器にもなってしまいます。
その意味ではお得な回路ということになります。
下はNOTを追加してORも出力できるようにしたFull Adder回路です。
こちらはトランジスタ版Full Adder回路です。
Half Adderのときと同じように、トランジスタロジック回路組立キットのHC00、HCU04、HC02を使って上の回路を組んで動作テストをしました。
最初は、下位桁からのキャリーはなし(C0=0)で、A=0、B=0です。
左がHC00で右上がHCU04、右下がHC02です。
緑LEDは入力を表示します。
赤LEDは出力を表示します。
1のときに消灯し、0のときに点灯します。
これは設計するときにちょっと迷いました。
直感的には1が点灯で0が消灯のほうが分かりやすいのではないか、と。
しかしとくにロジックゲートの場合で考えると、無信号のときはHで、信号有りが0という場合が圧倒的に多いと思います。
加算器や論理演算の場合には1も0も対等なのですが(どちらかというと 1 に意味があるかも)、しかしこれからいよいよ深く関わっていきますトランジスタ版CPUはロジックゲートの塊ですから、やはり負論理を優先して1で消灯、0で点灯に決定しました。
それで。
A=0、B=0ですから入力の緑LEDは両方とも点灯しています(左側HC00基板)。
下位桁からのキャリーはありません(C0=0)から、そちらの緑LEDも点灯しています(右下HC02基板)。
結果の値はX=0ですから赤LEDが点灯しています(右下HC02基板)。
上位桁へのキャリーはありません(C1=0)から、赤LEDが点灯しています(左側HC00基板)。
A=0、B=1の入力です。
A=0、B=1ですからAの緑LEDは点灯していますがBは消灯しています(左側HC00基板)。
下位桁からのキャリーはありません(C0=0)から、そちらの緑LEDは点灯しています(右下HC02基板)。
結果の値はX=1ですから赤LEDが消灯しています(右下HC02基板)。
上位桁へのキャリーはありません(C1=0)から、赤LEDが点灯しています(左側HC00基板)。
A=1、B=0を入力しました。
A=1、B=0ですからAの緑LEDは消灯していますがBは点灯しています(左側HC00基板)。
下位桁からのキャリーはありません(C0=0)から、そちらの緑LEDは点灯しています(右下HC02基板)。
結果の値はX=1ですから赤LEDが消灯しています(右下HC02基板)。
上位桁へのキャリーはありません(C1=0)から、赤LEDが点灯しています(左側HC00基板)。
A=1、B=1を入力しました。
A=1、B=1ですから入力の緑LEDは両方とも消灯しています(左側HC00基板)。
下位桁からのキャリーはありません(C0=0)から、そちらの緑LEDは点灯しています(右下HC02基板)。
結果の値はX=0ですから赤LEDが点灯しています(右下HC02基板)。
上位桁へのキャリーがあります(C1=1)から、赤LEDが消灯しています(左側HC00基板)。
以下は下位桁からのキャリーC0を1にしたときの計算です。
A=0、B=0を入力しました。
A=0、B=0ですから入力の緑LEDは両方とも点灯しています(左側HC00基板)。
下位桁からのキャリーがあります(C0=1)から、そちらの緑LEDは消灯しています(右下HC02基板)。
結果の値はX=1ですから赤LEDが消灯しています(右下HC02基板)。
上位桁へのキャリーはありません(C1=0)から、赤LEDが点灯しています(左側HC00基板)。
A=0、B=1を入力しました。
A=0、B=1ですからAの緑LEDは点灯していますがBは消灯しています(左側HC00基板)。
下位桁からのキャリーがあります(C0=1)から、そちらの緑LEDは消灯しています(右下HC02基板)。
結果の値はX=0ですから赤LEDが点灯しています(右下HC02基板)。
上位桁へのキャリーがあります(C1=1)から、赤LEDが消灯しています(左側HC00基板)。
A=1、B=0を入力しました。
A=1、B=0ですからAの緑LEDは消灯していますがBは点灯しています(左側HC00基板)。
下位桁からのキャリーがあります(C0=1)から、そちらの緑LEDは消灯しています(右下HC02基板)。
結果の値はX=0ですから赤LEDが点灯しています(右下HC02基板)。
上位桁へのキャリーがあります(C1=1)から、赤LEDが消灯しています(左側HC00基板)。
A=1、B=1を入力しました。
A=1、B=1ですから緑LEDは両方とも消灯しています(左側HC00基板)。
下位桁からのキャリーがあります(C0=1)から、そちらの緑LEDも消灯しています(右下HC02基板)。
結果の値はX=1ですから赤LEDが消灯しています(右下HC02基板)。
上位桁へのキャリーがあります(C1=1)から、赤LEDが消灯しています(左側HC00基板)。
当連載開始当初はずいぶんもたつきましたが、あれこれやっておりますうちに、なんとALUができあがってしまいました。
ええ。
1ビットですけれど、これを8ビットつなげは立派なALU(Arithmetic Logic Unit)です。
近日中にこの部分も基板を作ることにいたしましょう。
トランジスタでCPUをつくろう![第69回]
2015.5.25upload
前へ
次へ
ホームページトップへ戻る