【自学嵌入式:计算机组成原理】53. - 55.

53. 增加CPU的控制单元

这节课用隧道接了线
image

54. CPU的控制器实现

所有操作的取指周期一样,执行周期不太一样,最左侧是下标16的二进制位,最右侧是下标0的二进制位
image

取指操作

  • 清除全部状态(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位,输入要分析一下:
image
实际上每个微指令需要2位操作码(4个指令,其实也可以搞成4位,但是为了演示方便)+3位操作数就把所有情况涵盖了,也就是5位的控制信号
将4个指令按顺序填入查找表
image
image

55. 自动CPU的完成

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

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

posted @ 2025-07-18 14:53  秦瑞迁  阅读(13)  评论(0)    收藏  举报