自作 CPU RK8

\[ \newcommand{dn}[3]{\frac{\mathrm{d}^{#3} #1}{\mathrm{d} #2^{#3}}} \newcommand{\d}[2]{\frac{\mathrm{d} #1}{\mathrm{d} #2}} \newcommand{\dd}[2]{\frac{\mathrm{d}^2 #1}{\mathrm{d} {#2}^2}} \newcommand{\ddd}[2]{\frac{\mathrm{d}^3 #1}{\mathrm{d} {#2}^3}} \newcommand{\pdn}[3]{\frac{\partial^{#3} #1}{\partial {#2}^{#3}}} \newcommand{\pd}[2]{\frac{\partial #1}{\partial #2}} \newcommand{\pdd}[2]{\frac{\partial^2 #1}{\partial {#2}^2}} \newcommand{\pddd}[2]{\frac{\partial^3 #1}{\partial {#2}^3}} \newcommand{\p}{\partial} \newcommand{\D}[2]{\frac{\mathrm{D} #1}{\mathrm{D} #2}} \newcommand{\Re}{\mathrm{Re}} \newcommand{\Im}{\mathrm{Im}} \newcommand{\bra}[1]{\left\langle #1 \right|} \newcommand{\ket}[1]{\left|#1 \right\rangle} \newcommand{\braket}[2]{\left\langle #1 \middle|#2 \right\rangle} \newcommand{\inner}[2]{\left\langle #1 ,#2 \right\rangle} \newcommand{\l}{\left} \newcommand{\m}{\middle} \newcommand{\r}{\right} \newcommand{\f}[2]{\frac{#1}{#2}} \newcommand{\eps}{\varepsilon} \newcommand{\ra}{\rightarrow} \newcommand{\F}{\mathcal{F}} \newcommand{\L}{\mathcal{L}} \newcommand{\t}{\quad} \newcommand{\intinf}{\int_{-\infty}^{+\infty}} \newcommand{\R}{\mathcal{R}} \newcommand{\C}{\mathcal{C}} \newcommand{\Z}{\mathcal{Z}} \newcommand{\bm}[1]{\boldsymbol{#1}} \]

RK8 は RK16 を 8bit 化した CPU です。 RK16 を ロジック IC で実装する前に、RK8 を作って検証します。

op
add rd rs1 rs2 R[rd]=R[rs1]+R[rs2]
addi rd rs1 imm R[rd]=R[rs1]+imm
mov imm rs1 rs2 R[rs1+imm]=R[rs2]
br imm rs1 rs2 if(rs1=rs2) PC = imm

op Stage 0 Stage 1 Stage 2 Stage 3
add rs1 = R[rs1] rs2 = R[rs2] R[rd] = alu pc++
addi rs1 = R[rs1] - R[rd] = alu pc++
mov rs1 = R[rs1] rs2 = R[rs2] R[alu] = rs2 pc++
br rs1 = R[rs1] rs2 = R[rs2] - pc = flag ? imm : pc++
op opc S2_SEL DOUT_SEL DADR_SEL(NOR) JMP(AND) COND=CN ALU
addi 00 00 : CODE2 0 : ALU 1 : ALU 0 - func
mov 01 01 : CODE1 1 : REG2 0 : CODE0 0 - ADD
add 10 1- : REG2 0 : ALU 0 : CODE0 0 - func
br 11 1- : REG2 - 0 : CODE0 1 0:EQ 1:LT SUB
74181 Cn M S3 S2 S1 S0
ADD 0 0 1 0 0 1
SUB 1 0 0 1 1 0
AND - 1 1 1 1 0
NAND - 1 0 0 0 1
OR - 1 1 0 1 1
NOR - 1 0 1 0 0
XOR - 1 1 0 0 1
XNOR - 1 0 1 1 0
NOT - 1 0 0 0 0
opc Cn / Cond M,S3:0
addi 00 0 0 1001 add
subi 00 1 0 0110 sub
andi 00 - 1 1110 adn
ori 00 - 1 1011 or
xori 00 - 1 1001 xor
mov 01 0 0 1001 add
add 10 0 0 1001 add
sub 10 1 0 0110 sub
and 10 - 1 1110 and
or 10 - 1 1011 or
not 10 - 1 0000 not
xor 10 - 1 1001 xor
be 11 0 A=B 0 0110 -
bl 11 1 A<B 0 0110 sub
品番 個数 用途
ロジック IC
74HC00 NAND
74HC02 NOR
74HC04 NOT
74HC08 AND
74HC32 OR
74HC564 8bit DFF 反転 3state 出力 2 レジスタ
74HC181 ALU 2 ALU
74HC564 8bit DFF 非反転 3state 出力 1 出力部
74HC540 3state バッファ 反転 5 セレクタ
74HC541 3state バッファ 非反転 6 セレクタ、入力部
74HC161 バイナリカウンタ 2 プログラムカウンタ
74HC175 4bit DFF 1 ステージカウンタ
74HC14 シュミットトリガ 1 チャタリング防止、NOT 秋月
メモリ
UPD431016LE-15 65536 x 16 1 メインメモリ 若松
5V NOR Flash 2 プログラム ROM
クロック
分周器付き発振器 1 クロック 秋月
押しボタンスイッチ(LED) 1 手動クロック & 電源ランプ 秋月
タクトスイッチ 1 リセット 秋月
スライドスイッチ 1 クロック切り替え 秋月