状态机
复习
- 累加器能把上一步结果留到下一拍
- 时序逻辑的输出同时取决于当前输入和过去状态
- 寄存器只在时钟边沿更新保存的内容
TL;DR
- 状态表示机器当前走到了哪一步
- 组合逻辑根据当前状态和输入,决定本拍动作与下一状态
- 状态寄存器在时钟边沿保存下一状态,让步骤自动向前推进
正文
累加器能保存“算到了多少”,但要自动完成一串操作,机器还要记住“走到了哪一步”。
例如乘法器需要反复执行:检查乘数当前位、决定是否累加、移动数据、判断是否结束。若每一步仍由人拨动控制线,机器只是会记事,还不会自己做事。
给步骤编号
可以用寄存器给步骤编号:
00:等待开始
01:检查当前位
10:累加并移位
11:判断是否完成
寄存器里保存的编号叫作当前状态。不同状态会打开不同的控制线,让相应部件完成这一拍的动作。
让状态自己前进
组合逻辑读取当前状态和外部输入,同时产生两类结果:
- 本拍要执行的动作
- 下一个状态
时钟边沿到来时,状态寄存器收下“下一个状态”;下一拍,机器便按照新状态继续工作。这种“当前状态 → 动作 → 下一状态”的电路叫作状态机。
状态机不必理解乘法是什么。它只负责依照条件推进步骤。交通灯、电梯、控制器都可以采用同样的方法组织动作。
现在,组合逻辑负责“这一拍算什么”,数据寄存器负责“已经算出了什么”,状态寄存器负责“接下来走哪一步”。下一章,我们用这套结构完成乘法。
思考题
交通灯按照“绿 → 黄 → 红 → 绿”循环。状态寄存器需要保存什么?组合逻辑又负责决定什么?
小结
知识点
- 状态是对执行步骤的编号
- 状态机根据当前状态和输入决定动作与下一状态
- 状态寄存器让机器按照时钟自动推进步骤
思考题答案(仅供参考)
状态寄存器保存当前亮的是绿灯、黄灯还是红灯。组合逻辑根据当前颜色和计时是否结束,决定本拍亮哪些灯,并计算下一个应该进入的颜色状态。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