「CPUの創りかた」の回路シミュレーション(6) --- p272 命令デコーダ

ブラウザで動作してインストール不要の下記の
https://www.falstad.com/circuit/circuitjs.html
回路シミュレータで、「CPUの創りかた」で紹介されていた回路の動作を確認してみました。

今回は p272 の 「命令デコーダ」を作成しました。
![[cpu272]命令デコーダ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3549839/a887d7f4-89a5-8a81-bc9e-47516e9ddf61.png)

◆回路シミュレータの簡単な使用法
- 回路図の緑色の部分は電圧が+Vcc ( 今回は 5V )、灰色の部分は GND 電位であることを示します。
- OP0 ～ OP3, C Flag のデジタル入力をクリックするたびに H/L が切り替わります。

◆回路の動作確認
p242 の真理値表を再掲します。

$\text{　命　　　令　}$|$\text{OP3}$|$\text{OP2}$|$\text{OP1}$|$\text{OP0}$|$\text{C Flag}$|$\textbf{SELECT B}$|$\textbf{SELECT A}$|$\overline{\textbf{LOAD0}}$|$\overline{\textbf{LOAD1}}$|$\overline{\textbf{LOAD2}}$|$\overline{\textbf{LOAD3}}$
:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:
ADD A, Im|L|L|L|L|X|L|L|L|H|H|H
MOV A, B|L|L|L|H|X|L|H|L|H|H|H
IN A|L|L|H|L|X|H|L|L|H|H|H
MOV A, Im|L|L|H|H|X|H|H|L|H|H|H
MOV B, A|L|H|L|L|X|L|L|H|L|H|H
ADD B, Im|L|H|L|H|X|L|H|H|L|H|H
IN B|L|H|H|L|X|H|L|H|L|H|H
MOV B, Im|L|H|H|H|X|H|H|H|L|H|H
OUT B|H|L|L|H|X|L|H|H|H|L|H
OUT Im|H|L|H|H|X|H|H|H|H|L|H|
JNC ( C=0 )|H|H|H|L|L|H|H|H|H|H|L
JNC ( C=1 )|H|H|H|L|H|X|X|H|H|H|H
JMP|H|H|H|H|X|H|H|H|H|H|L

X : H でも L でも OK

- デコーダ入力
オペレーションコード : OP3, OP2, OP1, OP0
フラグ : C Flag
- デコーダ出力
データセレクタ : SELECT A, SELECT B
レジスタ : LOAD0, LOAD1, LOAD2, LOAD3

この真理値表をもとに、OP3 ～ OP0, C Flag を入力して、SELECT A, SELECT B, LOAD0 ～ LOAD3 の値 ( H/L ) の組み合わせをチェックしてみてください。

---

シミュレーションを実行するには下記の回路ファイルをコピーして、シミュレータの File → Import From Text... で開くパネルに貼り付けてください。
```
$ 1 0.000005 10.20027730826997 50 5 50 5e-11
x 821 105 869 108 4 16 C\sFlag
L 816 112 768 112 0 0 false 5 0
x 817 -185 848 -182 4 16 OP3
L 816 -176 768 -176 0 0 false 5 0
w 1040 -176 816 -176 0
w 1072 -176 1040 -176 0
w 1040 -112 1040 -176 0
x 817 -280 848 -277 4 16 OP0
x 817 -245 848 -242 4 16 OP1
L 816 -272 768 -272 0 0 false 5 0
L 816 -240 768 -240 0 0 false 5 0
w 816 -240 1200 -240 0
w 864 -272 816 -272 0
L 816 -208 768 -208 0 0 false 5 0
x 817 -217 848 -214 4 16 OP2
w 896 -208 1072 -208 0
w 864 80 864 -224 0
w 864 112 816 112 0
w 928 80 864 80 0
w 880 -144 1008 -144 0
w 880 -64 880 -144 0
w 912 -64 880 -64 0
w 992 96 1072 96 0
w 1008 -144 1072 -144 0
w 816 -208 880 -208 0
w 1008 64 1008 -144 0
w 1072 64 1008 64 0
w 992 -80 1024 -80 0
w 1024 -80 1072 -80 0
w 1024 16 1024 -80 0
w 1072 16 1024 16 0
w 1040 80 1040 32 0
w 1072 80 1040 80 0
w 1040 -112 1072 -112 0
w 1040 -48 1040 -112 0
w 1040 -48 1072 -48 0
w 1040 32 1040 -48 0
w 1072 32 1040 32 0
w 896 -96 896 -80 0
w 912 -96 896 -96 0
w 912 -80 896 -80 0
R 896 -96 896 -128 0 0 40 5 0 0 0.5
w 1072 0 1056 0 0
R 1056 0 1056 -32 0 0 40 5 0 0 0.5
x 1148 70 1201 73 6 16 LOAD3
x 1147 8 1200 11 6 16 LOAD2
x 1143 -72 1196 -69 6 16 LOAD1
x 1141 -136 1194 -133 6 16 LOAD0
x 1142 -203 1218 -200 4 16 SELECT\sA
w 1152 80 1200 80 0
M 1200 80 1248 80 0 2.5
w 1152 16 1200 16 0
M 1200 16 1248 16 0 2.5
w 1152 -64 1200 -64 0
M 1200 -64 1248 -64 0 2.5
w 1152 -128 1200 -128 0
M 1200 -128 1248 -128 0 2.5
M 1200 -192 1248 -192 0 2.5
w 1152 -192 1200 -192 0
152 1072 -64 1152 -64 0 2 5 5
152 928 96 992 96 0 2 5 5
152 1072 -128 1152 -128 0 2 0 5
151 1072 80 1152 80 0 3 5 5
151 1072 16 1152 16 0 3 5 5
152 1072 -192 1152 -192 0 2 0 5
151 912 -80 992 -80 0 3 5 5
x 1142 -251 1217 -248 4 16 SELECT\sB
M 1200 -240 1248 -240 0 2.5
w 880 -144 880 -208 0
w 864 -224 896 -224 0
w 896 -224 896 -208 0
w 864 -224 864 -272 0
I 864 112 928 112 0 0.5 5
```