トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第84回]
●CPUのレジスタ(4)
前回はCPUのレジスタについて、トランジスタ数を削減する工夫をし、とりあえず1ビット分の回路を考えました。
さらに、いずれつくることになるはずのトランジスタ版MYCPU80ではBS250の代わりに2SA1015を使うことになると思いますから、BS250を2SA1015に置き換えた回路図を作成しました(下図)。
しかし回路図を描いただけでは、ただの絵に過ぎません。
実際に組んでみて、期待通りに動作するかどうか試してみなけれはいけません。
ということで、実際に組んで試してみました。
ところが。
部分的に組んで試してみたときにはよかったのですが、全体を回路図通りに組んで試してみたところ、余りクロックを上げられないことがわかりました。
2SC1815の回路はやはり無理が有るようです。
なんとか2MHzまではいくのですが、4MHzではだめでした。
74HC版MYCPU80はクロック2MHzですから、トランジスタ版MYCPU80でも2MHzで動けばよいではないか、と言えないこともないのですが、たったこれだけの部分的な回路で2MHzが限界ということになりましたら、このまま全体を組み上げたら、とてもとても2MHzでは動いてくれませんでしょう。
これじゃあやっぱり駄目です。
もう一度考え直しです。
あらためて回路図をよく見てみたら、こんなことをしなくてももっと普通の方法でいけることに気が付きました。
そもそもこの回路のキモは。
D=1をセットするときはWR_をインバータを通して反転したあと、NANDゲートに通してRSフリップフロップをセットする信号をつくります。
そのセット信号よりも前に一旦リセットする、というアイデアでした。
できるじゃありませんか。
わざわざC1815を使ったワンショットまがいの回路などを付加しなくても、そのままで。
こうすればよかったのでした。
データセット用の信号はデータをWR_パルスでゲートして作りますが、上で説明しましたようにゲートを2段通しますから、もとのWR_信号よりもゲート2段分だけ遅れます。
そこで上の回路図のようにWR_をそのままRSフリップフロップのリセット信号にしてしまえば、セット信号(B)はリセット信号(A)よりも2ゲート分だけ遅れて入りますから、確実にセットできます(D=1の場合)。
ただそのようにするとWR_信号が8ビット全部のRSフリップフロップの入力としてそのまま使われ、しかも(74HC版)MYCPU80では8ビットのレジスタを18個も使いますから、ここは下のようにバッファ付きにしなければなりませんでしょう。
それだけトランジスタ数が増えてしまいますが、ここはやむをえません。
これならば今度こそ大丈夫ということで、この回路でもう一度試してみました。
スリーステート出力部分は後回しです。
とりあえずはそれよりも前の部分について試してみました。
D=1の入力段は普通のNANDゲートにして、それとRSフリップフロップはHC00−A1015を使いました。
2SA1015を使ったインバータは用意していませんので代わりにHC10−A1015を使いました。
そのようにして試してみたのですが。
やっぱり2MHzが限界でした。
ゲートの出力がなまってしまって、4MHzだとパルスがつぶれてしまいます。
おかしいじゃありませんか。
[第21回]ではBS250の代わりに2SA1015を使って立ち上がり波形を観測していますが、十分に速い立ち上がり波形になっています。
これは一体全体どうしたことなのでしょう?
説明の途中ですが本日は時間がなくなってしまいました。
この続きは次回にすることにいたします。
トランジスタでCPUをつくろう![第84回]
2015.6.20upload
前へ
次へ
ホームページトップへ戻る