控制器
复习
- 一台会记事的小计算机:把运算器和存储器组装成能连续计算并保存结果的机器
- 指令系统基础:指令由操作码和操作数组成,可存入存储器
- 程序与程序计数器:程序是指令序列,PC 保存下一条指令地址
TL;DR
- 控制器按时钟节拍发出控制信号
- 一条指令要经历取指、译码和执行
- 控制器本质上是一台管理步骤的状态机
正文
程序已经写好,PC 也指向了第一条指令。可存储器不会自己去读,寄存器和 ALU 也不会主动行动——它们都只是安静地待着,等别人告诉自己该做什么。
我们还缺一个指挥员。这个指挥员叫作控制器(control unit)。
把一句话拆成动作
以“读取地址 20 到 A”这条指令为例。控制器不会把整句话一口气喊出去,而是把它拆成一拍一拍的细小信号:
- 把 PC 的值送到存储器地址线
- 读取指令,把它收进指令寄存器 IR;同时让 PC 加一
- 识别操作码,取出其中的地址 20
- 用地址 20 再读一次存储器,把数据写入 A
前两步叫取指,第 3 步叫译码,第 4 步叫执行。你可能会问:为什么不能一步到位?因为读出“地址 20”这件事本身,也要等前一步把指令取回来、识别出来才谈得上。一步依赖一步,所以必须分拍。
还有一点很关键:不同指令的取指过程完全相同,执行阶段则各走各的路。这为后面复用控制器留了伏笔。
控制器也是状态机
控制器要记住自己目前走到哪了——是“取指第 1 拍”,还是“译码”,还是“执行”。这听起来是不是很耳熟?没错,它正是前面讲过的状态机:
当前步骤 + 操作码 + 状态标志
↓
本拍控制信号 + 下一步骤
执行完成后,状态回到取指,开始处理下一条指令。只要时钟不停,这个循环就不停。
所以,我们不必为控制器再添一套陌生的零件。保存步骤的是寄存器,判断下一步的是组合逻辑,推动步骤前进的仍是时钟——全是我们已经造过的东西。复杂如控制器,也只是熟悉零件的重新组合。
指挥员到位了,下一章把它与运算器和寄存器装进同一个盒子。
思考题 1
为什么不同指令可以共用取指阶段,却要在执行阶段走不同的控制步骤?
思考题 2
控制器和前面用过的状态机,在结构上是同一类东西。那么“指令”和“状态机的状态”有什么相似之处?
小结
知识点
- 取指、译码与执行
- 指令寄存器 IR 保存当前指令
- 控制器是产生控制信号的状态机
参考资料
- Wikipedia(zh):控制单元:处理器中发出控制信号的部件
- Wikipedia(zh):有限状态机:控制器背后的通用模型
思考题答案(仅供参考)
思考题 1
所有指令都要先按 PC 从存储器取回并识别,这一步对谁都一样,所以可以共用;而操作码不同,后面要打开的寄存器、要用的 ALU 功能、要写回的位置都不同,执行步骤自然各走各的。
思考题 2
本质上相似。指令的操作码决定了“接下来要做哪种动作”,状态机的状态也决定了“这一拍要做什么”。两者都是用一个编号来索引一套固定的动作。可以说,控制器就是把“指令”翻译成了“状态跳转”。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