Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

状态机

复习

  • 累加器能把上一步结果留到下一拍
  • 时序逻辑的输出同时取决于当前输入和过去状态
  • 寄存器只在时钟边沿更新保存的内容

TL;DR

  • 状态表示机器当前走到了哪一步
  • 组合逻辑根据当前状态和输入,决定本拍动作与下一状态
  • 状态寄存器在时钟边沿保存下一状态,让步骤自动向前推进

正文

  累加器能保存“算到了多少”,但要自动完成一串操作,机器还要记住“走到了哪一步”。

  例如乘法器需要反复执行:检查乘数当前位、决定是否累加、移动数据、判断是否结束。若每一步仍由人拨动控制线,机器只是会记事,还不会自己做事。

给步骤编号

  可以用寄存器给步骤编号:

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

  寄存器里保存的编号叫作当前状态。不同状态会打开不同的控制线,让相应部件完成这一拍的动作。

让状态自己前进

  组合逻辑读取当前状态和外部输入,同时产生两类结果:

  • 本拍要执行的动作
  • 下一个状态

  时钟边沿到来时,状态寄存器收下“下一个状态”;下一拍,机器便按照新状态继续工作。这种“当前状态 → 动作 → 下一状态”的电路叫作状态机

  状态机不必理解乘法是什么。它只负责依照条件推进步骤。交通灯、电梯、控制器都可以采用同样的方法组织动作。

  现在,组合逻辑负责“这一拍算什么”,数据寄存器负责“已经算出了什么”,状态寄存器负责“接下来走哪一步”。下一章,我们用这套结构完成乘法。

思考题

  交通灯按照“绿 → 黄 → 红 → 绿”循环。状态寄存器需要保存什么?组合逻辑又负责决定什么?

小结

知识点

  • 状态是对执行步骤的编号
  • 状态机根据当前状态和输入决定动作与下一状态
  • 状态寄存器让机器按照时钟自动推进步骤

思考题答案(仅供参考)

  状态寄存器保存当前亮的是绿灯、黄灯还是红灯。组合逻辑根据当前颜色和计时是否结束,决定本拍亮哪些灯,并计算下一个应该进入的颜色状态。

协议

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

封面图

设计师 | 南国微雪