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

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


[第372回]



●PC回路のカウントアップの仕組み

試作基板が出来てくるのを待つ間を利用してPC(プログラムカウンタ)回路の説明を続けることにします。
何回も書いておりますようにPC回路はもう何回も試作を繰り返しています。
試作したものの思い違いなどがあって誤動作してしまい、しかもその原因がしっかりつかめず暗中模索することになってしまいます。
そんななかでも試行錯誤しながら試作を重ねることで当初は見えていなかった問題点が徐々に明らかになってきました。
わかってきた問題点は大きく2つありました。
1つはカウントアップのタイミングについての思い違い(というか思慮不足)で、もうひとつはJMP命令のときのジャンプ先アドレスの書き込みについてのこれまた思慮不足だった点です。
ジャンプ先アドレスの書き込みはちょっと考え方に複雑なところがあって説明をするのも簡単ではありません。
ですのでまずはカウントアップについて説明をすることにします。
PCがカウントアップする仕組みについては[第370回]で簡単に説明をしました。
その仕組みを一口で言うと、一段下のクロックの立ち上がり時に現在のQ_をカウンタの前段にラッチし、クロックの立ち下り時にその値をカウンタの後段にラッチするとともに新しいQとして出力する、ということです。
ここの部分を当初は簡単に考えていました。
本来は「立ち上がりのエッジ」、「立ち下りのエッジ」でラッチすべきなのですが、トランジスタ回路でエッジでのラッチをどのように回路化するかがかなり難しく、ならばエッジでなくてもよいだろうと簡単に考えて、[第166回]に書きましたように下位のビットがHの区間、Lの区間にそれぞれの動作をするように考えました。
当初は簡単な試作回路を作って動作確認をしてうまく動作しているようでしたので、4ビット分の本格的なPC回路を試作したところ、誤動作が止まりません。
そこにはとんでもない思慮不足がありました。
ちょっと考えると下位のビットがHの区間、Lの区間にラッチ動作をしてもよいように思えたのですが、問題はその間の時間の長さにありました。
MYCPU4TRの場合通常動作のクロックは約500KHzですからシステムクロックがHの区間、Lの区間はそれぞれ約1μsです。
するとその上位のアドレスA0は2μs、A1は4μs、A2は8μsの期間ずっとラッチ動作がアクティブのまま続くことになります。
これがスローモードになるとシステムクロックのH、Lの期間はなんと0.5秒にもなってしまいます。
アドレスA2ではそれは4秒にもなってしまいます。
この間ずっとラッチ入力がアクティブのまま、というのは非常識の極みでありました。
その期間にノイズなどが入るとフリップフロップが簡単に反転してしまいます。
するとやっぱり基本に立ち返って、立ち上がりパルス、立ち下りパルスのエッジのときのみラッチ動作がアクティブになるような回路を工夫しなければならない、という結論になってしまいます。
これがなかなかに難題でありました。

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

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