2021.9.11
前へ
次へ
ホームページトップへ戻る

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第400回]



●4MHzでADD、SUBが正しく実行されません(3)

前回からの続きです。
前回の検証によってCPUクロックが4MHzではADD命令、SUB命令が正しく実行できないことがはっきりしました。
残念ではありますが4MHzは諦めるしかありません。

うーん。
実に残念であります。
そこのところだけなんですよねえ。
せっかくここまでやってきたというのに、ALU回路のところがトータルでわずか50nsほど実行時間が余計にかかるというだけで4MHzを諦めなければなりません。
アクセスタイムの速いRAMを使えばぎりぎりなんとかなるかも知れません。
しかしそれは選択したくはありません。
私の感覚ではRAMのアクセスタイムが120nsだって十分に速いという認識です。
なにかほかになんとかする方法はないものか。

あらためてADD命令のタイムチャートを描きながら考えていましたら。
おお!
ひょとしたら。
いけるかも!

これはMYCPUTRのADD命令のタイムチャートです。

CPUクロック4MHzではALU回路からのデータが確定するよりも前にALUwr信号がHからLになってしまうために正しいデータがラッチされません。
ところでMYCPUTRの命令動作はMCLKの立ち下がりから次の立ち下がりまでの2CPUクロックで完了します。
上のタイムチャートではregWRの後ろにまだCPUクロックの半クロック分の余裕があります。
ここが使えるのでは?
当初このような信号タイミングにしたのは命令動作の真ん中のあたりがより安全だろうという漠然とした考えからで、確実な根拠があってのことではありませんでした。
考えてみれば後方にずらしたほうがより安全だともいえます。

そこで下のようにALUwrとregWRを半クロック後ろにずらすことを考えました。

これなら4MHzでもいけそうです。

幸いトランジスタ回路をさわることなく、CLOCK/MEMボードの回路の一部を下のように変更するだけで済みました。

WR1とWR2の回路のみ一部変更しました。

下は変更前の回路の該当部分です。

変更前はIC2のpin13にはIC3のpin6の出力(MCLK_)が入っていましたが、そこをIC3のpin5の出力(MCLK)につなぐように変更しました。
それとともに変更前と変更後とでWR1とWR2のラインを入れ替えました。
そのように回路を変更したあと、再度動作テストをしてみたところ4MHzでADD命令もSUB命令も正しく計算されるようになりました!
これにて一件落着です。
今度こそ本当に、金麦で乾杯!です。

このときは、そう思ったのでしたが。
実はまだ乾杯するのは早すぎました。
しかし、それはまだもう少しあとになってからわかったことです。

とりあえず。
ここまでのところは、めでたしめでたし、です。

トランジスタでCPUをつくろう![第400回]
2021.9.11upload

前へ
次へ
ホームページトップへ戻る