Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

运算器总装

复习

  • 减法器:减法器复用加法器,把减数取反再加一
  • 算术逻辑单元:ALU 把算术与逻辑运算集成起来,用控制码选择运算
  • ALU 状态标志:ALU 用零、负数、进位和溢出标志记录结果特征

TL;DR

  • 运算器把输入、ALU、结果和状态标志连成一条数据通路
  • 控制线决定数据走向和运算种类
  • 我们已经造出“会算”的部分,接下来要让它“记住”

正文

  桌上的零件终于攒够了。这一章,把它们拼成第一件真正像计算机部件的东西。

两个入口,一个出口

  运算器最核心的路线,其实简单得出奇:

输入 A ─┐
        ├─> ALU ─> 结果
输入 B ─┘       └───> 状态标志
             ▲
           控制码

  把 A、B 送进去,再给一组控制码,ALU 就给出结果和几盏标志灯。

  • 比如控制码设成加法,输入 0000 0101(5)与 0000 0011(3),出口得到 0000 1000(8);
  • 把控制码改成按位与,同样的输入,出口就变成 0000 0001(1)。

  数据走过的这条路叫 数据通路(datapath)。但注意,控制码不搬运数据,它只是让应该通过的数据通过,让数据流向正确的电路。数据是车,控制信号是红绿灯。

回过头看看,我们造出了什么

  从最简单的与、或、非门开始,我们一路搭出了:

逻辑门
  ↓
半加器与全加器
  ↓
多位加法器
  ↓
加减法与逻辑运算
  ↓
ALU
  ↓
运算器

  还记得前面那张计算机的草图吗?它由运算器、存储器、控制器、输入和输出组成。现在,第一大块“运算器”终于完成了。拼图完成了最中心的一片。

但它仍然只有一瞬间

  别高兴太早。这台运算器有一个致命短板:它记不住任何东西。

  试着用它算 2 + 3 + 4。第一步算出 5,没问题;可当你想进行第二步时,输入已经变了,那个 5 也随输入一起消失了。第二步没有地方把 5 取回来。

思考题 1

  为什么仅有 ALU 还算不了 2 + 3 + 4?缺少的是新的运算规则,还是保存中间结果的能力?

  所以,所以接下来目标非常明确: 让电路记住一个 0 或 1。

  虽然听起来有点离谱,但我们好像从来没有试过让逻辑门绕回来连接自己(像条衔尾蛇那样)。也许会有些有趣的事情发生也说不定。

  下一章,我们试试让电路首尾相连。

思考题 2

  数据通路和控制通路各走什么信号?如果把它们画在同一张图里,你能指出哪几条线属于控制吗?

小结

知识点

  • 运算器的基本数据通路
  • 运算数据与控制信号承担不同职责
  • 目前为止的 ALU 不能保存中间结果
  • 计算机的下一块拼图是存储

参考资料

  1. Wikipedia(zh):数据通路:数据在部件之间流动的路径
  2. Wikipedia(zh):中央处理器:运算器最终嵌入的部件

思考题答案(仅供参考)

思考题 1

  ALU 已经会加法,缺的只是保存中间结果 5 的能力。没有存储,第一步的输出在输入改变后就会消失,第二步无法继续使用它。所以这里只缺“记忆”。

思考题 2

  数据通路上的数据参与运算,比如 A、B 和结果;控制通路上走的是控制信号,比如“选加法还是减法”“要不要写回”。

  在前面那副字符画上,从控制码那一侧进来、箭头指向 ALU 或各个开关的,都属于控制通路。

  分清这两类线,是理解后面 CPU 内部结构的关键。

协议

  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

封面图

设计师 | 南国微雪