状态机
状态机
基础概念
一段式状态机
- 一个always块描述
- 状态转换,状态转移,状态输出
两段式状态机
- 一个always块描述:状态转移 (通用的)
- 一个always块描述:**状态转移,状态输出 ** (描述状态过程)
三段式状态机
- 一个always块描述:状态转换
- 一个always块描述:状态转移
- 一个always块描述:状态输出
推荐三段式状态机:
- 代码比较简洁
- 利于时序约束
- 无组合逻辑输出
- 利于综合布局布线
- 代码可靠性可维护性较高
- 代码风格规范
Moore状态机
- 状态的输出之何当前的状态有关
Mealy状态机
- 状态机的输出不仅与当前的状态有关,还和当前的输入信号有关
状态机设计分析
eg1 一段式状态机
- 使用Verilog设计电路,完成以下三个功能:(1) 每瓶饮料1.5元 (2) 一次只能投入一个硬币,有0.5 与1.0两种硬币 (3) 具有找零功能
- IDLE状态:0 机器显示额为0,不会输出饮料,不会找零
- S1状态:0.5 机器显示额为0.5,不会输出饮料,不会找零
- S2状态:1 机器显示额为1,不会输出饮料,不会找零
- S3状态:1.5 机器显示额为1.5,输出饮料,不会找零
- S4状态:2 机器显示额为2,输出饮料,找零0.5
1 | module one_section( |
Moore状态机
- 输出仅为当前状态,状态变化时,输出变化(完全取决于状态)
- 例如:台灯
- 适用于稳定输出的场景(灯一直亮)
- 先变状态,后输出
Mealy状态机
- 输出由当前状态和输入共同决定,输出在输入变化后立即发生
- 例如:感应式水龙头
- 适用于快速响应场景
- 先输出,后变状态
状态图设计要点
- 离开一个特定状态的弧线上的转移表达式必须是相互排斥的
- 能复位进入初始状态
- 有工具支持状态图作为逻辑输入
- 时钟信号是隐含的
状态表设计要点
- 穷举方法,列出所有状态和输入的组合
- 为每个可能的输入组合提供一列表示次态,一列表示输出
- 状态表的规模随着状态数的增加呈指数增长
- 状态表的规模随输入数的增加呈指数增长
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 秃头的君寻酱!








