实物教具MiniMax CPU使用指南
一、简介
MiniMax CPU是一款经典4位TD4-CPU的改进版。用不到20颗逻辑门芯片构建出世界上最简单,但满足图灵完备的CPU。采用16*4容量的ROM离线编程。是培养兴趣爱好、初学者学习汇编、计算机组成、二进制原理的好帮手。
整体架构围绕A累加器构建,有两个程序状态寄存器(比较CF、相等ZF)支持空跑、加减、比较、转移、输入输出、跳转等指令。有一个4位输入按钮。运行频率0-100Hz。输出端口为一个数码管,可以锁存并显示8421BCD码,即0-9共10个数字。
优势1:更丰富的寄存器空间
相对于TD4-CPU只有两个通用寄存器,本设计修改为ACC加一个16*4位的寄存器堆,寄存器堆由一个额外的指针寄存器寻址。
优势2:更高利用率的ROM
原版TD4-CPU采用定长指令,无立即数的指令也要占据相应的立即数空间,而MiniMax CPU增加了可变长度指令缓冲器,能通过PLD自动解码指令。当指令长度为1*4bit时直接执行,指令长度2*4bit时(含立即数)先自动识别、缓冲再执行,有效提高了程序存储器利用率,在任何指令组合下,ROM利用率都是100%。因此,虽然缩减了一半的拨码开关存储器,但实际可执行指令数量只缩减了约25%。
优势3:更便捷的用户体验
板载5V0.7A的Type-C直接供电、使用定制的磁吸外壳后,使用3.7V锂电池搭配充放电模块供电
基础操作原理
执行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指针才会改变。
拨码开关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组成一个完整的双长度指令,才执行相应的操作。
二、指令集
1、无立即数
一个指令占4bit,无需带其他参数
2、有立即数
一个指令8bit(4+4bit)执行时,将两个4bit合并到一起执行。指令在前,立即数在后,且必须连续放置才有效。
三、示例程序
以下是一个最基础的循环倒计时程序,
对应的大致汇编代码如下:
; 将 0001 存入 ACC
LDA #0001
; ACC 存入 RAM 并输出
STA 0x2000
; RAM 与 ACC 相减
SUB 0x2000
; 跳转到 0x0002
JMP 0x0002
四、电路原理
所需芯片:7414、74153、74219、CD4543、74161、7474、74283、7486、74157、74238、7400
所需PLD:ATF16V8B
原版TD4 CPU开源项目地址:https://github.com/wuxx/TD4-4BIT-CPU
原版TD4 CPU相关原理视频: