標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第152回]
●誤動作の本当の原因は?
前回、せっかく回路を変更して、74HC05から74HC126に付け替えてみたのですけれど、結果は全く同じ、というところまでお話をしました。
では、誤動作の原因はいったいどこにあったのでしょう?
値をレジスタに書き込むときのレジスタアドレスの選択で、d3〜d0の立ち上がりに問題があるのではないか、と疑ったのですが、原因はそこではなかった。となると?
PUSH、POP命令の実行でエラーが発生しているのですから、スタックポインタのあたりにもあやしいところがあるかも知れません。
ということで、オシロでスタックポインタの近辺をあちこち調べてみました。
すると、や、や、や?何だ?これは???
あやしげなラインを発見しました。
ふつう、+5Vか0Vであるべきなのに、+3Vくらいでなんとなくふらふらしています。
スタックポインタの値をアドレスバスに出力するための、SPsel信号です。
これは、怪しい!
回路図をあらためて確認してみたところ、あれま。プルアップ抵抗がない!
スタックポインタの回路図は[第68回]にあります。
その回路図には、本来必要なプルアップ抵抗がついていないところがあります。
プルアップ抵抗については、読者の方からご指摘をいただきましたので([第33回])、必要な個所には追加するようにしました。
ただ回路図そのものについては、そのご指摘をいただくよりも以前に、ほとんどの部分を描いてしまっていましたので、回路変更や回路訂正などの作業を全体を通してすすめていく過程で順次必要なプルアップ抵抗を描き加えるようにしました。
そのため、その後にお見せしている回路図でも、まだ図面の訂正作業が済んでなくて、必要なプルアップ抵抗がついていないものがあります。
今回の試作基板の作成にあたっては、当然訂正後の回路図をもとにして、配線作業をしたのですけれど…。
うっかり気がつかなくて、プルアップ抵抗をつけ忘れたままでした。
訂正後のスタックポインタの回路図です。
SPselラインの、赤で示した抵抗が落ちていたのが、今回の誤動作の原因でした。
HC(ハイスピードCMOS)は非常に軽いので、ダイオードのリーク電流でも軽々と動作してしまいます。
PUSH、POPについては、この前の試作基板でも動作テストはしたのですが、そのときには通常クロックでのテストではなくて、ステップ動作をさせての確認のみでしたので、エラーにはなりませんでした。
今回でも、必ず誤動作する、というのではなくて、見ていると、たまにポロリとレジスタの値が変わってしまうという、実にいやな誤動作となって現れました。
プルアップ抵抗を追加したところ、エラーは発生しなくなりました。
たかが、抵抗。されど、抵抗です(うーん、疲れた…)。
●74HC126は、どうする?
今回の誤動作の原因は、プルアップ抵抗の付け忘れというお粗末な結末で。これにて一件落着。
なのですけれど、さて、ことの成り行きで改良してしまったd3〜の74HC126については、どうしましょう?
せっかく改良したことですから、この際、他の命令についても、同様の部分については74HC05を74HC126に置き換えてしまったら、どうだろうか?
ということで、またまた、余計な作業に着手したのですが…。
まるっと1日を費やして検討した結果、ですね。出てきた結論は…。
だめだわ、こりゃ。
一部の命令について、変更するだけでも、こんな感じになってしまいます。
いくらがんばったって、こんな変更は無理、絶対に出来っこありません。
もう配線を追加するスペースはいくらも残っていませんし、基板サイズも限界です。
どうしても、っていうことになると、線幅と線間を縮めるしかありません。
この基板サイズで、それは余りに無謀。
現行の配線だって、いい加減、恐いなぁ、と思いながらやったのに、これ以上は、とても恐くてやれません。
そもそもは、信号の遅れ対策として、WRパルスを半クロック遅らせて、さらにCPUクロックも4MHzから2MHzに落としたのですから、なんとかそれで妥協してしまいましょうよ。
なにごとも、余りに完璧を求めてはいけません。それが、オトナというものです。
ということで、せっかく追加した74HC126ですが、取り外して、またもとの74HC05に戻してしまいました。
でも、念のため、74HC05でも大丈夫、という確認だけは、しておきましょう。
POP命令のd3〜d1出力回路を、もとの74HC05に戻したあとの波形です。
上(CH1)はM2クロックで下(CH2)が74HC05のd1出力信号です。
やっぱり立ち下りに比べると、立ち上がりはかなり、なまっていますねぇ。
今度はregWR信号と比較してみました。
上(CH1)はregWR信号です。下(CH2)はさきほどと同じ、d1信号です。
確かにd1の立上がりは、なまっていますけれど、そのスレッショルドレベル(1/2Vcc)からregWRの下がりエッジまでは、なんとか100ns以上はありそうです。
これなら、まあまあ大丈夫、なのではありませんか、ねえ。
2009.2.3upload
前へ
次へ
ホームページトップへ戻る