天下一反省会!

電子工作、プログラミング、読書など

\今月のイチオシ記事/

おススメ記事1
おススメ記事2
おススメ記事3
おススメ記事4

自作4bitCPU(TD4) ついに完成しました!【CPUの創りかた】

約1年前、”CPUの創りかた”という本に出会い、自作CPUに挑戦し始めました。

www.tenkaichi-hanseikai.com


そしていろいろあって挫折し、10か月の月日が流れ...


ついに自作4bitCPU(TD4)、完成しました!


本記事では完成したCPUの紹介と、制作時に行き詰ったポイントと、それをどのように解決したかについて記します。

制作時に行き詰った点と、解決方法について

完成品紹介の前に、先に制作時に行き詰った点についてまとめておきます。

TD4 の作成に苦戦している方の参考になれば幸いです。


実は作成時に行き詰った点は1つだけです。”ICの挙動がおかしくなる”という問題です。

例えば、今回使用した74HC161というICは、0~15までの数を二進数で1づつ数え上げてくれる機能があります。

ところがこのICを動かしてみると、1づつカウントアップするのではなく、毎回ランダムな数ずつカウントアップしてしまうという不具合がありました。(例えば0→4→9→12→1みたいな感じ)


この不具合については、ICの電源ピン-GNDピン間に0.1uFのセラミンクコンデンサを挿入することで解決しました。(ここまでは書籍にも書いています)

しかし、まだもう一つだけ不具合が残っていました。このICは15までカウントすると、次のカウントでは0に戻り、再び1づつカウントアップしていくという仕様があります。

ところが、なぜか15までカウントした後。次のカウントでは0ではなく1が出力されてしまうという症状が発生していました。

加えて、ICの電源ピン-GNDピン間のコンデンサの容量を変えると、ICの挙動も微妙に変わってしまうという症状も発生...。


ここで前回は挫折してしまい、10か月も期間が開いてしまったのですが、意外とあっけない方法で解決しました


それは、”電源回路およびクロック・リセット回路をしっかり作ること”です。


以前は電源回路やクロック・リセット回路をブレッドボード上に組んでいました。

これをやめて、電源回路をプリント基板に、クロック・リセット回路をユニバーサル基盤にそれぞれ実装してみたところ、ICの不具合はきれいさっぱりなくなりました。

それどころか、ICの電源ピン-GNDピン間にコンデンサを挿入しなくても正常に動作するようになったんです!


電子回路を組むうえで、電源をしっかり作りこむことの大切さを実感しました。


念のため、今回使用した電源回路の回路図を載せておきます。

電源回路の回路図
電源回路の回路図

9VのACアダプタから5Vの三端子レギュレータを使って降圧しています。

この時、三端子レギュレータの入力・主力側にコンデンサを入れることをお忘れなく。


それと、ブレッドボード上の電源・GNDラインには0.1uFと10uFのコンデンサを入れてバイパスしています。

コンデンサを適切に入れて、電源ラインにノイズが乗らないようにしましょう。

完成品紹介(TD4)

今回作成したのは"CPUの創りかた"で紹介されている4bitCPU、通称TD4です。

ネットには作成例がたくさん上がっているので、紹介は軽めに留めておきます。


まず外観はこんな感じ!

TD4の外観
TD4の外観


電源部およびクロック・リセット回路部については基板上に実装し、その他の部分はブレッドボード上に実装しました。


また、RAM部にはArduinoを用いています。

CPUを作るのにCPU使っちゃ本末転倒でしょ!というツッコミが聞こえますが、Arduinoはあくまで8bitの命令文を格納しておくためのROMとして使用するにとどめています。

計算はちゃんとロジックICで行っています!

動作確認もしてみました。入力ポートで指定した値を出力ポートから出力するプログラムです。

動作の流れとしては、

①出力ポートの値を0000で初期化
②入力ポートの値をAレジスタに転送
③Aレジスタの値をBレジスタに転送
④Bレジスタの値を出力ポートに転送
⑤ ①に戻る

という流れになります。

動作確認をした結果がこちら↓

youtu.be


入力ポートで指定した"1010"という値が出力され、対応する箇所のLEDが点灯しました!

CPU制作の感想

”CPUを作成する”、というよりは、”命令セットを作成する”という表現のほうが本質的なのかなと思いました。

命令セットさえ決まれば、あとは真理値表を書き出し、それをデコーダー回路に落とし込むだけです。

むしろ、より簡素なデコーダー回路になるように命令セットを割り当てていく作業こそ、CPU制作において最も工夫の余地があり、奥が深い要素なのかなと思いました。


今回参考にした書籍では、あらかじめデコーダー回路が簡単になるように命令セットが決められていました。

もしまた自作CPUに挑戦する際には、自分で命令セットとデコーダー回路の設計をやってみたいです。

あと、4bitだとほとんど何もできない(最大で16個の命令しか動かせないため)と分かったので、今度やるときは8bitに挑戦しようかなと思います。