始める電子回路 | CPUを作る | 回路がわかる本 | 始める電子工作 |
動かないチェックまだ、CPUを創る道は完成にはなりませんでした。再びここで動作チェックすることになるとは(涙) 祝杯のラーメンが硬すぎたのが想い出しても悲しい・・・ 簡単なプログラムで症状をテストしてみると、、、、いちばんややこしい部類のものです。 正常動作するときと、しないときがある・・・クロックの10倍速とでも動作に違いが出る。 何が原因なんだろう。ここは各信号を見てみることに。 制作途中に作ろうと持っていたのですが、一気に作ってしまったので飛ばした治具作りです。 こんなLEDの8列を作りました。 これで、各信号がHighならLEDが光ってわかるというだけのもの。 これは1つあると、これからちょっとした入力、出力のH,L検査に非常に役立ちます。今回ちゃんとしたものをつくりました。 これで信号を確認することに。 プログラムは 即値 → レジスタA → レジスタB → レジスタBを出力レジスタLEDへ出す。 MOV A 0011 0011をregAへ入れる MOV B,A regAの内容を Bへ OUT B Bの内容を 出力ポート(LED)へ レジスタ転送をする基本的なプログラムです。 これで各レジスタのデータの転送を追っていきます。 まず、命令デコーダの信号をみると不具合はなし。 次に出力結果をみると 0011とLEDが光るはずが 0111 となる場合がある。その率 半分。 次はレジスタAの 信号の入出力を見ました。 しかしこれがまたややこしい、、、信号を取るようにピンを接続すると。。。不具合は起こらない。。 つまり、再現できない。 これはどうやって検査するか。。。ここからが力の試されどこです(腕がなるぜ・・ ここまで来たら楽しんでチェックもやるしかない^^) レジスタBの信号を取ると誤動作している。 regA で変なデータ → regB と伝わっているのかな。 それともBで変なデータが生まれているのか。。 いくつかやってみましたが、これは多分 ROMをマイコンにしたことでのクロックタイミングの問題ではないかと思います。 このCPUを作っていくうちに、内部の動作に深入りして動作原理がわかりましが、一つ、引っかかったのが各ブロックのクロックタイミングの問題。これは面倒なので深入りしなかったけど、結局、最後に考えさせられることになった。 どのクロックタイミングでどんな動作をするのか。各命令は何クロック(何サイクル)か、などについて。 これが原因でなかったとしても、調べることになる宿題のようです。ついでにCPUのクロックタイミングについて勉強するつもりで考えましょう。 クロックを合図にプログラム行の読み込み命令が来て、ROMが行読み出し。 その行データを転送しCPUが行動しますが、ROMの読み出しタイミングと CPUの実行時間にズレがあると正常には進まない。 これも原因の1つに考えられます。この見当で進めてみることにします。 さすがに完成したと思ってまたトラブルというのは疲れる。 しかし、せっせと積み上げるように作ってきて、最後に動かないまま原因不明は、キジも犬も猿もそろえて最後の鬼退治で桃太郎が鬼に食べられるようなラストで後味が悪い。。。 クロック検査とりあえず動くということで作ってきましたが、うすうす思っていたことがあります。最初のクロックが来てから、ROMのeeprom読み出しが間に合わないかも。 もはや、これはマイコンROMとCPUの同期についてなので、LEDの確認ではどうしようもない。。 こういうのは始める電子回路では反則技のように思いますが、飛び道具を出してきます(もはや何でも使うのじゃ) ロジアナ(ロジックアナライザ)でクロックを見てみました。 うすうす思っていたように、完全にプログラムデータの読み出しが遅れていました。 スイッチを入れてから、最初のプログラムアドレスを読み出すまでに4,5クロックあります。 ものすごい遅延。。。EEPROM読み出しのウエイト時間がかなり効いていたようです。 また他にも途中の伝達でもどっかでデータがずれそうに思います。 近代的TD4ROMのAVRのプログラムから見直しになりました。。 とりあえず作って、安定性を欠いていたところを見直して仕上げです。最後に仕上げの予定でしたが不具合対策になりました。 でも、なんだかよりCPUの内部にはいっていくようでおもしろくなりそうです。 ここからはまたぼちぼちと進めたいと思います。 |
始める電子回路 | CPUを作る | 回路がわかる本 | 始める電子工作 |
メインページへ |