FPGA——三段式状态机(1)

article/2025/9/19 23:46:04

        状态机全称是有限状态机(Finite State Machine、FSM),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。状态机可根据控制信号完成预定的状态转换,由组合逻辑电路和寄存器组成,可由状态转换表或状态转换图描述。

        输出只和当前状态有关而与输入无关成为Moore型状态机,输出和当前状态、输入都有关称为Mealy型状态机

1、状态机标准

        好的状态机的标准很多,最重要的几个方面如下:

        第一,状态机要安全,是指FSM不会进入死循环,特别是不会进入非预知的状态,而且由于某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来。这里面有两层含义:其一要求该FSM的综合实现结果无毛刺等异常扰动;其二要求FSM要完备,即使受到异常扰动进入非设计状态,也能很快恢复到正常状态。

        第二,状态机的设计要满足设计的面积和速度的要求。

        第三,状态机的设计要清晰易懂、易维护。

2、状态机描述方法

        状态机描述时关键是要描述清楚几个状态机的要素,即如何进行状态转移,每个状态的输出是什么,状态转移的条件等。具体描述时方法各种各样,最常见的有三种描述方式。

2.1 一段式状态机

        将整个状态机写到 1 个 always 模块里面,在该模块中即描述状态转移,又描述状态的输入和输出,这种写法一般被称为一段式 FSM 描述方法。

        缺点:A、不符合时序和组合逻辑分开描述的代码风格;B、不利于修改、维护;C、不利于附加约束;D、不利于综合器和布局布线器对设计的优化;E、代码冗长。

2.2 两段式状态机

        用 2 个always 模块描述状态机,其中一个 always 模块采用同步时序描述状态转移;另一个模块采用组合逻辑判断状态转移条件,描述状态转移规律,这种写法被称为两段式 FSM 描述方法。

        缺点:其输出一般使用组合逻辑描述,而组合逻辑易产生毛刺等不稳定因素。

2.3 三段式状态机

        在两段式描述方法基础上,使用 3 个 always 模块,一个 always模块采用同步时序描述状态转移;第二个采用组合逻辑判断状态转移条件,描述状态转移规律;第三个 always 模块描述状态输出(可以用组合电路输出,也可以用时序电路输出)。三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器,然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

         优点:A、FSM做到了同步寄存器输出;B、消除了组合逻辑输出的不稳定与毛刺的隐患;C、更利于时序路径分组;D、在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

        实例:

//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器
always @ (posedge clk or negedge rst_n) //异步复位
if(!rst_n)
current_state <= IDLE;
else
current_state <= next_state; //注意,使用的是非阻塞赋值
//第二个进程,组合逻辑always模块,描述状态转移条件判断
always @ (current_state) //电平触发
begin
next_state = x; //要初始化,使得系统复位后能进入正确的状态
case(current_state)
S1: if(...)
next_state = S2; //阻塞赋值
...
endcase
end
//第三个进程,同步时序always模块,格式化描述次态寄存器输出
always @ (posedge clk or negedge rst_n)
...//初始化
case(next_state)
S1:
out1 <= 1'b1; //注意是非阻塞逻辑
S2:
out2 <= 1'b1;
default:... //default的作用是免除综合工具综合出锁存器
endcase
end

两段式有限状态机与三段式有限状态机的区别

        FSM将时序部分(状态转移部分)和组合部分(判断状态转移条件和产生输出)分开,写为两个always语句,即为两段式有限状态机。

        将组合部分中的判断状态转移条件和产生输入再分开写,则为三段式有限状态机。

区别:

        二段式在组合逻辑特别复杂时适用,但要注意需在后面加一个触发器以消除组合逻辑对输出产生的毛刺。三段式没有这个问题,由于第三个always会生成触发器。

3、状态机的种类

        状态机分摩尔(Moore)型有限状态机与米利(Mealy)型有限状态机。

3.1 摩尔(Moore)型有限状态机

        Moore有限状态机输出只与当前状态有关,与输入信号的当前值无关。在时钟脉冲的有效边沿作用后的有限个门延后,输出达到稳定值。从时序上看,Moore状态机属于同步输出状态机。Moore有限状态机最重要的特点就是将输入与输出信号隔离开来。

 3.2 米利(Mealy)型有限状态机

        Mealy状态机的输出是现态和所有输入的函数,随输入变化而随时发生变化。从时序上看,Mealy状态机属于异步输出状态机,它不依赖于时钟。

 4、注意

