トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第91回]
●CPUのレジスタ(10)
せっかく考え出したコンデンサ蓄電型レジスタ回路なのですが、前回書きましたようにデータを保持するためには入力回路とコンデンサ回路を切り離さなければならないのですが、すると結果としてコンデンサ回路がハイインピーダンスになってしまうため、データバスの信号の影響をもろに受けてしまい、容量の大きいコンデンサ、たとえば0.1μFセラミックコンデンサなどでもじきに放電してしまいます。
またしても知恵をしぼってなんとかコンデンサが放電してしまわないような工夫を考え出さねばなりません。
難行苦行であります。
おお、そうだ。
またひとつアイデアがひらめきました。
コンデンサが放電してしまうならば、それよりも速く再充電してやればよいではないか、という考えです。
こんな回路になりました。
これはポジティブフィードバックです。
トランジスタの数は増えてしまいますが、これならコンデンサが放電するよりも速く再充電できます。
われながらうまいことを考え付いたものだとちょいと悦にいっておりました。
今度こそ大丈夫だろう。
それはともかくデータ表示用のLEDはロジックが逆であることに気が付きました。
WR_などの信号は負論理で扱いますから、Lのときに点灯するほうがわかりやすいのですが、レジスタの値などの場合には、やっぱり値が1のときに点灯するほうがよいと思います。
この回路では値が0のときに点灯しますから、ここは表示のためにもう一段トランジスタを入れて表示を反転させければなりません。
さらにトランジスタが増えてしまいます。
LEDの表示については後に対応することとして、とにかくこの回路を試したところ、スタティックな環境では値をしっかり保持してくれました。
おお。おお。
よいではないか。
ところが。
今度こそ大丈夫だろうということで、ND80Z3.5のバス回路につないでみましたら。
やっぱり駄目でした。
なぜだ?
もう、絶望的気分であります。
しかし、あきらめてはならぬ。
人事を尽くして天命を待つ。
なんとも悲壮な覚悟といいますか、やぶれかぶれであります。
やっきになってあれこれ試していくうちにいくつかわかってきたことがあります。
フィードバック回路の2SA1015をONさせるためにLED表示用の2N7000の出力を利用していますが、ここがオープンドレインになっているために、データが0(コンデンサは+に充電)のときに、新たにデータ1を書き込んでもフィードバック回路の2SA1015はすぐにOFFにならなくて、コンデンサの充電を続けてしまうことがわかりました。
またスリーステートバッファ回路がOFFで出力がハイインピーダンスのときには、MOSトランジスタがコンデンサになってしまい、ドレインゲート間にバス回路の信号が筒抜けになって、レジスタの値を保持しているコンデンサを簡単に充放電してしまうこともわかりました。
この回路を思いついた時点では、コンデンサは時間とともに放電するものと思っていたのですが、バスからのノイズによって、逆に充電されてしまう場合もあることもわかってきました。
コンデンサ蓄電型レジスタ回路を思いついた当初はこれほど問題がたくさん出てくるとは思ってもみませんでした。
これは。
やっぱり無理だったか…。
むむ。
見通しが甘かった。
しかし。
もうホームページに書いてしまったではないか。
いまさら、できませんでした、つうのも恥。
うむむ。
恥はかきたくない。
みっともないかぎりである。
ということになると、これはやっぱり、なんとかするしかないではないか。
かくして。
なんとかするための試行錯誤に没頭することとなったのでありました。
悪戦苦闘であります。
はたして悪夢の霧は晴れるのでありましょうや。
しかし。
何回も書いておりますが、もうだめだ、とさじを投げてしまうところを、そこでもう一回、あきらめないで再度食い下がって考えておりますと、突然霧が晴れる瞬間が訪れます。
何事もあきらめてはいけません。
根性であります。
今回も、ようやく、やっとのことで霧が晴れる瞬間が訪れました。
(よかった!恥をかかずに済んだ)
次回、コンデンサ蓄電型レジスタ回路の完結編です。
必見でありますよ。
トランジスタでCPUをつくろう![第91回]
2015.7.2upload
前へ
次へ
ホームページトップへ戻る