トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第403回]
●JNC命令が正しく実行されません
SW/CLOCK/MEM基板もできましたので念のため最後の動作テストに取りかかりました。
そうしましたところ、なんとまさかのエラーです。
いや、そんなはずは…。
JNC命令が正しく実行されません。
いえ、それ以前にキャリーフラグ自体が正しくON/OFFされません。
んな、ばかな。
何回やっても同じです。
CPUクロックを1MHzにしてもやっぱり異常です。
まさか、新しく作ったSW/CLOCK/MEM基板のどこかにミスが…。
慌てて試作品の旧基板に交換してもやっぱりCFが誤設定されてしまいます。
確か先日までは正常に動作していたはず。
で。
あれこれ回路を変更する前のMYCPU4本来のCLOCK/MEMボードに取り替えてテストをしてみたところ、何事もなく正常に動作します。
どうやらMYCPU4TRのためにあれこれ変更したCLOCK/MEM回路のどこかに不具合の原因があるようです。
ロジアナで確認したところ、一旦セットされたCFが命令実行サイクルの最後のMCLKが立ち下がるところでクリアされてしまいます。
そのときのロジアナの波形を記録しておけばよかったのですが、つい記録をするのを忘れてしまいました。
今は対策をしてしまった後ですので再現できません。
とにかく。
そういうことになりますと。
あれか。
ひとつ思い当たることがありました。
今度はオシロスコープで確認をしてみました。
上側(CH1)はMCLKです。
下側(CH2)はALUWR信号です。
この信号はALU回路から出力されるデータをラッチするための信号ですが、同時にCFとZFをラッチするための信号でもあります。
MCLKの立ち下がりのところにヒゲがあります。
やっぱりそういうことだったのでした。
時間軸を拡大しました。
ヒゲは10nsぐらいです。
ほんの一瞬なのですがCFのラッチ回路はこの10nsでも動作してしまうようです。
今回は困ったことではありますが、逆に言えばMYCPU4TRのトランジスタ回路がいかに高速であるかの証明でもあります。
このヒゲの原因ですが。
下はCLOCK/MEM回路の一部です。
CLOCK/MEM回路の回路図は[第400回]でお見せしました。
そこではWR1とWR2の信号回路を変更しました。
ALU回路が4MHzでも正しく動作するように信号のタイミングを半クロック後ろにずらしたのでした。
そのことが今回の新たな問題の原因になってしまいました。
WR1(ALUWR)はMCLKとCLK_とのANDから作っています。
ところが74HC74からの出力がわずかに遅れるために図のタイムチャートのようにMCLKの立ち下がりのところにヒゲができてしまいます。
これには気が付きませんでした。
さてヒゲの正体がわかったところで、それではどうやってこのヒゲをつぶすかという対策についてです。
正攻法で考えるとその対策はなかなかに難しいものになります。
まあ、あまりまっとうな方法ではありませんけれど、ここはやっぱり、あれです。
コンデンサでつぶしてしまうのが簡便でありましょう。
74HC08の出力部に270pFのセラミックコンデンサを取り付けました。
270pFを追加したあとのオシロスコープの画像です。
コンデンサをつけたために本来のALUWR信号もシャープな立ち上がり、立ち下がりではなくなってしまいましたが、この程度のことは回路の動作には影響ありません。
SW/CLOCK/MEM基板の裏側に270pFセラミックコンデンサを追加しました。
今回の問題は基板ができてきてからわかったことですのでこうするしかありません。
その部分の拡大写真です。
IC2(74HC08)のpin8とGND(pin7)に270pFのセラミックコンデンサを取り付けました。
このようにしたところJNC命令もJNZ命令も問題なく実行されるようになりました。
トランジスタでCPUをつくろう![第403回]
2021.9.16upload
前へ
次へ
ホームページトップへ戻る