我正在设计一个能够加法和减法的最小家庭酿造CPU(用于娱乐和学习)。
P->| |---------->P
A->| ___ |---------->A
0->|-| | |---------->T
|ADD|-|->ROM-->|
R->|-|___| |->RAM<->|
N->| |->R
0->| |->N
T------------------>|->I
I
是指令寄存器。加法器能够直接计算地址,但也可以用于通用算术,但结果必须通过T
临时寄存器到达RAM。
R
是读取寄存器(红色,不是簧片)。 N
是iNverted寄存器,其时钟信号与R
相同,但输出~R
。
这有点奇怪,因为地址总线一直由加法器驱动。此数据路径配置旨在允许有用的指令序列,例如:
fetch: [P++]->I
addi: [P++]->R; A+R->A
add: [P++]->R; [R]->R; A+R->A
load: [P++]->R; R->A
store: A->T; [P++]->A; T->[A] // A is clobbered
store: A->T; [P++]->A; T->[A]; T->R; R->A
jump: [P++]->R; P+R->P
move: [P++]->R; [R]->T; [P++]->R; R->A; T->[A]
控制系统需要生成以下启用/读取信号:Pen
,Aen
,Ren
,Nen
,Ten
,{{1} }。
还需要以下时钟/锁存/写入信号:MEMrd
,Pck
,Ack
,RNck
,Tck
。
除此之外,加法器的MEMwr
(进位)也需要一个信号,因为减法实现为Cin
,A - R == A + N + 1
。
目前共有12位信号,因此有4096种可能的组合。
如何计算这4096条指令中哪一条最常用,以便我可以为指令寄存器设计解码逻辑?
最好只是坚持实施累加器 - 机器指令集,一次一条指令,还是有更好的策略?
P.S。有条件的指示仍在进行中......