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 则属于组合逻辑:输入相同,输出就相同,不记得上一拍发生过什么。

机器还要记住“走到哪一步”

  目前仍有人在每一拍更换加数。若想让乘法器自动执行“检查、累加、移位、继续”,机器还要保存当前步骤。

  用两位寄存器就能给步骤编号:

00:等待开始
01:检查当前位
10:累加并移位
11:判断是否完成

  每个周期里,组合逻辑根据当前状态和输入决定动作,同时算出下一状态;时钟边沿到来,状态寄存器收下它。这样的电路叫作状态机

  现在我们有了完整搭档:组合逻辑负责“这一拍算什么”,寄存器负责“下一拍记住什么”,状态机负责“接下来走哪一步”。下一章,我们马上用这三样东西,把以前只能写在纸上的重复加法真正装成乘法器。

思考题

  交通灯按“绿 → 黄 → 红 → 绿”循环。哪些信息要由寄存器保存,哪些工作可以由组合逻辑完成?

小结

知识点

  • 累加器保存并反馈当前运算结果
  • 时序逻辑会受到过去状态影响
  • 状态机根据当前状态和输入决定动作与下一状态

思考题答案(仅供参考)

  当前亮的是绿、黄还是红属于状态,应由寄存器保存;组合逻辑根据当前颜色和计时是否结束,决定本拍亮哪些灯以及下一个状态是什么。

协议

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

封面图

设计师 | 南国微雪