这是一台由 74 系列数字电路芯片组成的满足冯·诺依曼提出的计算机的五个基本构建块的4位计算机,PCB板支持免费打样。
这个由74系芯片搭建而成的四位计算机可以完成简单的输入输出,操作数传送,加法,(条件)转移运算,支持调节时钟频率、使用单次脉冲输入或使用外部时钟输入。除此以外,该计算机集成了输出数字用的数码管以及大量状态指示灯,可以直观的观察计算机的运行情况。通过使用贴片元器件,该工程的PCB板被压缩在了10*10cm以内,支持免费打样,并且所有元器件均在正面,元器件总体排布均匀,让手动贴片更加简单(若使用SMT,单面贴片可以大幅降低成本),同时提升了计算机的美观性。
本工程的设计方案来自于日本工程师度波郁(Iku Watanami)的著作《用10个IC轻松介绍CPU设计》,在原电路基础上进行了部分修改,并重新设计了PCB板。
本工程在立创开源平台也有发布,请参考: https://oshwhub.com/the_starts-blessing/td4cpu
进行简单的输入输出、加法运算,实现操作数传送,进行(条件)转移。适合初学者简单了解计算机的基本组成和运行原理。
2个运算寄存器(A、B),1个输出寄存器,1个程序计数器(PC)。
16B ROM(程序存储器),使用拨码开关输入。
1个输入口(含一个四位拨码开关),2个输出口,1个7段数码管(可显示0-15)。
1HZ&10HZ&可调节三组内部时钟(准确性不高,仅供参考)。
TYPE-C接口输入。
TD4-CPU由ROM阵列,寄存器组,算数与逻辑单元(ALU),输入输出单元和时钟与复位单元五部分组成,下面对它们逐一介绍。
ROM阵列的主体由16个拨码开关(U0-U15)组成。拨码开关从右往左为 0-7 位,向上拨为 1 ,向下为 0 。74HC154(U17)负责对PC寄存器发送的2进制数据进行译码,将对应的ROM单元后端下拉至低电平,ROM模块前端通过总线整体由8个电阻上拉至高电平。当ROM单元后端为低电平且拨码开关某一位导通时,这一位对应总线会被下拉至低电平,此时总线的电平状态就是该ROM单元存储的数据取反后的数值;之后总线上的数据经74HC540(U16)反相(增强驱动能力)后输出至ALU模块,完成读取PC寄存器指向的ROM单元数据的操作。
寄存器组由四个74HC161 (4位2进制可预置的同步加法计数器) 构成,包含两个运算寄存器(REG_A (U19) & REG_B (U20)),一个输出寄存器,一个PC寄存器。运算寄存器负责存储即将参与运算的临时数据;输出寄存器负责对即将输出的数据进行锁存;PC寄存器(程序计数器)负责存储下一条要执行指令的首地址,CPU取址后PC寄存器会自动加一,此外PC寄存器内容也可以通过指令修改,从而实现程序的跳转运行。寄存器组数据由累加器(ADD)通过总线输入,四条LOAD控制线分别控制每个寄存器进行锁存操作(低电平有效),在系统复位后,四个寄存器均会被赋值为0x00。
ALU由多路复用器(MUX)、累加器(ADD)和逻辑单元组成,MUX由2个74HC153构成,每个控制两位输入;MUX受到来自逻辑单元的SEL_A和SEL_B两根控制线的控制,可以选择来自REG_A、REG_B、输入端口的数据或无数据输入;数据经MUX进入ADD参与运算。ADD(74HC283)是该计算机的核心,所有加法运算均由ADD完成;ADD的数据来自MUX和ROM单元直接输出的立即数(Im);当立即数为0时,ADD仅转移数据,此时可以完成转移或跳转运算。逻辑单元由D类上升沿触发器74HC74、或门74HC32和三路输入与非门74HC10组成;74HC74负责锁存ADD的进位标志位;74HC32和74HC10负责对指令(高四位)进行处理,控制寄存器组和MUX单元。
该计算机的指令与对应变量值如下所示:
汇编 | 二进制 | SEL_A | SEL_B | MUX选择项 | LOAD0 | LOAD1 | LOAD2 | LOAD3 | LOAD选择项 | ADD输出项 |
---|---|---|---|---|---|---|---|---|---|---|
ADD A,Im | 0000 XXXX | 0 | 0 | REG_A | 0 | 1 | 1 | 1 | REG_A | A+Im |
MOV A,B | 0001 0000 | 1 | 0 | REG_B | 0 | 1 | 1 | 1 | REG_A | B |
IN A | 0010 0000 | 0 | 1 | IN | 0 | 1 | 1 | 1 | REG_A | IN |
MOV A,Im | 0011 XXXX | 1 | 1 | NC | 0 | 1 | 1 | 1 | REG_A | Im |
MOV B,A | 0100 0000 | 0 | 0 | REG_A | 1 | 0 | 1 | 1 | REG_B | A |
ADD B,Im | 0101 XXXX | 1 | 0 | REG_B | 1 | 0 | 1 | 1 | REG_B | B+Im |
IN B | 0110 0000 | 0 | 1 | IN | 1 | 0 | 1 | 1 | REG_B | IN |
MOV B,Im | 0111 XXXX | 1 | 1 | NC | 1 | 0 | 1 | 1 | REG_B | Im |
OUT B | 1000 0000 | 1 | 0 | REG_B | 1 | 1 | 0 | 1 | REG_OUT | B |
OUT B | 1001 0000 | 1 | 0 | REG_B | 1 | 1 | 0 | 1 | REG_OUT | B |
OUT Im | 1010 XXXX | 1 | 1 | NC | 1 | 1 | 0 | 1 | REG_OUT | Im |
OUT Im | 1011 XXXX | 1 | 1 | NC | 1 | 1 | 0 | 1 | REG_OUT | Im |
JC B | 1100 0000 | 1 | 0 | REG_B | 1 | 1 | 1 | C | PC&Q | B |
JMP B | 1101 0000 | 1 | 0 | REG_B | 1 | 1 | 1 | 0 | PC | B |
JC Im | 1110 XXXX | 1 | 1 | NC | 1 | 1 | 1 | C | PC&Q | Im |
JMP Im | 1111 XXXX | 1 | 1 | NC | 1 | 1 | 1 | 0 | PC | Im |
*C指的是ADD的进位标志位(CARRY)
输入输出单元由一组输入排针,两组输出排针,一个板载数码管模块组成。上方输出排针左侧时电源、地、时钟、复位排针,顺序与16*16LED显示板上的保持一致,可以用8PIN排线进行直接连接。输入排针在使用时应确保四位拨码开关处于断开状态,否则外部无法输入低电平。板载数码管模块由译码器(74LS247)和数码管(共阳)组成,74LS247是一个可以显示0-16的四线七段译码器,用于驱动247数码管,拨动开关可以禁止74LS247输出,此时数码管保持全亮状态。数码管输出值如图所示:
时钟与复位单元由定时器NE555和反相器74HC14组成。NE555负责产生固定频率的时钟信号,可以通过拨码开关选择1HZ、10HZ、可调节三种输出模式;在可调节模式下,调节粗调和细调电位器即可调节时钟频率。74HC14用于产生单次时钟信号和复位信号以及驱动时钟复位显示LED灯,复位电路的限流电阻更大,因此在按下一秒钟左右才会发挥作用;单次时钟电路的复位电阻较小,起到一定的消抖作用。时钟产生电路与计算机时钟网络通过跳线帽连接,拔掉跳线帽即可接入外部时钟信号。在第一次打样时,采用了原版TD4CPU的反相RC振荡电路,但在进行测试时发现该振荡电路无法工作,并且找不到问题成因,更换元件重新焊接也未能解决该问题;因此在第二次打样时将原电路替换为更为稳定的NE555。
PCB采用四层板结构,板材为FR-4。 PCB尺寸为10cm x 10cm;默认板厚1.6mm,默认铜厚1oz。最小线宽:8mil,最小孔径:12mil(0.305mm)。
免费打样需要的其他工艺:绿色阻焊,白色字符,有铅喷锡或沉金,过孔盖油。
在焊接插件前请进行通电测试,通过指示灯检查计算机运行情况,防止出现虚焊,芯片损坏等问题,以免影响后续实验。
焊接温度不应高于265℃,并且尽可能减少高温焊接时间,以免对元器件造成损坏。
原理图
PCB
仿真图
实物图
测试视频
0e6024cace0fa6fe06bf2e3a95cfa347.mp4
TEST.mp4
2024.11.4 项目立项。
2024.11.14 原理图绘制完成。
2024.11.16 PCB板绘制完成,第一次打样。
2025.1.18 焊接完成,时钟电路工作异常。
2025.1.20 修改时钟电路、数码管电路,第二次打样。
2025.2.1 第二次焊接完成,数码管线路绘制错误,对样板进行飞线处理后恢复正常。
2025.3.9 第三次打样,因此次打样仅在第二次基础上修改了两条线,基本肯定没有异常。
2025.3.15 收到样板,没有异常,项目暂时结项。