34、P1 W5 U5.3 中央处理器(待完善)
视频:
如果本次课程对应的 Coursera 的视频打不开,可以点击下面链接
P1W5U5.3 - Central Processing Unit
第五周,前两节课 U5.1 和 U5.2 基本上大概描述了一下 总线 和 CPU 执行程序时的运行方式。
这节课 U5.3,老师就提供了一种实现CPU的 逻辑单元组成图。
老师在给出一种方案前,还是要再说说抽象概念。感叹了一下CPU的神奇与美丽,静态程序马上就可以被运行起来了,仔细想想是挺不可思议。
CPU黑盒
CPU黑盒,执行当前命令,准备下一条要执行的命令讲CPU的内部方案前,先说明一下黑盒对外的输入输出,主要就是和 数据存储和 程序存储 的交互。
黑盒左侧三个输入
16位data 要被当前命令处理的数据
16位instruction 当前的命令
还有1位输入之后再说 reset
黑盒右侧四个输出
16位outM 要写回的数据(往data memory存的数据)
1位writeM 是否写标识 (决定上面数据要不要写,也可以丢弃)
15位addressM 要存哪 (如果决定写入,那么这个提供写入data memory里的地址)
15位pc 下一条要执行的命令的地址(这个很重要,接下来会讲到)
打开黑盒
老师提供了其中一种高效简洁的方案,如下图
蓝色框的左右侧是上面提到的 输入和输出。
蓝色框内部,一看都是我们之前学过的。
(ALU 回顾 U2.4)
(PC 回顾 U3.4)
c 符号是控制位 control bits 不过这些从哪里来?老师故意不说清楚的,就是让学生在作业里自己搞明白...,命令里提取出来的?
黑盒内部下面老师分三部分来讲解 CPU黑盒的内部
黑盒第一部分
19.png第一部分主要是 处理指令,放大如下
首先如下图,看一个 指令@3001,回顾U4.3我们知道
@3001 就是把 3001 存入A register
(指令分 A指令 和 C指令,回顾U4.3)
A register 还有可能存入 ALU 的数据输出 (上图的outM),有一个Mux16的c控制位决定。
A register 根据之前 U4.3 的知识回顾,有三个功能。
A命令有设置常数参与计算的功能。应该就是上图A register输出 走入ALU的箭头路线。
A命令,还有自动选取M 寄存器 的功能。所以上图 A register输出 不加控制位,直接有一箭头走到 addressM
A命令,还有可能参与跳转,所以上图再往下 A register输出 有一箭头走到了PC(回顾U4.3 实例练习3)
@3001 的二进制数最左侧是0,代表是A指令黑盒第二部分
在开始讲第二部分前,回顾一下C指令 (具体请看 U4.4)
最左边一位为1,代表C-指令,然后依次往右两位没用到,但是惯例设成1。
然后7位 蓝色0011111 代表 comp (决定选择哪些寄存器,参与什么运算)
然后3位 绿色010 代表 dest(决定结果存在哪里)
最后3位 红色111 代表 jump(决定运算结果与0进行那种判断,跳转位置需提前存在A寄存器)
接下来讲解最黑盒内部复杂的部分-ALU
ALU 回顾 U2.4放大如下图
ALU 输入
一个 D 寄存器
一个 A寄存器或者M寄存器
对进入的两个数,进行怎样的操作,由C指令上的 蓝色 数决定(不应该是7位吗?回顾U2.4 和 U4.4,为啥图里只有6位)
命令中的蓝色位决(comp)定由谁(D、A、M寄存器)参与什么计算ALU 输出
上面提到回顾U4.4时,ALU输出存在哪里由 下图绿色三位决定(dest)
ALU 的输出会同时 送到 D、A、M寄存器,但是三个寄存器是不是要接受,就由dest决定了。
这个看来图中c标志都是根据 指令里提取出来的注意上图里 ALU 还有两个 输出位,如下图所示
一个说明 ALU的计算结果是否为 负
一个说明 ALU的计算结果是否为 零
这个和接下来黑盒第三部分PC,有关
是负吗?是零吗?黑盒第三部分
第三部分
Reset:它就像计算机重启按钮,一按hack小电脑就从头开始执行程序
(估计就是把PC地址设置成 instruction memory 的第一个位置。)
PC:决定下一条指令的地址
Reset、 PC下图左侧C指令里红色位(jjj)回顾U4.4
如果
jjj = 000,不跳转,下一步执行,PC自加1的位置
jjj = 111,直接跳转,下一步执行,PC等于当前A存的位置
有条件跳转,参考U4.4里的一个图表。
这里老师给出一个大概判断顺序,如下图
先判断 Reset
再通过 当前指令的jump(jjj) 和 ALU 两个输出 控制位(是负?是零?)
得出一个结果(load)
在通过load来判断PC如何设置下一条指令的地址。
到此 HACK小电脑的 CPU 就算讲解完了。
照理说,现在可以去写那个 HDL吧。
老师说别急。
因为CPU涉及到整个架构(存储啊,显示器,键盘)
总之先听完下节课再动手。