見出し画像

動作確認

前回、配線が終わりましたので、ここからは動作確認を行っていきます。

配線のチェック

まずは電源を入れずに、配線が正しいことをテスタを使って確認していきます。

5V-GNDのショート:問題なし
ROMの配線:1か所接触不良
Input-DipSw:1か所接触不良
Output-LED:問題なし
74HC00:1か所接触不良
74HC04(a):Vcc未配線、GND未配線
74HC04(b):問題なし
74HC14:1か所接触不良
74HC32:問題なし
74HC74:問題なし
74HC153(a):1か所接触不良
74HC153(b):1か所接触不良
74HC161(a):問題なし
74HC161(b):問題なし
74HC161(c):問題なし
74HC161(d):Vcc未配線
74HC283:問題なし
74LS138(a):問題なし
74LS138(b):1か所接触不良
リセット回路:問題なし
クロック回路:1か所接触不良

チェックの結果、接触不良と配線されていなかった箇所がありましたが、致命的な配線ミスはありませんでした。
見つけた問題箇所を直して次へ。

電源を入れます

配線のチェックが終わりましたのでいよいよ電源を入れてみます。
実際に回路の製作を開始してから初めて電気を通す瞬間で、非常にドキドキします。
では、スイッチオン。
  ・
  ・
  ・
30秒程経過。
煙が出てないのと、部品が熱くなってないようなのでひとまず安心です。
であれば、あとは本に書いてある通りに一通りチェックしていきます。

電源のチェック

5VとGNDが正しく出てるかをチェックします。
正しく出ている。OK。

リセット回路のチェック

コンデンサの電位が1.2Vぐらいにしかなってない?本によると、テスタの内部抵抗による誤差とあるので計算してと書いてありましたが、計算方法が分らなかったのでとりあえずスルー。
リセットボタン押したときだけ、出力がLになっているので問題ないと思い次へ。

クロック回路(手動)のチェック

ここはリセット回路と同様。ボタンを押さなければ出力がH、ボタンを押すとLになっている。OK。

クロック回路(自動)のチェック

H/Lが交互に出てるかチェック。OK。
可変抵抗を回すと周期が変わることも確認。本によると33KΩで1Hz、3.3KΩで10Hz程度らしいので、最小で330Ωにして、100Hzまで出るかなと思ってましたが、発信せず2.5Vで止まってしまいますね。
なんでかな?と思いましたが、H/Lの切り替えが早すぎて、テスタの針のブレが見えなくなっているだけですね。というわけで問題なし。次へ。

プログラムカウンタのチェック

ここはテスタでのチェックはめんどくさかったので、ブレッドボードにLED刺して下のように検証してました。
画像なのでわからないですが、クロックに合わせてカウントされる様子が見れて、結構感動しました。

ROMのチェック

プログラムカウンタが指すアドレスに対応するROMを選択する74LS138のIN/OUTのチェック。が、ここで問題発生。
INとなる4つの足のH(1)/L(0)をチェックしていると、0~14(0000~1110)まではあっているのに15(1111)だけが全てL(0)になってしまうという現象が発生。
プログラムカウンタの出力をそのまま持ってきている(ショートさせている)だけなのでこんなことはありえないはずだが???

1時間ぐらい迷った挙句、74LS138側のIC側のGNDの接触不良ということがわかり問題が解消。
(ショートしているのに、電圧が同じにならなかったのは、基準とするGNDを統一していなかったためです。片方が接触不良だったので、結果がおかしなことになってしまっていたようです。なまじ0~14が正常に動いているように見えたせいで、逆に問題特定に時間が掛かってしまいました。)

その後は特に問題なく、Dip-SWとプログラムカウンタの値に応じてROMからの出力が出ていることが確認できたので次へ。

命令デコーダのチェック

TD4で使用できる命令がROMの内容に応じて正しく選択されるかをチェックします。ROMの上位4ビットが命令を選択するオペレーションコードになっているので、まずはここに問題ないかチェックします。

MOV A, Im:問題なし
MOV B, Im:問題なし
MOV A, B:問題なし
MOV B, A:問題なし
ADD A, Im:1か所接触不良による電圧異常
ADD B, Im:問題なし
IN A:問題なし
IN B:問題なし
OUT Im:問題なし
OUT B:問題なし
JMP Im:問題なし
JNC Im:問題なし

ここも配線ミスってたら直せないぐらい、線が密集しているので、大きな問題がなかったのは幸いでした。

イミディエイトデータのチェック

ROMの下位4ビットが、アドレス等を指定するデータとなっているので、ここをチェックします。
ちなみにTD4では、Dip-SWの並びがそのまま、最上位ビット→最下位ビットの並びになっています。正直ここを反転してしまっていないか、心配してましたが問題なくほっとしました。

加算器のチェック・加算器からレジスタへの配線

IN A命令にイミディエイトデータを与えた結果をチェックします。
イミディエイトデータとINの値が加算された結果が各レジスタの入力に来ている。OK。
クロックを進めると、Aレジスタに記録される。OK。次へ。

出力ポートのテスト

さて、本にはないですが最後は、LEDが点灯するかもチェックします。
OUT Im命令を使えばいけますね。最後は画像も載せて

ポチッ

点いた!
LEDが付いただけですが、かなりテンションが上がりました。
ある意味このLEDの出力を得るという機能を実現するために、(勉強期間も入れると)4か月もかけてこのCPUを作ってきたわけです。

これでようやく自分も「CPUを作ったことがある人」に仲間入りができた瞬間でした。
ここまでできれば、あとはROMにプログラムを入力して動かすだけです。
やることはこちらも本にある通り、LEDちかちかと、ラーメンタイマです。

LEDちかちか

プログラム通りに綺麗にLEDが点いたり消えたりすることが確認できました。次へ。

ラーメンタイマ

TD4といえば、やはりラーメンタイマです。
なんと、ラーメンができるまでの3分間を測ってくれるというものです。
最後の一分間にはなんと点滅までしてお知らせしてくれます。
しかも、クロック周波数を可変にしてあるので3分以外も測れるようになっています。

こちらは見てる分には何も面白くないので動画はないですが、動かした結果は動作が少し不安定(JNC命令が少し怪しい)な感じがしましたがとりあえず動いたといってよいかなという出来でした。
ちなみにクロック周波数をMaxにしたら動作しませんでした。残念。

おわりに

というわけで、動作確認も全て終えまして、TD4の製作はこれにて完了ということになります。
製作当初は完成までいけるのか正直、半信半疑でしたが、無事ここまでこれて、自分やるやんという言い知れぬ高揚感に包まれています。

なおもう少し、TD4についてnoteの記事を書く予定ではあります。
それでは今回はここまで。

この記事が気に入ったらサポートをしてみませんか?