状态机-----

1.原理

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

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

2.实战

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

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

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

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

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

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

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

2.1 simple_fsm.v

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部整合,用第一段时序逻辑既描述当前的状态又用组合逻辑描述下一状态。第二段保持不变。这是最推荐的。

综合器产生的状态转移图

​​​​​​​

2.2 tb文件

`timescale 1ns/1ns
module tb_simple_fsm();
reg sys_clk;
reg sys_rst_n;
reg pi_money;

wire po_cola;

wire [2:0] state=simple_fsm_inst.state;

initial begin
	sys_clk=1'b1;
	sys_rst_n<=1'b0;
	#20
	sys_rst_n<=1'b1;
	end
	
always #10 sys_clk<=~sys_clk;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		pi_money<=1'b0;
	else
		pi_money<={$random}%2;

		
initial 
	begin
		$timeformat(-9,0,"ns",6);
		$monitor("@time %t:pi_money=%b,state=%b,po_cola=%b",$time,pi_money,state,po_cola);
	end

simple_fsm simple_fsm_inst
(	
	.sys_clk	(sys_clk)	,
	.sys_rst_n	(sys_rst_n),
	.pi_money	(pi_money),
	.po_cola    (po_cola)
);

endmodule

以上是tb文件的代码

RTL视图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VUE基础知识九 ElementUI项目

ElementUI官网 一 项目 最终完成的效果&#xff1a; 切换上边的不同按钮&#xff0c;下方显示不同的表格数据 在src/components下新建不同业务组件的文件夹 1.1 搭建项目 使用脚手架搭建项目后&#xff0c;引入ElementUI&#xff08;搭建、引入ElementUI步骤在第七节里已…

如何让网页APP化 渐进式Web应用(PWA)

前言 大家上网应该发现有的网页说可以安装对应应用&#xff0c;结果这个应用好像就是个web&#xff0c;不像是应用&#xff0c;因为这里采用了PWA相关技术。 PWA&#xff0c;全称为渐进式Web应用&#xff08;Progressive Web Apps&#xff09;&#xff0c;是一种可以提供类似…

索引使用规则1——最左前缀法则

这篇文章主要介绍索引的使用规则——最左前缀法则&#xff0c;关于索引的效率&#xff0c;可以查看上一篇文章索引的有效性 最左前缀法则&#xff1a;索引使用了复合索引&#xff0c;也就是联合索引&#xff0c;使用一个索引名称索引了好几个字段。在这类索引中需要遵守最左前…

华为云是什么

公有云配置 区域&#xff1a; 同一个区域中的云主机是可以互相连通的&#xff0c;不通区域云主机是不能使用内部网络互相通信的 选择离自己比较近的区域&#xff0c;可以减少网络延时卡顿 华为云yum仓库&#xff1a;https://repo.huaweicloud.com/rockylinux/ 首先完成跳板机的…

文件拖放到窗体事件

参考代码 参考链接 拖放文件到窗体_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV13d4y1h7vr/?spm_id_from333.999.0.0&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年2月27日

idea 创建打包 android App

1、使用 idea 创建 android 工程 2、 配置构建 sdk 3、配置 gradle a、进入 gradle 官网&#xff0c;选择 install &#xff08;默认是最新版本&#xff09; b、选择包管理安装&#xff0c;手动安装选择下面一个即可 c、安装 sdk 并通过 sdk 安装 gradle 安装 sdk&#xff1a…

【linux进程信号(一)】信号的概念以及产生信号的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程信号 1. 前言2. 信号的基…

MySQL集群 双主架构(配置命令)

CSDN 成就一亿技术人&#xff01; 今天刚开学第一天给大家分享一期&#xff1a;MySQL集群双主的配置需求和命令 CSDN 成就一亿技术人&#xff01; 神秘泣男子主页&#xff1a;作者首页 <———— MySQL专栏 &#xff1a;MySQL数据库专栏<———— MySQL双主是一…

WEB服务器-Tomcat(黑马学习笔记)

简介 服务器概述 服务器硬件 ● 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务的设备。由于服务器需要响应服务请求&#xff0c;并进行处理&#xff0c;因此一般来说服务器应具备承担服务并且保障…

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

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

【wails】(4):使用wails做桌面应用开发,整合chatgpt-web项目做前端,进行本地开发,web端也可以连调,使用websocket实现

1&#xff0c;视频地址 【wails】&#xff08;4&#xff09;&#xff1a;使用wails做桌面应用开发&#xff0c;整合chatgpt-web项目做前端&#xff0c;进行本地开发&#xff0c;web端也可以连调&#xff0c;使用websocket实现 2&#xff0c;演示效果 启动先是报500 错误&#…

最新 WebStorm 2023.3.4 激活

Stage 1 : 官网下载 Stage 2 : 下载工具 Stage 3-1 : windows为例 Stage 3-2 : mac为例 常见问题 Stage 1 : 官网下载 先去官网下载 Thank you for downloading WebStorm! 我这里下载的是最新版本的2023.3.4&#xff0c;测试过2023最新版本以及2022版本以上的版本没问题…

成为一名优秀的项目经理需要哪些技能?

成为一名优秀的项目管理专员需要具备以下技能和素质&#xff1a; 1. **沟通能力**&#xff1a;项目管理专员需要与团队成员、利益相关者、客户等进行有效沟通。这包括书面和口头沟通&#xff0c;确保信息的准确传达和理解。 2. **组织能力**&#xff1a;管理项目涉及许多任务和…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

[面试]我们常说的负载均衡是什么东西?

什么是负载均衡 如果用户量很多, 服务器的流量也随之增大, 此时出现两个问题, 软件性能下降 容易出现单点故障 为了解决这些问题, 引入了集群化架构, 也就是把一个软件同时部署在多个服务器上 集群化架构出现的问题 架构改变后又出现了两个问题 如何将请求均匀的发送到多…

Vue源码系列讲解——生命周期篇【七】(模板编译阶段)

目录 1. 前言 2. 模板编译阶段分析 2.1 两种$mount方法对比 2.2 完整版的vm.$mount方法分析 3. 总结 1. 前言 前几篇文章中我们介绍了生命周期的初始化阶段&#xff0c;我们知道&#xff0c;在初始化阶段各项工作做完之后调用了vm.$mount方法&#xff0c;该方法的调用标志…

一款.NET下 WPF UI框架介绍

WPF开源的UI框架有很多,如HandyControl、MahApps.Metro、Xceed Extended WPF Toolkit™、Modern UI for WPF (MUI)、Layui-WPF、MaterialDesignInXamlToolkit、等等,今天小编带大家认识一款比较常用的kaiyuanUI---WPF UI,这款ui框架美观现代化,用起来也超级方便, 界面展示…

论文阅读:《High-Resolution Image Synthesis with Latent Diffusion Models》

High-Resolution Image Synthesis with Latent Diffusion Models 论文链接 代码链接 What’s the problem addressed in the paper?(这篇文章究竟讲了什么问题&#xff1f;比方说一个算法&#xff0c;它的 input 和 output 是什么&#xff1f;问题的条件是什么) 这篇文章提…

Nginx的核心配置指令及调优

目录 Nginx 核心配置指令 一、Nginx配置文件详解 1、配置文件目录 2、配置文件结构 二、调优 1、在全局域进行的调优 1.1线程池指令 1.2 工作进程数指令 1.3工作进程优先级指令 1.4 工作进程 CPU 绑定指令 1.5 调试可打开的文件个数 1.6 调试文件大小指令 1.7 只运…
最新文章