FPGA学习之有限状态机讲解,什么是Moore与Mealy状态机?

什么是有限状态机?

有限状态机(Finite State Machine)简称FSM。

首先什么是有限状态机?我们可以用自己的话来理解,可以先抛开官方解释可能会更好理解一些。

有限顾名思义就是可以数得来的,也就是说,这个状态机所有的状态都是有限的,比如3个、4个、5个等等。反正不管它有多少个状态,肯定是有限的。所以就叫做有限状态机。

与之对应的当然就有个无限状态机(ISM)的东东,具体是什么东西,就先不讲了,有机会再讲,可能很多人对于自然语言处理里面的下推自动机(Pushdown Automaton,PDA)比较熟悉,其实PDA就是一种特殊的无限状态自动机(Infinite State Machine,ISM)

要是把有限状态机(FSM)的所有状态看作一个集合,那么其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态

作为一个有限状态机,完整的FSM组成是由:一组状态,一些输入,一些输出以及一组状态到状态的转换规则组成。

而在数字系统中,特别是FPGA中有限状态机也是一个非常常见的数字系统的主要组成部分,可以用在数字系统的核心部件设计中,可实现高效并且可靠的逻辑控制。

一个设计良好的状态机可以很容易地通过FPGA硬件描述语言(例如Verilog或VHDL)来编程实现,然后就可以在数字IC(集成电路)上综合实现。

FPGA学习之有限状态机讲解,什么是Moore与Mealy状态机?

一般状态机的状态转换图

分析上面的状态机状态转换图,可以看出该转换图中有两个特殊的状态节点,状态1称为起始状态,这个是每一个状态机必须有的一个状态,还有一个状态6,是结束状态

状态机工作过程:在启动一个FSM时,首先必须将FSM置于“起始状态”,也就是状态转换图的状态1,然后会根据输入情况进入其它状态,比如转换图中的当输入为A时会从状态1转换为状态2,当输入为D时,会从状态1转换到状态5。

最终FSM会到达“结束状态”,或者消亡状态。

FPGA学习之有限状态机讲解,什么是Moore与Mealy状态机?

数字系统FSM结构图

上图所示的状态机为最常见的数字系统FSM,可以看出主要分为时序部分、逻辑部分与输出部分组成,组合逻辑部分决定下一个状态是什么,时序逻辑决定当前状态。

并且还需要时钟同步整个过程以及Reset来恢复到初试状态。

而在数字系统中,将FSM(有限状态机)分为Moore状态机与Mealy状态机,其中Moore也可以翻译为摩尔,Mealy也可以翻译为米立,当然你要是愿意,叫米粒也是可以的。

下面就着重讲下:什么是Moore与Mealy状态机以及两者的不同之处。

Moore状态机介绍

首先讲下Moore状态机,摩尔状态机也是FSM种的一种,主要是指输出只取决于当前状态的状态机,也就是说,状态机的输出只与状态机所处的当前状态有关。

下图所示为一般Moore状态机的状态转换图,可以看出该状态机有四个状态S0--S3,还可以看出输出Dout是与状态在一起,“

在一个圈圈里面”,也就是说输出只与状态有关,而与转换路径上的输入Din没有关系。

FPGA学习之有限状态机讲解,什么是Moore与Mealy状态机?

Moore状态机状态转换图

Mealy状态机介绍

Mealy状态机主要是指输出不光取决于当前状态,还与输入有关系的状态机。

下图所示为一般的Mealy状态机状态转换图,可以看出,与上图的Moore状态机相比较,输出不是与状态一起,而是移出到了“圈圈外面”,是跟输入Din在一起的,说明输出不光与当前有关,还与输入有关。

FPGA学习之有限状态机讲解,什么是Moore与Mealy状态机?

Mealy状态机转换图

所以说,具体识别状态机属于哪种状态机,只需要看他们的状态转换图就可以,输出在“圈圈外面”且与输入Din在一起的就属于Mealy米粒状态机。

输出与状态在一起在“圈圈里面”的就属于Moore状态机,是不是特别简单,以后再也不用愁区分不开一个状态机属于哪种状态机了吧。

下面将这两种状态机进行一个比较。

Moore与Mealy状态机对比

Moore与Mealy状态机主要有以下几点不同点与共同点。

  1. 两者在形式上都是按时序逻辑、组合逻辑、状态转换、控制输出等部分划分的;
  2. 本质上来说,Moore状态机输出信号由当前状态决定,Mealy状态机输出信号由当前状态与输入信号共同决定;
  3. 输出时序上,Moore状态机同步输出,Mealy状态机异步输出;
  4. 输出变化上,Mealy状态机比Moore状态机领先一个时钟周期;

针对以上特点的具体解释,请看下一篇关于FPGA学习的文章。下一篇文章主要通过使用FPGA硬件描述语言来实现这两种状态机,并且也会将大家容易混淆的一段式、两段式、三段式状态机编程实现方式进行详细的讲解。

结尾:

通过本篇文章,你应该对状态机有了一个特别详细的了解了,相信已经讲解的足够清楚了,要是还有不清楚的地方或者讲错的地方都可以留言或者关注我一起交流,一起学习。

更多学习相关内容都可以关注我哦,感谢您的阅读。


分享到:


相關文章: