トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第201回]
●OPコードフェッチ回路(2)
前回書きましたようにトランジスタが逆接続になることは避けなければならないようです。
そこまではっきりわかっていたわけではありませんが、やっぱり逆接続はまずいのではあるまいかと考えて、OPコードフェッチ回路基板は最終的に下のようにWRG回路を一部変更して製作しました。
当初はT11、T12の出力を直接WRGとして取り出していたのですがそこのところを変更して2SC1815を追加してWRGをオープンコレクタ出力にしました。
WRVはもとからオープンコレクタ出力です。
これなら大丈夫だろうということで試作基板を作ってしまいました。
ところが基板が出来てくるよりも前に、この回路ではまだ駄目らしいということに気が付いてしまいました。
上の回路にはとんでもない落とし穴がありました。
WRGがOFFのときにT2のエミッタに+5Vが印加されて逆接続になってしまうのを避けるためにWRGのラインをオープンコレクタ出力にしたのですが…。
そのことが原因で、結果的にやっぱり逆接続状態になってしまうことに気が付きました。
上の回路図はOPコードフェッチ回路の一部分です。
OPコードフェッチ回路は8ビットで構成されています。
上の図の上側のデータラッチ回路は8組あるうちの1組を示しています。
この回路と同じ回路が8組あって、WRVとWRGは8組の回路全てと共通に下側の図のWRV、WRGにつながっています。
そこのところに伏兵が潜んでいました。
下図は8組のうちの2組、D0とD1だけを取り出して示した図です。
問題を理解し易くするために、説明に必要な部分以外は省略しています。
WRGがOFFのとき、そのラインはハイインピーダンスになります(なるはずだったのですが)。
ところがたとえばD1がHでそのときB点の電位もHだったとします。
その仮定はおかしいじゃないかと思われるかもしれません。
こういうことです。
D1がLのときにWRG、WRVがアクティブであるとB点はHになります。
図では省略してありますが、B点はその後段のフリップフロップによってHに固定されます。
その後にWRG、WRVがオフラインになって、それからD1がHに変わるとその状態が出現します。
このときもしもWRGのラインがLになったとすると、右側のT2はONになります。
WRGはオフラインのはずなのにそんなことが有りうるでしょうか?
そんなことがあったのです。
まさかそんなことがあるなんて思ってもみませんでした。
考えが浅かったのでした。
左側の回路でD0がH、A点がLの場合、左側のT2は逆接続状態になります(T2のエミッタのラインがハイインピーダンスかまたは+電位のとき)。
T2はONになってエミッタからコレクタに逆電流が流れます(エミッタが+電位ならば)。
その結果WRGはハイインピーダンスではなくなってLレベルに近い電位になります。
すると右側のT2もONになって図の矢印の向きに電流が流れます。
この結果A点の電位は上昇し、逆にB点の電位は低下します。
まさか。
でありました。
論より証拠。
OPコードフェッチ回路の試作基板を使って上の図の状態にしてA点の波形を観測しました。
下側(CH2)がA点の波形です。
上側(CH1)がHの期間はWRGがアクティブのときです。
WRGがOFFの期間にA点は気持ち悪い形に浮き上がっています。
高いところでは2Vぐらいありそうです。
実はこの波形はもっと以前に、INC/DEC REGISTER回路の試作基板の動作テスト中に見ています。
そのときはまさか上に書いたことが原因だなどとは思ってもみなかったので、なぜこんな波形が出てくるのか皆目見当がつかず、一体どこからこんな漏れ電流が出てくるのだろうといぶかしく思っていました。
その時点では、なんだかわからないがどこか回路におかしいところがある(ノイズか?誤配線か?)、ということでそこから先へは進めませんでした。
さて、上の回路に戻って、そういうことになると、結局のところこの問題の対策としてはトランジスタのエミッタにダイオードを追加するしかありません。
ということで、ここは最終的に下の回路になりました。
T1とT2のエミッタに図の向きにダイオードを追加しました。
ここにダイオードを追加するならWRGもWRVもオープンコレクタにする必要はありませんから普通の出力回路に戻しました。
回路の配線をそのままにしておいて手っ取り早くダイオードを追加するためにこんな加工をしました。
エミッタのリードを短く切ってそこにダイオードを取り付けています。
この作業は以前にどこかでやって、その写真もお見せしたようですがどこだったか思い出せません。
簡単に細工ができるのでときどきやっています。
ダイオードを追加したあとのA点(T1、T2のコレクタ)の波形をあらためて観測してみました。
浮き上がりが低くなりました。
そして気持ちの悪い波形ではなくなりました。
浮き上がりは大体1V程度に見えます。
低くはなったものの、まだ浮き上がっているのは、前回書きましたR14が10KΩでその値がちょっと大きすぎるためだと思います。
そこでR14の値を4.7KΩに変更してみました。
やっぱり考えた通りでした。
これなら安心できるレベルでしょう。
OPコードフェッチ回路は以上の点を変更して、もう一度試作基板を作り直すことにしました。
ともあれ。
やっと。
これにて一件落着です。
トランジスタでCPUをつくろう![第201回]
2020.3.11upload
前へ
次へ
ホームページトップへ戻る