【自学嵌入式:计算机组成原理】53. - 55.
53. 增加CPU的控制单元
这节课用隧道接了线

54. CPU的控制器实现
所有操作的取指周期一样,执行周期不太一样,最左侧是下标16的二进制位,最右侧是下标0的二进制位

取指操作
- 清除全部状态(0 0000 0000 0000 0000)
- 打开PC的OE,打开MAR的WE(0 1010 0000 0000 0000)
- 清除全部状态(0 0000 0000 0000 0000)
- 打开PC的EN(0 0100 0000 0000 0000)
- 清除全部状态(0 0000 0000 0000 0000)
- 打开MAR的OE,打开内存的OE,打开MBR的WE(1 0001 0000 1000 0000)
- 清除全部状态(0 0000 0000 0000 0000)
- 打开MBR的OE,打开IR的WE(0 0000 0011 0000 0000)
实际上指令写为
0 1010 0000 0000 0000
0 0100 0000 0000 0000
1 0001 0000 1000 0000
0 0000 0011 0000 0000
LOAD_A
- 清除全部状态(0 0000 0000 0000 0000)
- 打开IR的OE,打开MAR的WE(0 1000 0100 0000 0000)
- 清除全部状态(0 0000 0000 0000 0000)
- 打开MAR的OE,打开内存的OE,打开MBR的WE(1 0001 0000 1000 0000)
- 清除全部状态(0 0000 0000 0000 0000)
- 打开MBR的OE。打开RegA的WE(0 0000 0001 0000 0001)
实际上写为(最后补一个空指令,让每个指令都是4条)
0 1000 0100 0000 0000
1 0001 0000 1000 0000
0 0000 0001 0000 0001
0 0000 0000 0000 0000(后补的空指令)
LOAD_B
LOAD_B和LOAD_A之间的区别就是打开的寄存器不一样,指令写为
0 1000 0100 0000 0000
1 0001 0000 1000 0000
0 0000 0001 0000 0010
0 0000 0000 0000 0000(后补的空指令)
ADD
- 清除全部状态
- 打开RegA的OE,打开RegB的OE,打开ALU的OE,打开Output Reg的WE
指令写为(最后补3个空指令和其他保持一致)
0 0000 0000 0011 1010
0 0000 0000 0000 0000
0 0000 0000 0000 0000
0 0000 0000 0000 0000
STORE
- 清除全部状态
- 打开IR的OE,打开MAR的WE,打开Outreg的OE,打开MBR的WE
- 清除全部状态
- 打开MAR和MBR的OE,打开内存的WE
指令写为
0 1000 0100 0100 0000
1 0000 1001 0000 0000
0 0000 0000 0000 0000
0 0000 0000 0000 0000
总结
所有的微指令前面的取指操作都一样的,把取指操作加上
LOAD_A
0b01010000000000000
0b00100000000000000
0b10001000010000000
0b00000001100000000
0b01000010000000000
0b10001000010000000
0b00000000100000001
0b00000000000000000
LOAD_B
0b01010000000000000
0b00100000000000000
0b10001000010000000
0b00000001100000000
0b01000010000000000
0b10001000010000000
0b00000000100000010
0b00000000000000000
ADD
0b01010000000000000
0b00100000000000000
0b10001000010000000
0b00000001100000000
0b00000000000111010
0b00000000000000000
0b00000000000000000
0b00000000000000000
STORE
0b01010000000000000
0b00100000000000000
0b10001000010000000
0b00000001100000000
0b01000010001000000
0b10000100100000000
0b00000000000000000
0b00000000000000000
确定查找表输入和输出的位数
输出是17位,输入要分析一下:

实际上每个微指令需要2位操作码(4个指令,其实也可以搞成4位,但是为了演示方便)+3位操作数就把所有情况涵盖了,也就是5位的控制信号
将4个指令按顺序填入查找表


55. 自动CPU的完成

将opcode用分线器取低2位(因为前面只有2位操作码,4个指令00 01 10 11,所以只取低2位)
用计数器来往下数指令,默认从0开始,一个时钟周期增长1


此时CPU的效率取决于时钟周期,也就是我们拍按钮的频率
接下来接入一个10hz的时钟
内存中的值会送入寄存器,然后通过ALU算加法,直到最后溢出
10hz太慢了,加点频率
2000hz吧

浙公网安备 33010602011771号