状态机概念
- 有限状态机(FSM)
在有限个状态之间按一定规律转换的时序电路
状态机模型
- Meail状态机
输出不仅与当前状态有关,还与输入有关。
状态寄存器由一组触发器组成,用来记忆状态机当前所处的状态,状态的改变只发生在时钟的跳变沿。
状态是否改变、如何改变,取决于组合逻辑F的输出,F是当前状态和输入信号的函数。状态机的输出是由输出组合逻辑G提供的,G也是当前状态和输入信号的函数。
- Moore状态机
输出至于当前状态有关,与输入信号无关。
状态机设计
状态机设计方法:
- 四段论
- 状态空间定义
- 状态跳转
- 下个状态判断
- 各个状态下的动作
状态空间定义
假设一天的生活有4个状态——睡觉、学习、吃饭、娱乐。即每天在这四个状态之间转换。这四个状态的集合即为状态空间。
因为Verilog只能处理二进制数,所以我们要对这四个状态进行编码。如下图:
(右侧为独热码,即每个状态只有一个寄存器置位,译码逻辑简单。)
使用parameter
定义参数
使用reg
定义寄存器类型变量(位宽要求与参数位宽保持一致),current_state
表示当前状态、next_state
表示下一个状态。
状态跳转(时序逻辑)
每当复位的时候,把SLEEP值赋给当前状态,当时钟上升沿的时候,把下一个状态赋值给当前状态(时序逻辑,注意使用非阻塞赋值)
下个状态判断(组合逻辑)
上图代码为判断当前状态及时间,判断下个状态
各个状态的动作
或
三段式可以在组合逻辑后再增加一级寄存器来实现时序逻辑输出
- 可以有效地滤去组合逻辑输出的毛刺
- 可以有效地进行时序计算与约東
- 另外对于总线形式的输出信号来说,容易使总线数据对齐,从而减小总线数据间的偏移,减小接收端数据采样出错的频率。