幼女でもできる自作CPUチップ (16) CPUチップの測定

 前回の記事

ourfool.hatenablog.com

では、CPUチップの製造について書いた。

 今回は、製造されたCPUの測定について書いていく。CPUチップの入ったQFPパッケージをソケットに入れ、ArduinoをROM代わりに使って実際に動作するかを確認する。

 まず、CPUのQFPパッケージをクラムシェル型の測定ソケットに入れ、ブレッドボードを介して、ArduinoやLEDと接続した。ここで、ArduinoはROMとクロック・リセット回路の役割を、LEDは出力ポートを可視化する役割を果たしている。実際に繋いだようすは以下のような感じ。

f:id:ourfool:20180216155854j:plain

 

f:id:ourfool:20180216160017j:plain

写真からは何一つ情報が読み取れないかと思うので、各接続を図解すると、以下のような感じである。

 

f:id:ourfool:20180216162441p:plain

CPUからAddressを受取ったArduinoはそれに対応する命令をCPUへ返し、同時にCLK信号を一定周期でCPUへ向けて出力する。また、CPUの出力ポートにLEDアレイを接続することで、CPUからの出力が目で確認できるようになっている。 

 ArduinoにROMやクロック回路の役割を担当させるためのコードは、たとえば以下のような感じである。Arduinoの文法だけを使って幼女的に書いているので読めばわかるはずである。

CPUEval

CPUから受け取ったアドレス(analogRead(ADDR0)などの値)に応じて、指定した命令列をCPUへ出力している(digitalWrite(IM0, LOW), digitalWrite(INST0, HIGH)等)。また、クロックの生成も担当している。ここでクロックの周期は400~ms程度と設定しているので、CPUは2Hz程度で動作することになる。
 Arduinoに書き込んだプログラム内容で意図しているCPUの動作や、そのときの出力LEDの状態は以下の表のとおりである。これを確認できれば、ひとまず各種転送命令や演算命令が一通り実行できていることが確認できる。

f:id:ourfool:20180216162226p:plain

各種転送命令、演算命令に応じてLEDの状態が変わっていき、最後はジャンプ命令で最初のアドレスへと戻り、無限ループするプログラムとなっている。

 上記のプログラムを実行した結果は、以下のようになった。

表の意図する出力LEDの状態と比較すると、想定のとおりに動作していることがわかる。

 さて、今回までで実際にCPUチップを設計・製造し、その動作を確認することができた。CPUを作るという目標は半ば達成できたと言っていいのだが、肝心のCPUの脇でROM代わりに高級なマイコンを使っているところは何とも微妙な印象である。
 そこで、以前の記事(幼女でもできる自作CPUチップ (2) - saginomiya1.5)で示したとおり、製造したCPUとROM、クロック・リセット回路を基板に実装し、マイコン等を使わない独立のシステムとして組み上げることを目標としたい。次回は、その基板設計について書く予定である。