【FPGA入门】第四篇、有限状态机

news2024/11/27 9:58:03

目录

第一部分、一个关于有限状态机的例子

第二部分、学会有限状态机的准备知识

1、什么是有限状态机?

2、为什么需要状态机?

3、什么是竞争冒险?

3.1、什么情况下会发生竞争冒险?

3.2、为什么组合逻辑电路会产生竞争和冒险?

3.3、那什么是竞争?什么是冒险?

3.4、怎样降低竞争冒险?

4、关于状态编码问题

第三部分、二段式状态机的编写

第四部分、仿真效果

第五部分、总结


第一部分、一个关于有限状态机的例子

        啥时候需要用到状态机,首先我们来看一个例子。有一个自动饮料售货机,里面的货物3元一件,每次投币只能投1元。

        由数电的知识,我们将这个过程转换为状态转移图,如下:

        接着问题就是,如何用verilog把这个售货机买东西的这个程序给设计出来???

第二部分、学会有限状态机的准备知识

1、什么是有限状态机?

        有限状态机(Finite State Meachine,FSM)简称状态机。我的理解是:它是去描述一个过程,也就是完成某一件事必须有几个步骤,只有完成这几个步骤才能到达终点,这个终点也是起点,是一个闭环的过程,经过几次状态跳转后总会回到起点。

2、为什么需要状态机?

        因为FPGA内部的Verilog HDL 的语句块都是并行执行的, 当我们希望执行按照顺序的方式进行时,引入状态机就可以很好的实现顺序执行。

3、什么是竞争冒险?

        在学会状态机怎么写之前,首先你要了解一个模电的基本常识,那就是竞争与冒险。

        3.1、什么情况下会发生竞争冒险?

        竞争和冒险主要发生在组合逻辑电路中。

        3.2、为什么组合逻辑电路会产生竞争和冒险?

        因为每个逻辑单元都会存在延迟问题,这可能和器件的制作工艺,材料有关系,我们设计时不可能保证信号经过每个逻辑器件的时间都是一致的,因次当两个信号再次汇聚时,总有一个先,一个后。

        3.3、那什么是竞争?什么是冒险?

        上面说到了,两个信号在电路的某一点汇聚时,顺序有限有后。

        那我们假设现在有一个与门,输入为a,b,输出为c。当前状态下 a = 0,b = 1,c = 0。此刻,我同时对a,b输入信号进行取反,这是 a = 1 ,b = 0;若a = 1的信号比b = 0的信号先到与门,那么c就会有那么一瞬间c = 1,进而就有一个尖峰脉冲。  

        如下图:

        3.4、怎样降低竞争冒险?

        想降低竞争冒险那就应避免使用组合逻辑,多使用时序逻辑。那为啥时序逻辑就能降低竞争冒险现象呢?

       首先FPGA内部时钟一般是50M,1/50M = 20ns,也就是一个周期是20ns,而竞争冒险一般只有几个纳秒。

       而clk 的上升沿/下降沿采集到毛刺的概率就非常低。正常情况下,clk的沿都采集不到该毛刺,如下图:

4、关于状态编码问题

        独热编码注意:多少个状态,对应的state状态一定有多少位;其次在modelsim一定要以二进制的方式检查state独热码的位数)。即 One-Hot 编码,一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,(3个状态3位,4个状态4位)每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。

        优点:每一个独热码的数据位只有一个为1,其它全为0,因此独热码的变化只需要一位转变即可。

        因此使用独热码可以提高运行速度。在高速系统中,无论个数均推荐使用独热码。

第三部分、二段式状态机的编写

        了解了什么是有限状态机,以及竞争冒险,那么采用的两个时序逻辑 always 块,不仅可以描述清楚状态转移和数据输出,又能消除组合逻辑带来的毛刺。

        售货机示例代码:

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2023 All rights reserved
// -----------------------------------------------------------------------------
// Author : BigFartPeach
// CSDN   : 大屁桃
// E-mail : 2624507313@qq.com
// File   : fsm.v
// Create : 2023-04-12 17:01:02
// -----------------------------------------------------------------------------
module fsm(
	input wire clk,
	input wire rst_n,
	input wire pi_money,
	output reg po_drink
	);
//状态名称定义(独热码)
parameter IDLE = 3'b001;
parameter ONE  = 3'b010;
parameter TWO  = 3'b100; 

