嵌入式学习-04_嵌入式技术之从零搭建计算机
1 添加控制器
指令的本质就是控制信号的开关。
当前我们的控制信号如图所示:
0、1:控制ALU的计算选择(加、减、与、或)。
2、3:ALU的A输入选择信号。
4、5:ALU的B输入选择信号。
6:寄存器A的写使能信号。
8: PC计数器的写使能信号。
9: je条件跳转控制信号。
10:jmp无条件跳转控制信号。
11:数据RAM写使能信号。
12:数据RAM读使能信号。
15:终止信号。
现在已经有11位的信号控制了,如果电路越来越复杂,控制信号会越来越多。每一个控制信号都需要一个2进制位来表示它,现代计算机的指令多达几百上千个,那我们指令占用的位就太多了,我们必须用一种方式简化指令占用的控制位。
一个二进制位表示2个数字,目前我们的系统一共有如下9条指令,那么只需要24=16,也即4个二进制位就可以表示。
为了后期进一步扩展完善系统,我们选择25,32条指令的空间留有扩展的余地。5个二进制位在这里我们称为操作码,英文缩写opcode。
假如我们把每一条指令和一个5位opcode按照如下方式映射起来:
也就是当opcode=00000时,表示指令halt,当opcode=00001时,表示指令ld_a,以此类推。
新建一个电路图,取名控制器,然后在电路图中添加查找表,如下图所示:
查找表设置输入位为5位(与opcode一致),数据位16位。
点击编辑,输入映射关系数据(查找表默认显示的16进制数据)。
完善控制器电路如图:
以上控制器电路,就实现了通过5位的opcode,映射出对应指令的控制信号。
有了控制器之后,我们的指令寄存器中存放的数据就修改为opcode即可。修改电路如下图:
指令寄存器中存放 opcode(11-15),通过ALU控制器中的查找表映射出控制信号。
我们来测试一下加入控制器后的电路,计算29+38-5-3,并将运算的结果存放到数据RAM的地址5的位置。
数据RAM和指令RAM的数据如下:
仿真执行后结果如图:
2 将两块内存合二为一
2.1 现有系统运行方式梳理
在合并改造之前,我们先回顾一下我们现在的系统。
(1)开始我们有一个PC程序计数器,程序计数器的输出是一个4位的地址。
(2)该4位的地址既是我们指令RAM的地址,用来获取指令RAM中存放的opcode,也是数据RAM的读取地址,用来读取数据RAM中存放的数据。
(3)接下来我们的opcode通过控制器中的查找表,会映射出整个电路的信号开关控制情况,进而