
MiniMax 4位CPU
简介
TD4-CPU的改进版。用不到20颗逻辑门芯片构建出最简单,但满足图灵完备的CPU。采用16*4容量的ROM,手动编程,无需编程器,插电即玩,是培养兴趣爱好、初学者学习汇编和计算机组成的好帮手。
简介:TD4-CPU的改进版。用不到20颗逻辑门芯片构建出最简单,但满足图灵完备的CPU。采用16*4容量的ROM,手动编程,无需编程器,插电即玩,是培养兴趣爱好、初学者学习汇编和计算机组成的好帮手。开源协议
:MIT License
(未经作者授权,禁止转载)描述
整体架构围绕A累加器构建,有两个程序状态寄存器(CF、ZF)支持空跑、加减、比较、转移、输入输出、跳转等指令。有一个4位输入端口和一个4位输出端口。运行频率0-100Hz。输出端口为一个数码管,可以锁存并显示8421BCD码。
更丰富的寄存器空间:相对于原版TD4-CPU只有两个通用寄存器,本设计修改为ACC加一个16*4位的寄存器堆,寄存器堆由一个额外的指针寄存器寻址。
更高利用率的ROM:原版TD4采用定长指令,无立即数的指令也要占据相应的立即数空间,而MiniMax 4bit增加了可变长度指令缓冲器,能自动解码指令;当指令长度为1*4时直接执行,指令长度2*4时(含立即数)先自动识别、缓冲再执行,有效提高了程序存储器利用率,在任何指令组合下,ROM利用率都是100%。因此,虽然缩减了一半的拨码开关存储器,但实际可执行指令数量只缩减了约25%。
指令:NOP、ADD、SUB、CMP、IN A、OUT A、MOV A,reg、MOV reg,A、MVI A imm、MVI P imm、JMP、JMZ、JMC、JNC。
执行ADD、SUB、CMP指令时,是ACC与RAM当前地址单元之间的操作。例如ADD指令,是ACC+RAM+C 结果存到ACC里,进位存到C标志位寄存器;SUB指令:是ACC-RAM-C 结果存到ACC单元里,当减法有借位时,C标志位置一;CMP指令,实际上是ACC-RAM,但结果不保存到任何地方,ACC和RAM中的所有数据不改变,但C标志位、Z标志位会改变,当ACC=RAM时,Z=1,否则Z=0;当ACC<RAM时,C标志位=1,否则C=0。
其中,P寄存器/也叫ADSR寄存器,是RAM地址指针寄存器。例如要对ram的0x5号地址进行读写,则执行指令MVI ADSR, 5(机器码:A 5),执行完这个指令后,再有涉及到RAM的操作时,操作的就是0x5号RAM单元了。直到下一次MVI ADSR指令,RAM指针才会改变。
JMP:无条件跳转。例如0x0h号ROM单元内容为0xFh,0x1h号ROM单元内容为0x8h,这两条组成了JMP 0x8h指令,则CPU识别到这一条指令后,将跳转到0x8号ROM单元继续取指执行。
JMPZ:当Z=1时才跳转到立即数指定的地址,否则不执行任何操作
JMPC:当C=1时才跳转到立即数指定的地址,否则不执行任何操作
JMPNC:当C=0时才跳转到立即数指定的地址,否则不执行任何操作
拨码开关ROM的地址空间为0x0-0xF,第一行左数第一个为0x0,左数第二个为0x1......以此类推,第四行左数第四个为地址0xF。
执行单长度指令时,只需编程一个4bit命令,例如执行ADD,则只需在该地址拨码开关设置为4'b0001,下一个地址开始就是下一个指令。当执行双长度的、带立即数的指令时,需要放置指令的地址先放高4位,低4位立即数放置在下一个地址,例如执行MVI A, 5 ,且从0x4地址开始执行,则0x4地址放置4'b1000,紧接着0x5号地址放置4'b0101,0x6地址就是下一个指令了......执行的时候虽然一次只能取一次命令,也就是1个4bit,系统在检测到是双长度命令时,取第一个4bit时只执行NOP,并记住该命令是多少,在第二个周期再取一个4bit组成一个完整的双长度指令,才执行相应的操作。
指令集简单介绍如下:
//------------------------------
以下无立即数,一个指令4bit
0 NOP 空操作,啥也不干
1 CMP 比较操作,不改变当前RAM单元或ACC的数值
2 ADD C+ACC+当前RAM指针指向的RAM单元,结果返回到ACC,进位输送到C寄存器
3 SUB C+ACC+取反(当前RAM指针指向的RAM单元),结果返回到ACC,进位输送到C寄存器(注:对于减法,C=0代表有借位/错位,C=1代表没有进位/错位)
4 MOV A reg 将当前RAM指针指向的RAM内的内容复制到ACC
5 MOV reg A 将当前ACC内部的内容移动到当前RAM指针指向的RAM单元
6 IN A 将用户按键(K3-K0)的状态输送到ACC(K3是最高位,K0最低位。按下代表该位为1,否则0)
7 OUT A 将ACC内的值输送到输出,使数码管显示并锁存(大于等于10的数字不显示)
//------------------------------
以下有立即数,一个指令8bit(4+4bit)执行时,将两个4bit合并到一起执行。指令在前,立即数在后,且必须连续放置才有效。
8 MVI A 将立即数(4bit)移动到ACC寄存器
9 MVI ADRS 将立即数(4bit)移动到RAM指针寄存器,下次读写RAM针对该单元读写
A NOP 空操作,啥也不干
B NOP 空操作,啥也不干
C JMPZ 如果Z寄存器=1,跳转到立即数指定的单元,否则这条指令不执行
D JMPC 如果C寄存器=1,跳转到立即数指定的单元,否则这条指令不执行
E JMPNC 如果C寄存器=0,跳转到立即数指定的单元,否则这条指令不执行
F JMP 强制跳转到立即数指定的单元
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论