reg [2:0] state;
//状态转移
always @(posedge clk or negedge rst_n) begin
	if (rst_n == 1'b0) begin
		state <= IDLE;
	end
	else begin
		case(state)
		IDLE:
			if(pi_money == 1'b1)begin//疑问,随机数来代替pi_money,如果一致为1怎么解决?
				state <= ONE; 
			end

		ONE:
			if(pi_money == 1'b1)begin
				state <= TWO;
			end

		TWO:
			if(pi_money == 1'b1)begin
				state <= IDLE;
			end
		default:
			state <= IDLE;
		endcase
	end
end


//状态输出(多个输出,用多个always语句块)
always @(posedge clk or negedge rst_n) begin
	if (rst_n == 1'b0) begin
		po_drink <= 1'b0;
	end
	else if (state == TWO && pi_money == 1'b1) begin
		po_drink <= 1'b1;
	end
	else begin
		po_drink <= 1'b0;
	end
end

endmodule

第四部分、仿真效果

        仿真结果如下图,符合设计逻辑。

第五部分、总结

        本章内容参考了以下资料:首先是这篇博客:http://t.csdn.cn/F3QAK;其次是V3学院的培训课程和指导手册。

        最后,希望我的总结对你有帮助😀😁,看到这里了,要不点个赞,意思一下?👍

        

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

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

相关文章

HBase入门(一)

第1章 HBase简介 1.1 HBase定义 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。 1.2 HBase数据模型 逻辑上&#xff0c;HBase的数据模型同关系型数据库很类似&#xff0c;数据存储在一张表中&#xff0c;有行有列。但从HBase的底层物理存储结构&#xff08;…

【C语言复习】第四篇、有关C语言数据类型的知识

目录 第一部分、前言 第二部分、初识数据类型 1、C语言为啥要这么多的数据类型&#xff1f; 2、表格中所占内存的大小是如何计算得到的&#xff1f; 2.1、计算机的内数据存储单位 2.2、关键字sizeof的使用说明&#xff08;具体后面会更详细的解释&#xff09; 3、为什么…

【Python 随练】求最大公约数和最小公倍数

题目&#xff1a; 输入两个正整数 m 和 n&#xff0c;求其最大公约数和最小公倍数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个常见的数学问题&#xff1a;求两个正整数的最大公约数和最小公倍数。我们将提供问题的解析&#xff0c;并给出一个完整的代码示例…

【新星计划Linux】——Linux介绍与了解Linux与Windows系统区别

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.Linux系统 1.Linux系统与Windows系统的区别 &#xff08;1&#xff09;性…

【JavaScript】ES6新特性(4)

14. Proxy 代理 Proxy 可以对目标对象的读取、函数调用等操作进行拦截&#xff0c;然后进行操作处理 它不直接操作对象&#xff0c;而是像代理模式&#xff0c;通过对象的代理对象进行操作&#xff0c;在进行这些操作时&#xff0c;可以添加一些需要的额外操作 14.1 Object.d…

2023年DAMA-CDGA/CDGP数据治理工程师认证这里报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

追梅西的少年

* * * 原创&#xff1a;刘教链 * * * 号外&#xff1a;今天在“刘教链Pro”发表了头条《鼠头和鸭脖——中心化验真的困境》&#xff0c;以及次条《内参&#xff1a;美SEC执法主管表示&#xff0c;DeFi是纯粹的欺诈&#xff01;&#xff1f;&#xff1f;》&#xff0c;欢迎关注…

云安全技术(六)之云架构模型

云架构模型 1.1 舍伍德业务应用安全架构(SABSA) 舍伍德业务应用安全架构(Sherwood Applied Business Security Architecture&#xff0c;SABSA)的官方网站是 。SABSA提供了一组组件&#xff0c;这些组件可部分或全部用作任何系统的安全架构方www.sabsa.org法。如下&#xff1a…

【Flutter】Flutter中如何获取子类Widget并调用它的方法

文章目录 一、前言二、理解 Flutter 中的 Widget三、如何在 Flutter 中获取子类 Widget1. 使用 GlobalKey2. 使用 context.findAncestorWidgetOfExactType 四、如何调用子类 Widget 的方法五、如何在 Flutter 中传递数据六、总结 一、前言 如果你想深入学习 Flutter&#xff0…

如何打造优秀Web3产品

近日&#xff0c;我们采访了Mysten Labs的联合创始人兼首席执行官Evan Cheng&#xff0c;探讨了Web3技术对消费者的价值、Web3行业应该如何更好地自我诠释&#xff0c;以及它对产品开发的影响。 您曾谈到Web3作为一种所有权实验&#xff0c;这种新技术可能会改变消费者的行为。…

Can’t connect to MySql server on ‘localhost’(10038)

一般是一下几个原因&#xff1a; 1、MySQL服务没有启动 2、用户没有权限使用远程连接 3、linux中防火墙中没有配置MySQL端口&#xff08;3306&#xff09; 使用命令service mysqld status 或者service mysql status 命令来查看mysql的启动状态 启动MySQL命令&#xff1a; …

±0.1℃精度、超低功耗的高精度数字模拟混合信号温度传感芯片

温度芯片感温原理基于CMOS半导体PN节温度与带隙电压的特性关系&#xff0c;经过小信号放大、模数转换数字校准补偿后&#xff0c;数字总线输出&#xff0c;具有精度高、一致性好、测温快、功耗低、可编程配置灵活、寿命长等优点。 温度芯片内置16-bit ADC&#xff0c;分辨率0.…

用代码生撸qsort函数来实现冒泡排序

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造…

Windows 系统彻底卸载 SQL Server 通用方法

Windows 系统彻底卸载 SQL Server 通用方法 无论什么时候&#xff0c;SQL Server 的安装和卸载都是一件让我们头疼的事情。因为不管是 SQL Server 还是 MySQL 的数据库&#xff0c;当我们在使用数据库时因为未知原因出现问题&#xff0c;想要卸载重装时&#xff0c;如果数据库…

Jetson Xavier NX 备份与烧录固态系统

目录 1 需要的硬件 2 需要安装在ubuntu上的软件 2.1 安装gparted 2.2 安装nvidia官方烧录包 2.2.1 下载 2.2.2 配置 3 备份系统 4 烧入系统 1 需要的硬件 像是 nx&#xff0c;nx附带的固态硬盘&#xff0c;显示器 这些就赘述了 一个ubuntu实体机(虚拟机听说…

ansible-roles模块

roles用于层次性&#xff0c;结构化地组织playbook&#xff0c;roles能够根据层次型结构自动装载变量文件&#xff0c;tasks以及handlers等。要使用只要载playbook中使用include指令引入即可。 &#xff08;roles就是通过分别将变量&#xff0c;文件&#xff0c;任务&#xff…

u盘中毒文件夹数据丢失怎么恢复?这里有4个恢复方案

您是否曾经遇到过U盘中毒的情况&#xff1f;连累到文件夹内的数据文件消失了&#xff0c;如果丢失的是重要数据&#xff0c;这或许会对我们工作或学习带来了极大的困扰。为了解决您的困扰&#xff0c;下面将根据不同情况给予不同的U盘中毒数据恢复方案&#xff0c;帮助您尽快找…

小红书各行业流量分析:普通人怎么有效使用小红书?

随着互联网的发展&#xff0c;越来越多的人开始利用自媒体平台赚钱。小红书是近年来兴起的一种新型自媒体平台&#xff0c;也是国内最大的海外购物分享平台之一。随着小红书用户的不断增加&#xff0c;小红书的流量趋势也在发生着变化。那么&#xff0c;在各行业的流量趋势中&a…

驱动开发:文件微过滤驱动入门

MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的&#xff0c;传统文件过滤驱动相对来说较为复杂&#xff0c;且接口不清晰并不符合快速开发的需求&#xff0c;为了解决复杂的开发问题&#xff0c;微过滤驱动就此诞生&#xff0c;微过滤驱动在编写时更简单&#xff0c;…

XV-440-10TVB-1-50伊顿触摸屏EATON

​ XV-440-10TVB-1-50伊顿触摸屏EATON XV-440-10TVB-1-50伊顿触摸屏EATON ESD与dcs是完全分离的。DCS主要用于过程工业参数指标的动态控制。在正常情况下&#xff0c;DCS动态监控着生产过程的连续运行&#xff0c;保证能生产出符合要求的优良产品。而ESD则是对于一些关键的工艺…