8bit CPUを自作する(7)
回路設計
導入
ようやく回路を作ります。ここまで長かったですね(?)
これまでの6回で考えたブロックごとに基板を作ります。各ブロックをスタックして基板タワーを作ることが目標です。
命令デコーダ
これは第4回で書いた図をそのまま回路図に書くだけです。簡単だね。
M4のところを修正しました。

ALU
全加算回路とシフト回路でシートを分けました。そこからの出力をマルチプレクサで選択します。

全加算回路はさらにB入力のインバータと1bitの全加算器にそれぞれ分けてます。
全加算回路


1ビットの全加算器はモジュールにしています。


シフト回路
さっき出てきた3入力マルチプレクサと2入力マルチプレクサx2を使ってシフト回路を作ります。 2入力マルチプレクサを2つまとめた理由は基板に起こすとサイズの問題でVカットできないことに気が付いたからです。



こっちの3入力マルチプレクサはモジュールではなく直接基板に載せるのでパッケージをほかの3入力マルチプレクサで共有しています。

Memory CTRL
最後までいい名前が思いつかなかったMemory CTRLです。 配線難易度の問題から基板を2枚に分けました。 第5回でいうところの"CTRL"とOut-Registerとフラグレジスタ、A,Bレジスタと入力の2つにしました。 それぞれのレジスタの共通部分を"Register-base"としています。これで1つのモジュールとしています。

データの保持と入力を選択するマルチプレクサはさっきの2入力マルチプレクサを4つ並べたものを使います。ALUみたいに74HC157を使えばよかったのになぜこうしたのかは分かりません。

MEM CTRL0

CTRLも第5回で書いた通りです。

Out-RegisterはRegister-baseままです。

フラグレジスタは今回はすべてが同じタイミングで更新されるのでRegister-baseを流用します。 フラグ決定のロジックは第5回で書いた通りです。

MEM CTRL1
74HC240だったのを74HC244に修正しました。

Aレジスタの中身はRegister-baseです。しかしAの入力をALUとデータバスで切り替えるためにマルチプレクサを追加します(AIN MUX)。こっちでは74HC157を使っています。さらに出力もALUの入力とデータバスへの出力を制御するためにトライステートバッファを追加しました。


Bレジスタは出力にトライステートバッファが必要でした。Register-baseの後ろに74HC24074HC244がいます。

入力はピンソケットとDIPスイッチの二つを用意しました。これも出力にトライステートバッファが必要です。

ROM
ROMも面積の問題で実際のスイッチであるROM Memory Unitと第1回で示したROM CTRLをROM Process Unitの2枚に分けました。
ROM Memory Unit
第6回で示した通り16スイッチ使用します。74HC138を1つ/8SWで使用するので、8SWを単位としてシートを分けています。違いはGピンの接続です。 スイッチにダイオードアレイとしてシートを分けた理由は、回路図に起こしている途中に本当にダイオードを使用するか怪しかったのでスペース確保するためです。 74HC240のローの電圧が1.3Vほどで、秋月で売っているダイオードアレイのVFが1.2Vなのでこれを使うのはやめます。1N4148もVFが1Vなので怪しいです。なので今回はBSS84をダイオード接続して使います。 多分頭おかしいです。





ROM Process Unit
こっちはマルチプレクサだけの回路です。

プログラムカウンタ等
プログラムカウンタとクロック、リセット回路です。 クロックは半固定抵抗も用いて可変にしています。 他はTD4と同じですね。

あとがき
やっと配線終わりました。10日ほどかかったんだね。3Dモデルの写真はこんな感じです。

基板は年明けに注文するのでそれまでは次のCPUの構成を考えます。本当はタイトル通り8ビットを作るべきなんですけど......
2025-02-19追記: 第4回、第6回に示した修正を反映しました。
- 命令デコーダのM4を修正
- ROMのイネーブルを修正
- MEM CTRL1の74HC240を74HC244に修正
- Bレジスタの74HC240を74HC244に修正
- INの74HC240を74HC244に修正