本文主要是介绍Moor Mealy FMS及三段式状态机写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 理论
- Moor & Mealy 有限状态机的区别
- 有限状态机的几种写法及区别
- 示例
- Moor状态机实现
- Mealy状态机实现
理论
Moor & Mealy 有限状态机的区别
有限状态机(Finite State Machine,FSM)包含几个要素: 输入、状态、状态转移条件、输出。这里讨论的两种状态机区别在于输出的产生:
- Moore状态机:时序逻辑的输出只与当前状态有关。
- Mealy状态机:时序逻辑的输出不仅取决于当前状态,还与输入有关。
注:这两种状态机可以相互转换
有限状态机的几种写法及区别
-
一段式:
只有一个always block,把所有的逻辑(输入、输出、状态)都在一个always block的时序逻辑中实现。这种写法不利于维护,容易出错,不推荐。 -
二段式:
有两个always block:状态切换用时序逻辑描述、次态判断和输出用组合逻辑描述。
这种写法条理清晰,但输出由组合逻辑描述因此可能存在竞争和冒险,产生毛刺。若要解决毛刺,一般要对状态机的输出用寄存器打一拍,但很多情况不允许插入寄存器节拍,此时应使用三段式描述。 -
三段式:
有三个always block:状态切换和输出用时序逻辑描述、次态判断用组合逻辑描述。
输出逻辑也用时序逻辑块描述,可以解决毛刺问题。由于时序逻辑输出实质也是对输出打一拍,为了解决比组合逻辑慢一拍的问题,三段式写法应用次态作为输出判断条件。
示例
实现串行求补器对【无符号】【负数】求补
求法:负数的补码等于他的原码自低位向高位,的第一个‘1’及其右边的‘0’保持不变,左边的各位按位取反,符号位不变。
Moor状态机实现
- 次态判断和状态切换
parameter S0=0,S1=1,S2=2,S3=3;//位反转前输出0,1状态,反转后输出0,1态reg[1:0] state,next;always@(posedge clk or posedge areset
这篇关于Moor Mealy FMS及三段式状态机写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!