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

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


[第387回]



●MMUが働きません(2)

また間が空いてしまいました。
納期が迫ったご注文のための作業で大忙しだったのです。
やっと納品が完了してほっと一息ついたところです。

前回までのところでPC(プログラムカウンタ)へのデータ書込の仕組についてざっと説明をしました。
それは[第384回]で書きましたMMU回路が働かないことの原因とその対策について書くための準備でもありました。
今回は[第384回]の続きになります。

何が起きているかわからないときには「カメレオンロジアナ」の出番です。
現象が確認できました。

PROBE00はMCLKです。
PROBE01〜PROBE04はA0〜A3です。
アドレスFでMMU回路によって強制的に出力されたJMP 0コードを実行しているのですが実行直後に一旦A1=0になってそのすぐ後にそれが反転してA1=1になってしまっています。
このときは現象を確認し易いようにというつもりでロジアナのサンプリング周波数を10MHzにして観測しました。
なぜこのような不可解なことがおこるのか当初は全くわからなかったのでさらに進んで各信号を繰り返し観測してみました。
それでわかったことはアドレスFのときにMMU回路から強制的に出力されるJMP命令コードによってアクティブになるPCWR_信号が早く終了してしまうということでした。
そのために禁止されていたCKdnH、CKdnL信号がアクティブになってしまい出力が反転してしまったのでした。
そこのところを観測したときのロジアナのデータを確認したのですが残念ながら残っていませんでした。
あらためて確認しようとしたのですが、この現象のための対策をとってしまったため、もう再現できないことに気が付きました。
仕方がありませんから文章のみで説明します。
PCWR_信号はメモリからJMP命令コードが出力されている間ずっとアクティブになっています。
メモリから出力されるデータは一定時間遅延するためPCWR_はアドレスが変わったあともしばらくはアクティブでありつづけます。
それを利用してCKdn信号を禁止していることは前回説明しました。
ところがMMU回路から強制的に出力されるJMP命令コードはアドレスが変わるとすぐに出力されなくなってしまいます。
メモリからではなくてHCMOSIC回路からの出力なので出力遅延時間がわずかしかないためです。
そこまでわかりましたからCLOCK/MEM回路を下のように変更しました。

アドレスがFのときにJMP命令コードを強制的に出力するのはIC3−2の74HC157です。
そのpin1にRSフリップフロップを入れてJMP命令コードの出力を半クロック延長するようにしました。
RSFFに入れているCLK_はCLOCK回路(下図)のIC1(74HC04)のpin8の出力です。


そのようにしたところMMUが正しく働くようになりました。
下はそのように回路を変更したあとのロジアナ波形です。

PROBE00はMCLK、PROBE01はCLK_、PROBE02〜PROBE05はA0〜A3、PROBE06はPCWR_です。
PCWR_出力は半CLK(約400ns)延長されています。

ところで上記のように回路を変更したCLOCK/MEM基板はHCMOSIC版MYCPU4の回路基板をそのまま流用したものです。
HCMOSIC版MYCPU4では回路変更をしなくてもMMUが正しく機能します。
HCMOSIC版MYCPU4は全ての回路がHCMOSICで構成されているので応答速度が速く、PCWR_を遅延させなくても正常動作します。
トランジスタ回路はHCMOSICに比べると応答速度が遅いため、上記の対策が必要になったのでした。

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

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