1.编码原则

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

2.FSM初始化问题

        GSR(Gobal Set/Reset)只是在加电时清零所有的reg和片内ram,并不保证FSM能进入初始化状态,要利用GSR,方案是适用one-hot code with zero idle,即初始状态编码为全零。已可以适用异步复位rst

3.FSM输出可以适用task

4.FSM中的case最好加上default,默认态可以设为初始态

5.尤其注意:

        第二段的always(组合部分,赋值用=)里面判断条件一定要包含所有情况!可以用else保证包含完全。

6第二段always中,组合逻辑电平要维持超过一个clock,仿真时注意。


http://chatgpt.dhexx.cn/article/SsQeEXCo.shtml

相关文章

状态机详解(一段式、二段式、三段式)

一、有限状态机FSM&#xff08;Finite State Machine&#xff09; 组成元素&#xff1a; 输入、状态、状态转移条件、输出。 可以分为两类&#xff1a; Mealy状态机&#xff1a;时序逻辑的输出不仅取决于当前状态&#xff0c;还与输入有关&#xff1b; Moore状态机&#xff1a…

三段式状态机理解浅析

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/weixin_43070186/article/details/82085463 关于FSM的写法按照always块的个数来划分可以分为一段式…

彻底搞懂状态机(一段式、两段式、三段式)

转自&#xff1a;https://blog.csdn.net/wordwarwordwar/article/details/78509445 实例&#xff1a;FSM实现10010串的检测 状态转移图&#xff1a;初始状态S0&#xff0c;a 0,z 0.如果检测到1&#xff0c;跳转到S1。 下一状态S1&#xff0c;a 1,z 0.如果检测到0&#xff…

Verilog:三段式状态机(数字钟)

状态机在FPGA的设计中是至关重要的&#xff0c;使用的频率也很高&#xff0c;废话不多说在这里介绍一下三段式状态机如何设计。 设计状态机首先要清楚状态有几种&#xff0c;状态转移图是怎样的&#xff0c;各个状态的输出是怎样的。了解了这三样之后就可以开始设计实验所需要的…

三段式有限状态机

一段式、二段式、三段式状态机是按照书写FSM时使用的always块数目进行划分的&#xff0c;一般而言对于简单的状态机&#xff0c;可以使用一段式&#xff0c;其代码量以及使用资源都最少&#xff0c;但如果状态机较复杂&#xff0c;一段式状态机会对代码维护产生很大的不便&…

状态机,从细节出发(一段式、两段式、三段式,moore型、mealy型)

目录 前言 一、状态机要素 二、状态机描述方法 1、一段式描述方法 2、两段式描述方法 3、三段式描述方法 三、关系 1、一段式与三段式 2、两段式与三段式 3、三种FSM描述方法比较表 四、状态机的种类 1、Moore型状态机 2、Mealy型状态机 3、注意点 五、举例 1、…

时间复杂度与空间复杂度分析(递归与非递归比较)

时间复杂度&#xff1a; 一般情况下&#xff0c;算法中基本操作重复的次数就是问题规模n的某个函数f&#xff08;n&#xff09;&#xff0c;进而分析f&#xff08;n&#xff09;随n的变化情况并确定T&#xff08;n&#xff09;的数量级。这里用‘o’来表示数量级&#xff0c;给…

数据结构:时间复杂度空间复杂度(递归)

转载文章 时间复杂度&#xff1a; 一般情况下&#xff0c;算法中基本操作重复执行的次数是问题规模n的某个函数f(n)&#xff0c;进而分析f(n)随n的变化情况并确定T(n)的数量级。这里用"O"来表示数量级&#xff0c;给出算法的时间复杂度。 T(n)O(f(n)); 它表示随着问…

递归理解以及时间复杂度计算

一.复杂度分析&#xff1a; 可以理解为递归的深度就是空间复杂度&#xff0c;时间复杂度就是O(T*depth),其中&#xff34;是每个递归函数的时间复杂度&#xff0c;depth是递归深度&#xff0e; #空间复杂度O(1) def sum1_(n):res 0for i in range(n1):resireturn res#递归 空…

递归的时间与空间复杂度

