状态机-----

news2024/9/29 15:27:34

1.原理

同步的意思就是状态的跳转都是在时钟的作用下跳转的,有限是指状态机中状态的个数是有限的。两种状态机的共同点都是状态的跳转只和输入有关,区别就是如果最后的输出只和当前状态有关而与输入无关,则是moore型状态机。如果最后的输出不仅和当前状态有关还和输入有关就称为mealy型状态机。

状态机的每一个状态代表一个事件。我们需要做的就是执行该事件,然后跳转到下一事件。状态机特别适合描述那些事情发生有先后顺序或者是时序归类的事情。

2.实战

实现一个简单的状态机,可乐售卖机,每次只能投一枚硬币,总共需要3元,可乐就会出来。

状态图有3要素,输入、输出、状态。

这两种状态转移图都是正确的,状态跳转的条件是输入一枚硬币,输出0代表可乐还未出来,1代表可乐可以出来。

可以看出右图最后的输出(1)只和当前的状态有关所以是moore型状态机,左图最后的输出除了和当前状态有关还和输入有关所以是mealy型状态机。

一般我们都喜欢化到最简。这里以mealy型状态机为例说明

使用独热码进行编码,把3个比特位的比较器变成了一个比特位的比较器,节省了组合逻辑的资源,代价就是需要的位宽变多了。在FPGA中,组合逻辑的资源是比较少的,但寄存器资源比较多。而二进制编码的利弊恰好和独热码相反,它用到的寄存器资源较少,而组合逻辑资源较多。综合的时候,无法进行比较器的优化。因为综合器对独热码的比较器进行了优化,所以用独热吗编写的代码可以在高速系统中运行。但是多个比特位的比较器,每次进行比较的时候,每个比特位到达比较器的时间会因为布局布线的走线长短而导致延时的不同,这样就会导致输出的不稳定或者是不准确。但是单比特的比较器就不需要考虑这个问题。如果状态数非常多,FPGA也吃不消对寄存器的消耗。所以说当状态数比较多的时候就使用格雷码,格雷码相近的两个状态之间只有1位数的不同。格雷码虽然也和二进制编码一样需要的位数比较少,使用组合逻辑比较多,但是相邻状态转换时只有1个状态是发生翻转的。这样不仅能消除状态转换时由多条信号线的传输延时造成的毛刺,又可以降低功耗。相当于独热码和2进制码的一个折中。

总结:在FPGA低速系统中,如果状态机中状态的个数小于4,就使用2进制码。如果状态数介于4-24之间,就使用独热码。如果状态的个数大于24个,就使用格雷码。在高速系统中无论有多少个状态,都推荐使用独热码。

module simple_fsm(
	input	wire	sys_clk		,
	input 	wire	sys_rst_n	,
	input wire		pi_money	,
	output reg		po_cola
);
parameter IDLE=3'b001;
parameter ONE=3'b010;
parameter TWO=3'b100;

reg [2:0]state;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		state<=IDLE;
	else case(state)
		IDLE:	if(pi_money==1'b1)
					state<=ONE;
				else
					state<=IDLE;
		ONE:	if(pi_money==1'b1)
					state<=TWO;
				else
					state<=ONE;
		TWO:	if(pi_money==1'b1)
					state<=IDLE;
				else
					state<=TWO;
		default:state<=IDLE;
	endcase
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		po_cola<=1'b0;
	else if((state==TWO)&&(pi_money==1'b1))
		po_cola<=1'b1;
	else
		po_cola<=1'b0;
		
endmodule
				
				

以上是2段式的状态机编码。

其余资料上的状态机编码有1段式,2段式,3段式。1段式状态机就是在一段的状态机中使用时序逻辑既描述状态的转移,又描述数据的输出。2段式表示份两段状态机,在第一段状态机中使用时序逻辑描述状态的转移,在第二段状态机中使用组合逻辑描述数据的输出。3段式是指在第1段采用时序逻辑描述状态的转移,在第2段中采用组合逻辑判断状态转移条件,描述状态转移规律,在第3段状态机中描述状态输出,第3段的描述可以使用组合逻辑也可以使用时序逻辑。

1段式在描述大型的系统是比较困难的,会使系统十分臃肿,不利于理解和修改。2段式简洁,但是第2段是用组合逻辑描述的,有些情况可能无法表达,比如说,输出时,需要计数的累加情况,这种情况会在组合逻辑中产生自迭代,自迭代在组合逻辑中是被禁止的。而且第二段的作用主要是使用组合逻辑描述数据的输出,输出使用组合逻辑可能会产生许多的毛刺。所以说也不推荐。

3段式是指在第1段采用时序逻辑描述状态的转移,在第2段中采用组合逻辑判断状态转移条件,描述状态转移规律,在第3段状态机中描述状态输出,第3段的描述可以使用组合逻辑也可以使用时序逻辑。最新的两段式就是把1,2部整合,用第一段时序逻辑既描述当前的状态又用组合逻辑描述下一状态。第二段保持不变。这是最推荐的。

综合器产生的状态转移图

RTL视图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473061.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件对比工具Beyond Compare 4 mac v4.4.7(28397)中文版

Beyond Compare是一款适用于Windows、Mac OS X和Linux平台的文件和文件夹比较工具。它可以帮助用户比较和同步文件夹、文件和压缩包等内容&#xff0c;支持多种文件格式&#xff0c;如文本、图像、音频、视频等。 软件下载&#xff1a;Beyond Compare 4 mac v4.4.7(28397)中文版…

二进制部署k8s之网络部分

1 CNI 网络组件 1.1 K8S的三种接口 CRI 容器运行时接口 docker containerd podman cri-o CNI 容器网络接口 flannel calico cilium CSI 容器存储接口 nfs ceph gfs oss s3 minio 1.2 K8S的三种网络 节点网络 nodeIP 物理网卡的IP实现节点间的通信 Pod网络 podIP Pod与Po…

NVIDIA\CUDA\cudnn安装以及visual studio2022编译安装ceres2.2.0库

一、NVIDIA驱动安装 网址:官方驱动 | NVIDIA 因为本文之后需要visual studio2022进行编译&#xff0c;所以在安装NVIDIA\CUDA\cudnn之前你先得安装visual studio2022 点击NVIDIA控制面板&#xff0c;NVIDIA Control Panel 查看产品家族 根据产品家族选择驱动&#xff0c;点…

SpringBoot使用classfinal-maven-plugin插件加密Jar包

jar包加密 1、在启动类的pom.xml中加入classfinal-maven-plugin插件 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><…

CleanMyMac4苹果Mac电脑全面、高效的系统清理工具

CleanMyMac 4 for Mac是一款专为Mac用户设计的系统清理和优化工具。它具备多种功能&#xff0c;旨在帮助用户轻松管理和释放Mac上的磁盘空间&#xff0c;同时提升系统性能。 系统垃圾清理&#xff1a;CleanMyMac 4能够深入扫描Mac的每一个角落&#xff0c;智能识别并清除不需要…

qt-C++笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径

qt-C笔记之使用QProcess去执行一个可执行文件时指定动态库所存放的文件夹lib的路径 参考博文&#xff1a; 1.C笔记之执行一个可执行文件时指定动态库所存放的文件夹lib的路径 2.Linux笔记之LD_LIBRARY_PATH详解 3.qt-C笔记之使用QProcess去执行一个可执行文件时指定动态库所存放…

C++ list详解以及模拟实现

目录 1.list的使用 1.1list的定义 1.2list的使用 1.3list iterator使用 1.4list capacity 1.5list element access 1.6list增删查改 2.list迭代器失效问题 3.list的模拟实现 1.list的使用 1.1list的定义 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容…

理想滤波器、巴特沃斯滤波器、高斯滤波器实现(包含低通与高通,代码实现与分析)

本篇博客聚焦理想滤波器、巴特沃斯滤波器、高斯滤波器进行原理剖析、代码实现和结果总结&#xff0c;代码含有详细注释&#xff0c;希望帮助大家理解。 以下将从理想低通滤波器、理想高通滤波器、巴特沃斯低通滤波器、巴特沃斯高通滤波器、高斯低通滤波器、高斯高通滤波器六个…

【网站项目】437物流管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

No matching version found for get-symbol-description@^1.0.2前端项目报错解决(亲测可用)

目录 一、问题详情 二、解决方案 一、问题详情 拉取一个新的项目的时候&#xff0c;前端进行install依赖的时候&#xff0c;报了如下的错误。 6120 verbose node v16.15.1 6121 verbose npm v8.11.0 6122 error code ETARGET 6123 error notarget No matching version foun…

隐变量模型、Auto-Encoder、VAE、VQVAE的学习

TOC 1 生成模型以及隐变量模型角度理解2 自编码器AE2.1 简单理解AE2.2 概率角度理解AE 3 变分自编码器VAE3.1 理解VAE3.1.1 证据下界(Evidence Lower Bound, ELBO)3.1.2 Encoder和Decoder3.1.2.1 Encoder3.1.2.1 Decoder 3.1.3 汇总3.2 概率角度理解 4 VQVAE4.1 AE、VAE和VQVAE…

计算机中x32、x64、x86是什么意思?

没有 x32 的说法&#xff0c; x86、x64 都指的是 CPU 的指令集架构。 指令集 所谓指令集&#xff0c;可以理解成硬件对外的接口。我们运行程序是通过操作系统调度&#xff0c;操作系统然后让硬件去计算。让硬件计算的话&#xff0c;比如一些加法乘法&#xff0c;循环之类的&…

网络防御-内容过滤技术

目录 内容过滤技术文件过滤技术压缩 文件过滤技术的处理流程内容过滤技术邮件过滤技术 内容过滤技术 文件过滤技术 这里说的文件过滤技术&#xff0c;是指针对文件的类型进行的过滤&#xff0c;而不是文件的内容。想要实现这个效果&#xff0c;我们的设备必须识别出&#xff1…

sqllabs第46关 order by 注入(通过盲注)

打开第46关 提示我们(请将参数输入为sort&#xff08;带数值&#xff09;) 用sort注入排序 尝试操作 order by注入 什么是order by 在MySQL支持使用ORDER BY语句对查询结果集进行排序处理&#xff0c;使用ORDER BY语句不仅支持对单列数据的排序&#xff0c;还支持对数据表中…

2步破解官方sublime4

sublime简要破解流程 1.下载sublime官方最新版2. 破解流程 1.下载sublime官方最新版 打开 官方网站下载 portable version 版&#xff0c;省的安装。。解压到任意位置&#xff0c;备份 sublime_text.exe 文件 2. 破解流程 打开网址把文件 sublime_text.exe 拖入网页搜索替换…

jeesite用字典项配置二级下拉选

1、配置字典项 2、html代码&#xff1a;修改下拉选项框 <div class"col-xs-6"><div class"form-group"><label class"control-label col-sm-4" title""><span class"required">*</span> ${…

智慧公厕:让城市更智慧、更环保

在现代社会&#xff0c;智慧公厕作为城市管理的重要一环&#xff0c;是智慧城市的重要组成部分&#xff0c;其建设的价值十出突出&#xff0c;是公共厕所信息化升级改造的核心方案。如智慧公厕源头厂家广州中期科技有限公司&#xff0c;所自主研发的智慧公厕整体解决方案&#…

QT之项目经验(windows下的sqlite,c++开发)

目录 一、需要时间去磨练gui的调整和优化 1. 借鉴网上开源项目学习 2. gui的布局及调整是磨人的一件事情 3. gui的布局也是可以用组件复刻的 4. 耗时的设备树 二、多线程异步弹窗 三、定时任务动态变更设定 1.确定按钮触发 2.此处监听定时任务时间的改变 3.此处对改变做出具…

ABAP 发送带EXCEL邮件

前言 没啥特殊需求&#xff0c;就是有个库龄报表用户想整邮件发送 实现 用的最简单的XLS文件作为excel附件发送出去 观察XLS文件的纯文本格式&#xff0c;每列之间用TAB制表符分隔&#xff0c;每行之间用回车符分隔 思路也比较明确&#xff0c;在SAP中实现这种格式&#xf…

golang学习4,glang的web接口

1.代码 package mainimport (/*"net/http"*/"github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/get", func(ctx *gin.Context) {ctx.String(200/*http.StatusOK*/, "hello word golang-web!")})r.POST("/use…