让运算一步步自动进行
复习
- ALU 能完成一次加法
- 寄存器能在时钟边沿保存多位结果
- 把寄存器输出接回 ALU,旧结果就能参与下一轮
TL;DR
- 累加器保存当前结果,让多步加法连续进行
- 时序逻辑的输出同时取决于当前输入和过去状态
- 状态机用“当前状态 → 动作 → 下一状态”组织连续步骤
正文
来完成前面一直做不到的计算:
2 + 3 + 4
我们准备一个寄存器保存“到目前为止的和”,把它接到 ALU 的 A 端。新的加数接到 B 端,ALU 输出再绕回寄存器输入:
┌──────────┐
新加数 ─────>│ B 结果├────┐
│ ALU │ │
┌───>│ A │ │
│ └──────────┘ │
│ ▼
└───────────────[寄存器]
这个专门保存当前总和的寄存器,叫作累加器。
三拍算完
先把累加器清成 0,每拍送进一个数:
| 时钟边沿 | 新加数 | ALU 计算 | 边沿后的累加器 |
|---|---|---|---|
| 第 1 拍 | 2 | 0 + 2 | 2 |
| 第 2 拍 | 3 | 2 + 3 | 5 |
| 第 3 拍 | 4 | 5 + 4 | 9 |
每个周期里,累加器稳定地提供旧结果,ALU 计算新结果;到下一个边沿,累加器再收下它。旧结果不会在半路消失,新结果也不会在同一拍反复绕圈。
过去开始影响现在
同样输入一个 3,累加器原来是 2,结果得到 5;原来是 7,结果就得到 10。输出不再只看当前输入,还要看寄存器保存的过去。
这种电路叫作时序逻辑电路。半加器和 ALU 则属于组合逻辑:输入相同,输出就相同,不记得上一拍发生过什么。
机器还要记住“走到哪一步”
目前仍有人在每一拍更换加数。若想让乘法器自动执行“检查、累加、移位、继续”,机器还要保存当前步骤。
用两位寄存器就能给步骤编号:
00:等待开始
01:检查当前位
10:累加并移位
11:判断是否完成
每个周期里,组合逻辑根据当前状态和输入决定动作,同时算出下一状态;时钟边沿到来,状态寄存器收下它。这样的电路叫作状态机。
现在我们有了完整搭档:组合逻辑负责“这一拍算什么”,寄存器负责“下一拍记住什么”,状态机负责“接下来走哪一步”。下一章,我们马上用这三样东西,把以前只能写在纸上的重复加法真正装成乘法器。
思考题
交通灯按“绿 → 黄 → 红 → 绿”循环。哪些信息要由寄存器保存,哪些工作可以由组合逻辑完成?
小结
知识点
- 累加器保存并反馈当前运算结果
- 时序逻辑会受到过去状态影响
- 状态机根据当前状态和输入决定动作与下一状态
思考题答案(仅供参考)
当前亮的是绿、黄还是红属于状态,应由寄存器保存;组合逻辑根据当前颜色和计时是否结束,决定本拍亮哪些灯以及下一个状态是什么。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