一、前情复习
1.存储电路的复习
我们刚开始接触的第一个存储电路是SR锁存器。但是SR锁存器存在诸多不足,比如我们不希望出现无意义的状态,于是我们有了D锁存器,再输入电路中加入非门电路,避免了无意义状态,但同时失去了维持存储的功能。再然后,我们的D触发器避免了以上两个缺点。
D触发器依靠上升边沿触发,把原来的异步信号变成了同步信号,显示器不会刷新多次,稳定性增加。这种特性叫做时钟对齐,或者叫硬件对齐和时钟同步。
为了实现多位的存储,在D触发器的基础上,用多个触发器实现了寄存器。
多个寄存器相连,会导致数据同时一口气存入寄存器。为了避免这种情况,又发明了38译码器。
38译码器控制寄存器的写入使能,相当于寻址器。有了38译码器,所有寄存器就有了地址,通过输入地址,访问特指的寄存器。
3位的地址总线,一共能访问8个字节的寄存器内存。
2.计算机电路的复习
一端输入加了非门的或非门
两个二进制数可以产生2个bite的输出。产生一个输出,一个进位。
全加器的两个半加器不会同时产生进位输出,因此需要一个或门来连接。
4位全加器也是如此:
8位ALU:
ALU虽然有很多计算的电路,但只有一个结果能得到输出。
通过选择位,可以从这6个计算电路中选择需要做计算的电路。那么Select算三大总线中那一条?答案是控制总线。
总线的作用是用来影响电路逻辑的,被称为控制总线。影响数据的存储,就是数据总线。
如果想做加法运算,先将Select弄到0b010.
为了让电路向自动化靠近一步,加入内存。
二、向着自动化前进
1.内存加入计算
计算12+34+28
四个bite可以访问16个字节的地址内存
可以编辑地址,2改为12,7改为34,12改为28。
明确目标,我们想算的是加法,12+34+48。选择位select改为010
将Addr地址输入改为2,则地址对应数据是12,输出是C。
拍一下按钮。结果写入寄存器。
Addr改为7,输出结果0x22.
拍一下按钮,继续存入。
继续存入12,拍一下按钮算出结果:
输出改为十进制得:
2.加法计算,先抄数
加法计算第一件事,不是先执行010,而是001.
再拍时钟,2地址对应的12就会抄进去寄存器。
Addr再改7.这个时候不能拍时钟按钮,因为选择位还是001.如果拍了时钟,对应数据就直接抄进去了,不会做加法。所以需要该选择位为010.
同样存进12对应的地址数据48,拍时钟做加法。
多一步抄数的步骤。
再改数据位为000,改写入使能,改地址值,找个空闲地址例如15,改完拍时钟,最终结果存入。
第一步不能直接执行加法
3.添加指令内存并编写指令
目前离自动化还有一段距离,继续改动。再次寻求独立端口的EEPROM,作为指令内存。地址位数4,数据位数8.格式为二进制。
指令内存的八个bit,后面四位放地址,第一位EEPROM的写入使能,ALU的依次占后三位。
看图:
计算25-10+6-3
数据内存:
来分析地址。
分析完毕,可以抄进去了。
在EEPROM里编辑
确定之后,点击运行仿真电路。
点击时钟,输出25.
把指令改为1,再次拍时钟
指令地址改为2,点时钟。
改为3.点时钟
改4,点时钟。
结果已存入地址15
任何语言离不开地址,我们所写的高级语言是靠编译器来完成地址的操作指定的。
三、加入程序计数器,实现自动化
放一个4位寄存器和加法器
这个就是程序计数器。
之后和指令地址链接,实现自动化。
换成时钟信号
可以看出会溢出循环。仍然不完善,需要终止指令。
这套计算程序采用的是哈佛架构,数据与指令分开。
四、用抠门的思想实现指令升级
1.抠门思想
目前为止控制器还没有出现。
当前为了控制电路我们用了八个比特位,有没有可能用七个比特位控制。
选择位Sel中,当是001的时候,写入位总是0.只有寄存器的数据抄入数据内存才会打开写入位。
执行中间计算的时候,不打开写入位。基本绑定了抄入打开写入位,计算关闭写入位的关系。
写入位 选择位
1 000 绑死
0 001
0 010
0 011
0 100
0 101
0 110
0 111
一共八种可能。
因为000这种情况只有写入位1,所以只需要3个bite可以展示八个结果。写入位可以省掉。这就是抠门思想。
基于这种思想,给电路升级。整一个指令集。
控制器:
2.升级电路
从此以后前三位是指令,后五位是数据地址。
计算10+6+18-3-6
使用汇编语言:
load 1 0b 001 00001
add 3 0b 010 00011
add 15 0b 010 01111
sub 7 0b 011 00111
sub 3 0b 011 00011
save 14 0b 000 01110
00100001
01000011
01001111
01100111
01100011
00001110
指令名称 地址 指令 地址
即使抠出来一个bit,也不影响电路的功能。
通过开关实现计算,其实就是围绕地址指令刻画的流程让他一步步走下去。
以上电路消耗非常大。容易滋生bug.如此芯片、外设的作用就很大了。
五、爱心电路
如何点亮爱心? 按照P00->.P07->p00的顺序
0000 0001 |
0000 0010 |
0000 0100 |
0000 1000 |
0001 0000 |
0010 0000 |
0100 0000 |
1000 0000 |
第一步将数据内存的值清空。
填入指令地址。
load 1 0b 001 00001
save 16 0b 000 10000
lshift 0 0b 110 00000
save 16 0b 000 10000
lshift 0 `````
save 16
lshift 0
save 16
lshift 0
save 16
lshift 0
save 16
lshift 0
save 16
lshift 0
save 16
0b 001 00001
0b 000 10000
0b 110 00000
0b 000 10000
0b 110 00000
0b 000 10000
0b 110 00000
0b 000 10000
0b 110 00000
0b 000 10000
0b 110 00000
0b 000 10000
0b 110 00000
0b 000 10000
0b 110 00000
0b 000 10000