Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

累加器

复习

  • ALU 能完成一次加法
  • 寄存器能在时钟边沿保存多位结果
  • 把寄存器输出接回 ALU,旧结果就能参与下一轮

TL;DR

  • 累加器保存当前结果,让多步加法连续进行
  • 时序逻辑的输出同时取决于当前输入和过去状态
  • 组合逻辑负责计算,寄存器负责把结果留到下一拍

正文

  来完成前面一直做不到的计算:

2 + 3 + 4

  我们准备一个寄存器保存“到目前为止的和”,把它接到 ALU 的 A 端。新的加数接到 B 端,ALU 输出再绕回寄存器输入:

             ┌──────────┐
新加数 ─────>│ B      结果├────┐
             │   ALU     │    │
        ┌───>│ A         │    │
        │    └──────────┘    │
        │                     ▼
        └───────────────[寄存器]

  这个专门保存当前总和的寄存器,叫作累加器

三拍算完

  先把累加器清成 0,每拍送进一个数:

时钟边沿新加数ALU 计算边沿后的累加器
第 1 拍20 + 22
第 2 拍32 + 35
第 3 拍45 + 49

  每个周期里,累加器稳定地提供旧结果,ALU 计算新结果;到下一个边沿,累加器再收下它。旧结果不会在半路消失,新结果也不会在同一拍反复绕圈。

过去开始影响现在

  同样输入一个 3,累加器原来是 2,结果得到 5;原来是 7,结果就得到 10。输出不再只看当前输入,还要看寄存器保存的过去。

  这种电路叫作时序逻辑电路。半加器和 ALU 则属于组合逻辑:输入相同,输出就相同,不记得上一拍发生过什么。

还差一个自动指挥者

  累加器已经能保存中间结果,但目前仍有人在每一拍更换加数。若想让机器自己完成“检查、累加、移位、继续”,它还要记住当前走到了哪一步,并自动决定下一步。

  下一章,我们让机器把步骤也存进寄存器。

思考题

  为什么只把 ALU 的输出接回输入还不够,必须在反馈路径中加入寄存器?

小结

知识点

  • 累加器保存并反馈当前运算结果
  • 时序逻辑会受到过去状态影响
  • 寄存器让反馈结果只在时钟边沿更新

思考题答案(仅供参考)

  如果没有寄存器,ALU 的新输出会立刻绕回输入,再次改变输出,信号可能在同一个周期里不断变化。寄存器把结果锁到下一个时钟边沿,才把连续运算分成清楚的一步一步。

协议

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

封面图

设计师 | 南国微雪