「CPUの創りかた」のTD4を製作しました。製作時点で購入できた部品についてまとめてあります。
作ったもの
ロジックICで自作する4bit CPUを「CPUの創りかた」をもとに作りました。集積度が高いのが好きなので、秋月電子のユニバーサル基板のBタイプに収めてあります。実際に作ってデバッグしていくとCPU内のデータの流れがよく理解できました
デバッグしやすいように動作確認がとれる部分ごとに製作していきました。
- ROMを作って単体で動作確認
- クロック回路を作って単体で動作確認
- 命令デコーダを作ってROMとクロック回路をつなげて動作確認
- 残りをすべて実装して完成
ROM
TD4のオリジナルの回路に加えて、実行中の命令を示すLEDをつけました。ダイオードはカソードコモンのダイオードアレイを使っています。使用したDIPスイッチは幅が狭く実装密度を上げたい場合はおすすめです。
TD4のROM
— 8bitマイコン (@771_8bit) September 19, 2021
(74HC540買い忘れ) pic.twitter.com/1vrP5s8ATu
普通のDIPパッケージの部品を使うときもハーフピッチ基板を使うとピンの隙間に配線を通せて便利です。
クロック回路
ICの電源ピンからクリップで電源を供給して動作確認しました。
TD4のクロック回路(と自作オシロ) pic.twitter.com/CvYocwevLy
— 8bitマイコン (@771_8bit) September 20, 2021
命令デコーダ
同じ種類のゲートを入れ替えて配線が簡単になっています。
動作テスト pic.twitter.com/JgnaEWmPwb
— 8bitマイコン (@771_8bit) September 20, 2021
CPU中心部
74HC161はSOPパッケージのものしか入手できなかったのですが、ICの裏に配線を通したかったので変換基板を使って表側に実装しました。レジスタAとレジスタBの値を青色LEDで示せるようになっています。出力レジスタは出力のLEDで、プログラムカウンタはROMの緑色LEDで確認できます。
TD4完成! pic.twitter.com/Sthn8hqvNx
— 8bitマイコン (@771_8bit) September 23, 2021
主要部品購入先
74HC154は入手できなかったため、こちらの記事を参考に74HC138で置き換えました。3-to-8デコーダを2つ使って4-to-16デコーダを作ります。
オリジナル | 用途 | 型番 | 購入先 |
---|---|---|---|
74HC74 | キャリーフラグ | TC74HC74AP (フリッププロップ) | 秋月 |
74HC161 | レジスタ・プログラムカウンタ | TC74HC161AF (4ビットカウンタ) | 秋月 |
74HC153 | データセレクタ | TC74HC153AP (4chマルチプレクサ) | |
74HC32 | 命令デコーダ | TC74HC32AP (OR) | 秋月 |
74HC283 | ALU | CD74HC283E (加算器) | 千石 |
74HC10 | 命令デコーダ | TC74HC10AP (NAND) | 千石 |
74HC154 | アドレスセレクタ | TC74HC138AP (3-to-8ラインデコーダ) | 秋月 |
74HC540 | アドレス出力 | TC74HC540AP (インバータ) | 千石 |
74HC14 | クロック回路 | TC74HC14AP (シュミットトリガ) | 秋月 |
DIPスイッチ | ROM | KSD82 (DIPスイッチ 8P) | 秋月 |
ダイオード | ROM | CE880 (ダイオードアレイ) | 秋月 |
詰まったところ
カウンタICの使い方
TD4ではカウンタICのカウントアップ機能を殺してレジスタを作ります。最初はこのあたりをよく理解せずに配線を始めていて、74HC161のENTピンとENPピンをLに落としていませんでした。このため電源を入れるとレジスタAとBが勝手にカウントアップしました。加算回路を調べても正常だったので本を読み直すとICのカウントアップ機能が原因だったことが分かりました。
プルアップ配線ミス
スイッチのプルアップ抵抗を電源側ではなくスイッチ側につけてしまいました。これは実装した翌日に基板を見て気づきました。製作物も製作者も一晩寝かすとデバッグが進みますよね。
はんだ付け接触不良
レジスタAが常にロードされるような挙動から、レジスタAの74HC161の接触不良に気づきました。
セキュキャンのLT会資料
セキュリティ・キャンプ全国大会2022のLT会でTD4について発表しました。