始める電子回路 CPUを作る 回路がわかる本 始める電子工作 

動いた!


        

原因

誤動作するときがあるという原因ですが、まず原因がわかりました。
でもそれ以外に、クロックを調べたので不可解なところもでてきた。

正常に動かないときもあるという誤動作は、ICクリップ挟むと誤動作しない、という症状なので多分こういうのも原因だろうと思っていたのですが接触不良です。
基板を少し曲げたりすると導通がでない、配線のハンダ付けですね。

最後の方で、CPU部分を仕上げてしまおう配線スパゲティと格闘してたのでハンダ付けが丁寧でないるところがありました。この不良ハンダ付けも最後の方の作業。
あまり根を詰めてやらない方がよさそうです。もう仕上げの最後の方はなにやってるかわからず意識がモウロウとして美少女の幻覚が見えそうでした^^;

細かく見ると、プログラムを何周も繰り返し自動でグルグル実行していると、
1周目に不導通なのが2周目で勝手に導通して信号にHighがでてたり、、、結果、うち1bit変わって違うデータになってる(^^; 
この中途半端な導通を意図的にコントロールできればSWがもう1つ増えてCPUも機能が増えるのかもしれませんが・・

動かないなら、完全な不導通だとわかりやすいけど、たまに不通で、正常動作しないこともある、という不良が一番手間暇かけさせられますね。
導通検査ではOKでも配線や基板にに負担かけると×になるハンダ付けもでてきたりします。

しかし、そこに行く前に、クロックの問題も見当を付けて調べて、他の所にも疑問がでました。

CPUのクロック


CPUにはクロックが必要ですが、これは人の心臓の鼓動のようなもの。誤動作からついでにこの問題も考えてしまうとこになりました。

●CPUのクロック

CPUクロックといえばDos/V派にはおなじみのクロックアップ
CPUの動作クロックを仕様より自分で勝手に上げてより高速に使おうとする改造設定です。
たとえば800MhzのCPUをクロックアップして1Gで使うような方法。

このTD4でもクロックアップの改良も載っています(^^;
かつてCeleronでは、クロックアップの耐性が極端に強いチップがある、といわれmade in ××のチップがクロックアップに強いと噂され、クロックアップ派に使われるようなことがありました。当然、改造なので壊れても動かなくてもしょうがない自己責任です。
(そんな手間暇かけてくじ引きのようなことをするより、最初から800Mhz→1G なら 1GのCPU買った方がいいとおもうんですが、DOS/V派の楽しみの1つなんでしょう)

CPUのクロックの役割についてですが、TD4を作ると自然に意識するようになる。
TD4だと各命令は1クロックまたは2クロックで実行されます(命令によって違うだろうけど、詳しくしらべてない)

たとえば転送でLEDを光らす命令。

    MOV A 0011  0011をregAへ入れる
    MOV B,A     regAの内容を Bへ
    OUT B        Bの内容を 出力ポート(LED)へ

各命令が1クロックで動作だとすると 3命令で 3クロック分の時間で完了することに。
TD4は1クロックが 10Hz=0.1秒 と 1Hz=1秒 の切り替えなので高速側で動作しても
3クロック分 で 0.3秒かかる。

もしクロックが1GHzだと、 1Gは えーと、キロ=1000、メガ=0が6個、ギガ=0が9個
なので 1GHzだと1クロックが 1/1000,000,000 秒 で これが3クロック分 1/1000,000,000 ×3でこの命令が動作する。。
という途方もない高速で動作します。1GのCPUは今や標準的PCですが、恐ろしい速度で動いています。

パソコンはこんな高速で動作して、どっかの伝達でHigh信号がへたったり信号が反射して伝わらないこともなく、信号がちゃんと高速で毎クロックごとに今使っているPCで回っているというのは常識の速度から見ると恐るべきことと言うより他ないですね。

●プログラムカウンターの起動

ここから以下はCPUの内部の問題になるかと思います。問題が起こったり関係無い人はあまり気にしないでいいと思います。

マイコンで代用したROMですが、なんとなく作るとき思っていたのは同期の問題。
これ問題にならないだろうかとうすうすと心配していましたが、出来てから考えようと作り進めたところ。

ROMブロックの役割 のところで出てきたいわゆる命令フェッチです。
CPUがアドレスバスで信号をマイコンROMへ送り、マイコンROMがデータバスで信号が返る同期の問題です。
それは電源立ち上がり時に同期が出来ないかもしれないという漠然とした疑問。論理的に考えたことはなかったけど。

CPUがアドレスバスで信号をマイコンROMへだす、起動時の立ち上がりのピン足が空白の時間に信号が来たり、または遅れると問題が出るというところです。(それも最初からちゃんと初期処理や検討しておけばけばいいんですが。。)

さてそんな見当をつけてクロックと各信号をとってみると妙なことにきづきました。

起動のクロックを調べてみると
  こんな波形

上から
1. 電源
2. クロック
3. アドレスバス0
4. アドレスバス1


クロックが立ち上がって5、6クロックたってから
プログラムカウンタが初めてアップし
CPUはマイコンROMからデータを受け取っています。


5,6クロックというのはマイコン側のクロックではなくTD4の高速側のクロックの方、つまり0.1秒/clockです。
いくらマイコンの起動に時間がかかっても、普通の処理でMhz(メガヘルツ)単位のAVRマイコンが起動に0.5秒程度もかかるとは考えにくいです。
マイコンROMは立ち上がり時に変にSWのバウンド信号などが入って、妙にぐるぐる回ってるのでないかとプログラムも考えてみましたが。。
(このへんはマイコンや測定器のややこしい話になるので詳しくは省略)

2つの違うクロックに切り替え、TD4の1クロックが 10Hz=0.1秒 と 1Hz=1秒 でクロックを見ると
 1Hz では 2クロック目に
 10Hzで 5,6クロック目に
プログラムカウンタがアップしています。

なぜか10Hzで動作させると プログラムカウンタがアップするまで5,6クロックかかっている。
 10Hzで動作させるとプログラムカウンタは1Hzにくらべ5クロック余分に入らないと起動しない??

クロックの立ち上がりで動作が決まるはずのプログラムカウンタが、そのクロック速度によって動作が違うというのがなんとも不思議でした。
 超高速クロックならばともかく  TD4は0.1秒のクロック
すでに見た、1GHzだと1クロックが 1/1000,000,000 秒 に較べると、ジェット機と徒歩ぐらいの差です。こんな遅いクロックで。。
マイコンROMとの関係の問題かとも思い、マイコンROMを外してCPU単独で見てみましたがログラムカウンタ起動までのクロックは同じです。

そしてこれは、クロック数ではなくて、起動時間だと思い当たりました。
つまり プログラムカウンタは5,6クロック取り込んでアップするのではくて、起動までに0.5、秒ぐらい(5,6クロック分)かかる、1Hzでも0.5秒ぐらい起動にかかっていると考えるとつじつまが合う。

クロック発生と回路が別なので、クロック発生はCPUのIC群より起動が速いみたいです。IC起動電圧に達するまでに電源上がりなどいろんなところがあるとおもいますが、しかし、このTD4は0.5秒近くも起動にかかるのか。。
波形を確認したことで動作原理の漠然としたところがよりわかったのは良かったです。

遅すぎる気もしますがIC側の機能とデータまで調べるはもうやめましょう。またの機会にして、
上の微妙なハンダ付け不良を直すと3行転送プログラムは動作した。

次は早すぎて硬くなりすぎたラーメンタイマーを再び実行だ。 今度は動作してほしい。いや、今度こそ。。


始める電子回路 CPUを作る 回路がわかる本 始める電子工作 
        メインページへ