【FPGA开发】--Moore 型和 Mealy型状态机

【FPGA开发】–Moore 型和 Mealy型状态机

摘要:关于Moore 型和 Mealy型状态机的详细说明,读者可以自行查阅书籍或者上网查找,本文不做详细描述。本文主要通过一个序列检测器的状态机来说明Moore 型和 Mealy型状态机基本设计方法,并对两种状态机进行简单对比说明。

NO.1状态机的基本知识点

1、状态机的分类

①根据状态机的状态数是否为有限个:

有限状态机(FSM)、无限状态机(ISM)

②根据输出与现态以及输入的关系:

Moore型状态机、Mealy型状态机   

Moore型状态机输出仅取决于状态; 

Mealy型状态机输出取决于输入和状态。

2、状态机的状态编码

【FPGA开发】--Moore 型和 Mealy型状态机_第1张图片

编码原则:

Binary-code和Gray-code适用于触发器资源较少,组合电路资源丰富的情况(CPLD);对于FPGA等触发器资源丰富的器件,使用one-hot-code较合适,这样不但充分利用FPGA丰富的触发器资源,还因为只需比较1bit,速度快,组合电路简单。

3、状态机的描述方法

★单进程(一段式)FSM描述方法

将整个状态机的三个模块合并起来,写到一个进程里面,在该进程中同时描述状态的寄存和次态逻辑和输出逻辑;

★两进程(二段式)FSM描述方法

用2个进程来描述状态机,其中当前状态寄存逻辑用一个同步时序进程描述,输出逻辑和次态逻辑合并起来用一个组合逻辑进程来描述;

★三进程(三段式)FSM描述方法

将状态机的3个模块用3个进程来描述,一个同步时序进程描述当前状态寄存逻辑,一个组合逻辑进程描述次态逻辑,一个进程来描述输出逻辑;

注意:

①三段式状态机并非指只有三个always块,当电路复杂时可以有多个always块;

②三段式状态机的输出逻辑可以用组合逻辑,也可以用时序逻辑。当使用组合逻辑时,判断条件是current_state,此时输出可能有毛刺,为了滤除毛刺,要用触发器进行同步,所以会使得输出有一个时钟的延时;当用时序逻辑时,为了不延时一个时钟周期,判断条件是next_state,此时输出是同步电路,没有毛刺;

③三段式状态机中描述次态逻辑的部分是组合逻辑,判断条件是current_state。

NO.2Moore型状态机设计之“1010”序列检测器

1、状态转换图

【FPGA开发】--Moore 型和 Mealy型状态机_第2张图片

2、关键代码

【FPGA开发】--Moore 型和 Mealy型状态机_第3张图片

3、仿真验证

【FPGA开发】--Moore 型和 Mealy型状态机_第4张图片

在这里插入图片描述

NO.3Mealy型状态机设计之“1010”序列检测器

1、状态转换图

【FPGA开发】--Moore 型和 Mealy型状态机_第5张图片

2、关键代码

【FPGA开发】--Moore 型和 Mealy型状态机_第6张图片

3、仿真验证
【FPGA开发】--Moore 型和 Mealy型状态机_第7张图片

在这里插入图片描述

NO.4对比分析

1、Moore型的输出与时钟是同步的,因为它仅是状态的函数,从而只有当状态改变时输出才可能改变。这就保了Moore型输出波形更加“洁净”。

2、Mealy型输出会随着输入的变化而变化,这既是它的缺点也是它的优点,设计者可通过输入信号对状态机的输出信号实施控制。

3、Mealy型状态机比Moore状态机所需要的状态个数少,这就意味着所需要的触发器个数少,电路更简单,成本更低廉。

4、就本文所的“1010”序列检测器而言,Moore的输出比Mealy的输出会有一个时钟的时延。

参考原文:《【FPGA开发】–Moore 型和 Mealy型状态机》

你可能感兴趣的:(FPGA,fpga开发)