有限状态机FSM
状态机的两种形式
Mealy状态机:时序逻辑输出不但取决于状态,还取决于输入的一类状态机。此时,其状态机输出表达式为 输出信号=G(当前状态,输出信号)时钟同步的Mealy状态机结构如下图所示,从图中可以看出其输出逻辑G的输出由输入和当前状态一同决定。
T ips :Moore 和 Mealy 两种状态机的次态都是输入和当前状态的函数。Moore vs Mealy 状态机
Mealy机比Moore机“响应”速度快。
Mealy机的输出与当前状态和输入有关,而Moore机输出仅与当前状态有关。Mealy机的输入立即反应在当前周期;Moore机的输入影响下一状态,通过下一状态影响输出。为此Mealy机比Moore机输出序列超前一个周期,即“响应速度”较快。Mealy机的输出在当前周期,具有较长的路径(组合逻辑);Moore机的输出具有一个周期的延时,容易利用时钟同步,Moore机具有较好的时序。因为Mealy机的输出不与时钟同步,当状态译码比较复杂时,易在输出端产生不可避免的竞争毛刺;而Moore机的输出与时钟保持同步,则在一定的程度上可以消除抖动,因此经常使用Moore机设计来提高系统的稳定性。
Mealy机状态少,Moore机结构简单。
由于Moore机的输出只有当前的状态有关,一个状态对应一个输出,Moore机具有更多的状态。Mealy和Moore机之间可以相互转化,对于每个Mealy机,都有一个等价的Moore机,Moore机状态的上限为所对应的Mealy机状态的数量和输出数量的乘积。
状态机的状态通过触发器的数量来反应,Mealy机具有较少的状态,为此具有较少的触发器。
Mealy和Moore状态机的互换
对于给定的时序逻辑功能,可以用Mealy机实现,也可以用Moore机实现。根据Moore机比Mealy机输出落后一个周期的特性,可以实现两种状态机之间的转换。把Moore机转换为Mealy机的办法为,把次态的输出修改为对应现态的输出,同时合并一些具有等价性能的状态。把Mealy机转换为Moore机的办法是,把当前态的输出修改为对应次态的输出,同时添加一些状态。如下图所示,为把Mealy机状态图转化为Moore机状态图。

如上图所示,把Mealy型机转换为Moore型机,只要把现时输出改变为下一时刻输出。对于状态A,有4个箭头指向它,表示在当前状态下有4个状态可以转换为下一状态的A;同时当前输出均为0,可以把0移入状态A内部,表示在Moore机中状态A的输出为0。同理,可以把0分别移位B/C状态。但对于状态D,有两个箭头指向且具有不同的输出值,需要把状态D分解成两个状态D1和D2(每个状态对应一个输出,当输出不同需要利用不同的状态表示,这即是Moore机具有更多状态的原因),得到完整的Moore机状态模型。
同理,若把上图的Moore机转换为Mealy机,只要把Moore机中下一状态的输出改变成Mealy机中当前状态的输出,由于D1/D2两状态处于A/C两状态之间,且相当于A/C节点之间的一个等效节点,可以把D1/D2两状态合并为一个状态。
状态机设计原则
Mealy机和Moore机实现的电路是同步时序逻辑电路的两种不同形式,它们之间不存在功能上的差异,并可以相互转换。Moore型电路有稳定的输出序列,而Mealy型电路的输出序列早Moore型电路一个时钟周期产生。在时序设计时,根据实际需要,结合两种电路的特性选择。
对于时序电路中常见的计数器,因计数器状态已经固定不变,无论采用Mealy型还是Moore型电路,复杂度一样。
3段式Moore状态机



对于三段式状态机,只需在第三段,添加上输出与输入的关系即可