有限状态机
-
- 前言
- 引入
- 分类
-
-
- Mealy型
- Moore型
-
- 状态编码
-
-
- 为什么编码
- 常见编码方式
- 特别说明
- 编码方式的选择
-
- 状态机转移图
-
-
- 输入
- 输出
- 状态
-
- 状态机描述方式
-
-
- 一段式
- 二段式
- 三段式
- 三种描述方式比较
-
- 再谈Mealy型Moore型状态机
前言 有限状态机表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
引入 时序电路中可以有输入也可以没有输入,当没有输入时用自身的电路状态作为组合电路的输入–>状态转移图

文章图片
时序电路包括组合电路(完成运算)和存储电路(完成存储),组合电路的输出状态反馈到组合电路的输入端,与输入信号一起共同决定组合电路的输出。X:输入;Y:输出;Z:存储电路输入;Q:存储电路输出? 时序电路在工作时是在电路的有限个状态间按一定规律转换,所以又将时序电路称为状态机
三个方程说明其逻辑关系:
输出方程
:Y=F[X,Q];组合电路
激励方程
:Z=G[X,Q];组合电路
状态方程
:Q*=H[Z,Q];时序电路
实际电路中可直接得到激励方程(例:J1 K1; J2 K2),带入到特征方程(例:JK触发器),于是得到电路的状态方程,之后激励方程不在使用。
电路的初始态给出,作为状态方程得现态,从而可得到次态,次态又作为下一状态的现态的输入,又得到新的次态,以此规律得到状态转移图
。状态个数与触发器个数相关,n个触发器–>2n个状态。
注意:电路的状态要分析完备,若现态缺少哪个状态,电路上电可能直接进入死循环,不能进入有效循环。
分类 Mealy型

文章图片
输出不仅取决于存储电路的状态(当前状态),还取决于输入Moore型

文章图片
输出信号仅取决于存储电路的状态(当前状态),但电路中并不是没有输入,只是与输入无关!!!状态编码 为什么编码
状态机可以根据设定好的状态进行状态转移,常见编码方式case(express)
:item
case语句比较过程中express
与item
进行比较,实现某个item
的匹配,即实现状态的匹配:由此出现对状态有效的编码能快速的进行匹配,还有考虑编码对FPGA内部,整个实现功能上的影响等问题

文章图片
二进制编码
:减少编码时触发器的数量,编码方式较为容易理解,译码复杂。独热码
:每一个状态均使用一个寄存器,在于状态比较时仅仅需要比较一位,相比其他译码电路简单。格雷码
:所需寄存器数与二进制码一样,译码复杂,但相邻位只跳动一位,实现状态机时触发器反转次数最少,不仅能消除状态转换时由多条信号线的传输延迟所造成的毛刺,又可以降低功耗
编码方式的选择

文章图片
状态机转移图 状态机,是协调相关信号动作,完成特定操作的控制中心。对于状态机的设计重点就是状态转移图的设计。FPGA并行执行,若想要按顺序处理事件这时引入状态机;所以我们要做的就是从实际问题中列出所有可能的状态,抽象出状态转移图。
状态转移图说明各状态之间的功能,跳转条件,输入输出,有以下三种要素:
输入
根据输入确定是否要状态的跳转和输出输出
根据当前时刻和输入,确定状态机所要输出的动作状态
根据输入和上一状态确定当前状态
状态机描述方式 搞清楚状态转移图,输入,输出,状态联系实际问题后开始进行描述状态机,有以下三种方式:![]()
文章图片
这副图可以很好说明各状态之间的功能,跳转条件,输入输出:
三种状态:IDLE ONE TWO ,箭头表示状态跳转
输入/输出:斜杠左边为输入,右边为输出
一段式
整个状态机写到一个always块里,描述状态的转移,输入,输出。二段式
就是输出方程,激励方程,状态转移方程都在一个always块里。
好处:更利于对事件思维的理解。
两个always块描述状态机,一个always块使用同步时序描述状态转移,另一个always使用组合逻辑判断状态转移条件,描述状态转移规律及输出三段式
就是状态转移方程在一个always块里,激励方程和输出方程另一个always块实现。
在二段式基础上将组合逻辑部分中判断状态转移条件和产生输出分开,就是三段式状态机。三种描述方式比较
三个always模块描述状态机,一个always模块采用同步时序描述状态转移,一个always采用组合逻辑判断状态转移条件,描述状态转移规律,另一个always模块描述状态输出(可以用组合电路输出,也可以时序电路输出)。
就是状态转移方程,激励方程,输出方程在不同always块中。
1. 一段式和二段式区别:二段式将时序逻辑(状态转移)和组合逻辑(判断状态转移条件和产生输出)分开; 这样做的好处不仅仅是便于阅读、理解、维护,更重要的是利于综合器优化代码,利于用户添加合适的时序约束条件,利于布局布线器实现设计。再谈Mealy型Moore型状态机
2.第三种描述方式与第二种相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。

文章图片

文章图片
1. Moore型比Mealy型多一个状态,进入状态’TWO’,检测到输入信号跳转到状态’THREE’,输出还是为0,等到状态THREE发现已经满足输出状态开始跳转输出为1,输出只由当前状态’THREE’影响而没有输入的作用。【#|FPGA基础设计(三)(状态机(FSM))】参考:https://www.cnblogs.com/smallqing/p/9943078.html
2. Mealy型当跳转到状态’TWO’,检测到输入为1,然后输出,再跳转到IDLE,即输出与当前状态’TWO’和输入都有关。
一般喜欢使用Mealy型,状态最简,状态编码节省寄存器资源。
推荐阅读
- LeetCode|98. 验证二叉搜索树
- #|零基础K210实现人脸识别(YOLO2)
- 51单片机之菜鸟阶段|51单片机基础之继电器
- 单片机|STM32项目设计(基于STM32的DHT11、MQ-2、光照强度检测)
- proteus|基于51单片机计算器设计
- 单片机|基于51单片机HX711的电子秤称重计价proteus仿真程序设计
- 计算机综合基础(408)|进程P1和P2均包含并发执行的线程,部分伪代码描述如下所示,下列选项中,需要互斥执行的操作是( )。[同步与互斥问题]
- #|在一个采用CSMA/CD协议的网络中,传输介质是一根完整的电缆,传输率为1Gb/s,电缆中的信号传播速率为200000km/s。若最小......[最小帧长问题]错题总结
- 计算机综合基础(408)|如下图所示,在Hub再生比特流的过程中会产生1.535us的延时,信号传播速率为200m/us,不考虑......[CSMA/CD协议+综合]错题总结