套件128比自己打板买零件要划得来噢,10cm*20cm打板5张要75块钱。
成品一个售价248,咨询客服,如果是GitHub或者BiliBili来的有优惠噢。
这一台由74系列数字电路芯片组成的计算机,满足冯·诺依曼提出的计算机的五大基本构件,包括运算器、存储器、输入设备、输出设备和控制器。其核心是一个由10个74芯片构成的4bit CPU,包含了ALU(算术逻辑单元)、ID(指令译码器)、MUX(数据选择器)、PC(程序计数器)、以及寄存器A、B和输出寄存器。
与该CPU连接的ROM(只读存储器)用于存储程序,由拨码开关进行编程,可使用12个指令,最多编写16条指令程序。该项目的设计方案来自于日本工程师度波郁(Iku Watanami)的著作《用10个IC轻松介绍CPU设计》,并由来自广州的创元素团队复刻并讲解。由于创元素制复刻的套件不太符合笔者的电路设计审美。故在此基础上制作了更加美观,指示灯清晰的版本。CPU部分,原作者度波郁提供了一个网址用于仿真这台计算机:
https://vanya.jp.net/td4/
其中4片74HC161分别构成了4个Register(寄存器)A,B,OUT,PC,分别用于数据的临时存储、输出以及程序计数器(Program Counter)。
然后有2片74HC153作为MUX(数据选择器),用于选择进入ALU的数据来源。
74HC153是一个2路4选1多路选择器,通过2个进行组合,形成了一个4bit 4选1数据选择器。输入分别接了寄存器A、B、外部输入IN和GND。数据选择受ID控制。接着是由1片74HC283和1片74HC74构成的ALU(算数逻辑单元),其中283负责运算,将数据选择器送来的4bit数据与指令中的Operand(操作数)相加并得到结果和进位。而74HC74负责锁存进位标志位(Carry Flag)。
74HC283是一个4位2进制全加器,可直接得到两个数相加的结果并进位,74HC74是一个双D触发器,在时钟的上升沿锁住进位标志,并可以影响下一条指令的运行。最后是由1片74HC32和74HC10构成的ID(指令译码器),用于将指令中的Opcode(操作码)译码成对应的操作,通过控制MUX(数据选择器)和4个寄存器的Load,即在时钟来时寄存器是否装载来自ALU的结果。
74HC32是四路2输入或门,74HC10是三路3输入与非门。ROM部分,由1片74HC540、1片74HC154、16个8位拨码开关、16*8=128个二极管、以及上拉电阻组成。
其中由74HC154作为地址译码器,选择对应的拨码开关+二极管组合,即选择了对应的数据。
而74HC540用于将数据反相以及增强驱动。
74HC540是一个反相输出的八路缓冲器,即8个并列的非门由于开关向上是0,向下是1,不符合一般的认知,所以对数据进行反相,同时上拉电阻产生的高电平驱动能力不足(10KΩ上拉电阻),以及经过二极管产生的低电平电位不够低(0.7V左右,肖特基二极管0.5V),所以需要增强数据线的驱动能力。最后是系统时钟与复位部分。
系统时钟采用了手动、自动时钟两种模式,通过开关切换。
手动模式通过按键按下接地形成低电平,抬起时因为上拉电阻形成高电平。同时通过电容以及施密特触发器74HC14进行消抖。
自动时钟采用了一种门电路组成的多谐振荡器,通过RC电路充放电形成震荡。同时,通过调节电位器的值可以更改振荡频率。
复位电路与手动时钟电路差不多,只是多了个反相。
这套电路一共用了74HC14的5个反相器,剩一个没用。
TD4 中定义了十二种类型的指令,这里汇总了所有指令的列表。
由于TD4为4bitCPU,所以每条指令都由4bit的Opcode(操作码)和4bit的Operand(操作数)组成,一共8bit。这里用多种汇编助记符表示
助记符 | 指令 | 解释 |
---|---|---|
MOV A,B | 0001 0000 | 将 B 寄存器传送到寄存器A。不受C标志影响,执行后C标志置0。 |
MOV B,A | 0100 0000 | 将 A 寄存器转移到寄存器B。不受C标志影响,执行后C标志置0。 |
MOV A,Im | 0011 XXXX | 将立即数XXXX传送到寄存器A。不受C标志影响,执行后C标志置0。 |
MOV B,Im | 0111 XXXX | 将立即数XXXX传送到寄存器B。不受C标志影响,执行后C标志置0。 |
ADD A,Im | 0000 XXXX | 将立即数XXXX累加到寄存器A。不受C标志影响,执行后发生进位C标志置1。 |
ADD B,Im | 0101 XXXX | 将立即数XXXX累加到寄存器B。不受C标志影响,执行后发生进位C标志置1。 |
IN A | 0010 0000 | 将输入端口数据传输到寄存器A。不受C标志影响,执行后C标志置0。 |
IN B | 0110 0000 | 将输入端口数据传输到寄存器B。不受C标志影响,执行后C标志置0。 |
OUT Im | 1011 XXXX | 将立即数XXXX传输到输出端口。不受C标志影响,执行后C标志置0。 |
OUT B | 1001 0000 | 将寄存器B传输到输出端口。不受C标志影响,执行后C标志置0。 |
JMP Im | 1111 XXXX | 程序跳转到立即数指示的地址XXXX。不受C标志影响,执行后C标志置0。 |
JNC | 1110 XXXX | 当C标志为0时,程序跳转到立即数所指示的地址。反之什么都不做。执行后C标志置0。 |
PCB采用双层板结构,板材为FR-4。 PCB尺寸为19.2cm x 10.2cm,板厚1.6mm,铜厚1oz。 其他工艺:哑黑色阻焊,白色字符,有铅喷锡,过孔盖油。 最小线宽:5mil,最小孔径:0.5mm。