一、 递归的时间复杂度 递归算法的时间复杂度 递归次数 \times 每次递归的时间复杂度。 递归次数&#xff1a;可以通过画递归树&#xff0c;数递归树的节点数&#xff0c;得到递归次数。 二、递归的空间复杂度 递归算法的空间复杂度 递归深度 \times 每次入栈的空间…

【转】Tomcat相关面试题,看这一篇就够了!

转自公众号&#xff1a;Java思维导图 Tomcat相关的面试题出场的几率并不高&#xff0c;正是因为如此&#xff0c;很多人忽略了对Tomcat相关技能的掌握。下面这篇文章整理了Tocmat相关的系统架构&#xff0c;介绍了Server、Service、Connector、Container之间的关系&#xff0c…

10道Mybatis经典面试题,赶快上车吧!⚡⚡⚡⚡

1.Mybatis中#{}和${}的区别是什么&#xff1f; 1.1 #{}方式能够很大程度防止sql注入&#xff08;安全&#xff09;&#xff1b; ${}方式无法防止Sql注入。 1.2 在JDBC能使用占位符的地方&#xff0c;最好优先使用#{}&#xff1b; 在JDBC不支持使用占位符的地方&#xff0c;就…

mybatis面试题 一

一、MyBatis工作原理&#xff1f; 1、 创建SqlSessionFactory 2、 通过SqlSessionFactory创建SqlSession 3、 通过sqlsession执行数据库操作 4、 调用session.commit()提交事务 5、 调用session.close()关闭会话 1&#xff09;读取 MyBatis 配置文件&#xff1a;mybatis-c…

Java面试题Tomcat的优化经验

来源&#xff1a;传智论坛 Tomcat作为Web服务器&#xff0c;它的处理性能直接关系到用户体验&#xff0c;下面是几种常见的优化措施&#xff1a; 一、掉对web.xml的监视&#xff0c;把jsp提前编辑成Servlet。有富余物理内存的情况&#xff0c;加大tomcat使用的jvm的内存 二、服…

Tomcat相关面试题,看这篇就够了!保证能让面试官颤抖!

Tomcat相关的面试题出场的几率并不高&#xff0c;正式因为如此&#xff0c;很多人忽略了对Tomcat相关技能的掌握&#xff0c;下面这一篇文章最早发布在知识星球&#xff0c;整理了Tomcat相关的系统架构&#xff0c;介绍了Server、Service、Connector、Container之间的关系&…

【Tomcat专题】简单认识一下Tomcat总体架构

文章目录 什么是Tomcat&#xff1f;Tomcat的主要工作Tomcat总体架构连接器容器 请求定位流程 什么是Tomcat&#xff1f; 在Tomcat官方网站上是这样介绍的。 The Apache Tomcat software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jaka…

四张图带你了解Tomcat系统架构--让面试官颤抖的Tomcat回答系列!

俗话说&#xff0c;站在巨人的肩膀上看世界&#xff0c;一般学习的时候也是先总览一下整体&#xff0c;然后逐个部分个个击破&#xff0c;最后形成思路&#xff0c;了解具体细节&#xff0c;Tomcat的结构很复杂&#xff0c;但是 Tomcat 非常的模块化&#xff0c;找到了 Tomcat最…

Tomcat常见面试题

1、tomcat有哪些组件&#xff1f; 2、tomcat有哪些Connector&#xff1f; http ajp 3、tomcat的Valve的作用是什么&#xff1f; 给每一个虚拟主机定义访问日志 4、servlet的生命周期&#xff1f; Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过…

【金三银四】Tomcat面试题(2021最新版)

目录 前言 1、Tomcat的缺省端口是多少&#xff0c;怎么修改&#xff1f; 2、tomcat 有哪几种Connector 运行模式(优化)&#xff1f; 3、Tomcat有几种部署方式&#xff1f; 4、tomcat容器是如何创建servlet类实例&#xff1f;用到了什么原理&#xff1f; 5.tomcat 如何优化…

Tomcat面试题(2020最新版)

文章目录 Tomcat是什么&#xff1f;Tomcat的缺省端口是多少&#xff0c;怎么修改tomcat 有哪几种Connector 运行模式(优化)&#xff1f;Tomcat有几种部署方式&#xff1f;tomcat容器是如何创建servlet类实例&#xff1f;用到了什么原理&#xff1f;Tomcat工作模式Tomcat顶层架构…