1. 状态机
有限状态机(finite-state machine,FSM),简称状态机。
状态机是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
状态机的思想方法,在 verilog 中经常用到。
2. 状态机的类型
verilog 中状态机主要用于同步时序逻辑的设计,能够在有限个状态之间按一定要求和规律切换时序电路的状态。
状态的切换方向不但取决于各个输入值,还取决于当前所在状态。
状态机可以分为 2 类:moore(摩尔)状态机和 mealy(米利)状态机。
3. moore 型状态机
moore 型状态机的输出只与当前状态有关,与当前输入无关。
输出会在一个完整的时钟周期内保持稳定,即使此时输入信号有变化,输出也不会变化。
输入对输出的影响要到下一个时钟周期才能反映出来。
moore 型状态机的一个重要特点:输入与输出是隔离开的。
4. mealy 型状态机
mealy 型状态机的输出,不仅与当前状态有关,还取决于当前的输入信号。
mealy 型状态机的输出是在输入信号变化以后立刻发生变化,且输入变化可能出现在任何状态的时钟周期内。
因此,同种逻辑下,mealy 型状态机输出对输入的响应会比 moore 型状态机早一个时钟周期。
笔记
实现相同功能时,moore 型状态机需要比 mealy 型状态机多一个状态,且 moore 型状态机的输出比 mealy 型延后一个时钟的周期。
因为 moore 型的输出与输入无关,只有当前状态有关,所以需要多出一个状态产生一个输出。
5. 状态机设计流程
根据设计需求画出状态转移图,确定使用状态类型,并标注出各种输入输出信号,更有助于编程。
一般使用最多的是 mealy 3 段式状态机。
状态机设计如下
- 根据状态机的个数确定状态机编码。编码前设计思路要清晰。
- 状态机第 1 段,时序逻辑,非阻塞赋值,传递寄存器状态。
- 状态机第 2 段,组合逻辑,阻塞赋值,确定下一个状态机的状态。
- 状态机第 3 段,时序逻辑,非阻塞赋值,确定输出信号。
笔记
多数采用 3 段式状态机,有便于维护,状态清晰等优点。
二段式状态机是把状态机的第 2,3 段描述合并,其余部分不变。
不建议 1 段式状态机。