minimax_shell-dszb.png

202409071851211.png

一、简介

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,无需带其他参数

二进制

名称

作用

0000

空指令

0001

CMP

比较操作,不改变当前RAM单元或ACC的数值

0010

ADD

C+ACC+当前RAM指针指向的RAM单元,结果返回到ACC,进位输送到C寄存器

0011

SUB

C+ACC+取反(当前RAM指针指向的RAM单元),结果返回到ACC,进位输送到C寄存器(注:对于减法,C=0代表有借位/错位,C=1代表没有进位/错位)

0100

MOV A reg

将当前RAM指针指向的RAM内的内容复制到ACC

0101

MOV reg A

将当前ACC内部的内容移动到当前RAM指针指向的RAM单元

0110

IN A

将用户按键(K3-K0)的状态输送到ACC(K3是最高位,K0最低位。按下代表该位为1,否则0)

0111

OUT A

将ACC内的值输送到输出,使数码管显示并锁存(大于等于10的数字不显示)

2、有立即数

一个指令8bit(4+4bit)执行时,将两个4bit合并到一起执行。指令在前,立即数在后,且必须连续放置才有效。

二进制

名称

作用

1000

MVI A

将立即数(4bit)移动到ACC寄存器

1001

MVI ADRS

将立即数(4bit)移动到RAM指针寄存器,下次读写RAM针对该单元读写

1010

空指令

1011

空指令

1100

JMPZ

如果Z寄存器=1,跳转到立即数指定的单元

1101

JMPC

如果C寄存器=1,跳转到立即数指定的单元

1110

JMPNC

如果C寄存器=0,跳转到立即数指定的单元

1111

JMP

强制跳转到立即数指定的单元

三、示例程序

以下是一个最基础的循环倒计时程序,

把0001存入ACC

ACC存入RAM

输出

RAM与ACC相减

跳转到0x3

四、电路原理

所需芯片:7414、74153、74219、CD4543、74161、7474、74283、7486、74157、74238、7400

所需PLD:ATF16V8B

原版TD4 CPU开源项目地址:https://github.com/wuxx/TD4-4BIT-CPU

原版TD4 CPU相关原理视频:

1、TD4 原理分析0-系统综述

2、TD4 原理分析1-[时钟、复位]

3、TD4 原理分析2-[存储器、输入、输出]

4、TD4 原理分析3-[控制器、运算器]