当前位置: 首页 > news >正文

VHDL语言基础-状态机设计-ASM图法状态机设计

目录

有限状态机的描述方法:

ASM图:

状态转移图:

状态转移列表:

MDS图:

ASM图法状态机设计:

ASM图的组成:

状态框:

判断框:

条件框:

状态框与条件框的区别:

状态单元:

用计数器实现ASM图:

ASM图的状态分配:

状态转换表:

由状态转换表推导触发器的驱动方程:

举例:

有限状态机的分类:

从信号输出方式上分:

Moore型有限状态机:

Mealy型有限状态机:

Moore型和Mealy型有限状态机的区别:

从状态机的结构上分:

单进程描述:

双进程状态机:

三进程状态机:

从表达方式上分:

符号化状态机:

符号化状态机——类型定义语句:

确定状态编码状态机:


有限状态机的描述方法:

ASM图:

ASM本质上是一个有限状态机,主要用于同步时序系统。

ASM精确地表示出状态转换的时间关系。

从形式上看,这种流程图类似于描述软件程序的流程图,但它能和实现它的硬件很好的对应起来。

状态转移图:

状态转移列表:

状态 \ 输入

a=‘1’

b=‘1’

default

S0

S1

S2

S1

S2

S0

S2

S0

MDS图:


ASM图法状态机设计:

ASM图的组成:

状态框:

用一个矩形框来表示一个状态。状态的名称写在左上角;状态的二进制编码写在右上角;操作内容写在矩形框内。在同步系统中,状态经历的时间至少是一个时钟周期,也可以是几个周期。

 

判断框:

用单入口双出口的菱形或单入口多出口的多边形符号表示。在菱形和多边形框内写检测条件,在分支出口处注明各分支所满足的条件。

判断框必须跟着状态框。判断框的执行与状态框在同一时钟周期内。

条件框:

用椭圆框表示。条件框一定是与判断框的一个转移分支相连接,仅当判断框中判断变量满足相应的转移条件时,才进行条件框中标明的操作和信号输出。

虽然条件框和状态框都能执行操作和输出信号,但二者有很大区别

状态框与条件框的区别:

状态单元:

状态单元由一个状态框或  条件框组成。状态单元的入口必须是状态框的入口,出口可以有几个,但必须指向状态框。

仅包含一个状态框,无判断框和条件框的ASM块是一个简单块。

每个状态单元表示一个时钟周期内系统所处的状态,在该状态下完成快内的若干操作。


用ASM图描述一个系统控制器时,实际上是描述了该控制器的硬件结构和时序工作过程,因此ASM图与硬件有很好的对应关系,ASM图的硬件实现有以下几种方法: 

用计数器实现ASM图

用多路选择器实现ASM图

每个状态一个触发器(定序型)

基于ROM法实现ASM图(微程序型)


用计数器实现ASM图:

ASM图的状态分配:

                                

 

N个状态变量可以描述2^n个状态。该ASM图中有3个状态,所以需要两个状态变量。设两个状态变量为Q2Q1,我们选用2个D触发器。用二进制计数序列依次表示状态。


状态转换表:

因为10和11状态与输入X无关,所以X值可作任意值处理。

表中01未指定状态,采用计数器实现,因此需考虑因偶然因素出现01状态时,应强迫其次态为00,所以一旦出现01状态后,经过一个时钟周期就可以自动回到有用状态循环。

现态

次态

输出

Q2

Q1

X

Q2n+1

Q1n+1

Z1

Z2

0

0

0

1

0

1

1

0

0

1

1

1

1

0

0

1

X

0

0

0

0

1

0

X

0

0

0

0

1

1

X

0

0

0

0


由状态转换表推导触发器的驱动方程:

对于复杂的ASM图和相应的状态表可用卡诺图对次态进行化简,得到简化的驱动方程。

ASM图除了可以得到状态表和驱动方程外,还可以得到输出方程


ASM图的硬件实现:

采用计数器法实现ASM图,一旦ASM图有很小的改动,就需要重新设计与次态相关的组合电路部分。此外,当系统的状态超过8个时,ASM图的硬件实现也很复杂。


举例:

要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支线,支线上装有传感器,当支线有车通过时,传感器输出信号CAR=1。正常的工作状态时干线亮绿灯,支线亮红灯;当CAR=1时,干线亮红灯,支线亮绿灯,并开始计时,START_TIEMR=1,当计时结束,即信号TIMED=1时,重新回到正常工作状态(干线亮绿灯,支线亮红灯)。


有限状态机的分类:

从信号输出方式上分:

        Mealy型状态机

        Moore型状态机

从结构上分:

        单进程状态机

        两进程状态机

        三进程状态机

从表达方式上分:

        符号化状态机

        确定状态编码状态机

                顺序编码状态机

                独热码状态机

                格雷码状态机


从信号输出方式上分:

Moore型有限状态机:

是指那些输出信号仅与当前状态有关的有限状态机,即可以把Moore型有限状态机的输出看成是当前状态的函数。

Moore型有限状态机框图:


Mealy型有限状态机:

是指那些输出信号不仅与当前状态有关,而且还与所有的输入信号有关的有限状态机,即可以把Mealy有限状态机的输出看作当前状态和所有输入信号的函数。可见,Mealy有限状态机要比Moore有限状态机复杂一些。

Mealy有限状态机框图:


Moore型和Mealy型有限状态机的区别:

Moore型有限状态机仅与当前状态有关,而与输入信号无关;Mealy型有限状态机不但与当前状态有关,而且还与状态机的输入信号有关。

采用何种有限状态机的判别条件:

Moore型有限状态机可能要比相应的Mealy型有限状态机需要更多的状态。

Moore型有限状态机的输出与当前的输入部分无关,因此当前输入产生的任何效果将会延迟到下一个时钟周期。可见,Moore型状态机的最大优点就是可以将输入部分和输出部分隔离开。

对于Mealy型有限状态机来说,由于它的输出是输入信号的函数,因此如果输入信号发生改变,那么输出可以在一个时钟周期内发生改变


从状态机的结构上分:

单进程描述:

它就是将状态机的三个逻辑单元(状态寄存器、下状态产生逻辑、输出逻辑)合并起来,采用一个进程描述。

适用于简单的设计;

对于复杂的状态机,可读性差,易出错,不利于EDA软件优化。

 单进程状态变量可以定义为变量类型,放在进程的说明部分;

一般在进程的开头写上时钟有效边沿的检测语句;

注意在这里进程敏感参数表中的car和timed可省去

rising_edge(clock)也可以写成clock’event and clock=‘1’;

条件涵盖不完整的if语句会产生寄存器;

这是将时序电路和组合电路混合的系统,有时会引入不必要的寄存器。如果将描述时序的部分放在具有边沿检测条件的if语句或wait语句的进程中,而将描述组合电路的语句放在普通的进程中,这样可以有效控制寄存器的引入。


双进程状态机:

 

双进程中状态变量要定义为SIGNAL类型,用于进程间信息的传递

可以在产生寄存器的进程中加上异步复位语句,用于确定初始状态

seq: PROCESS (clock)

BEGIN

        IF reset=‘1’ THEN pr_state <= G;

        IF(rising_edge(clock)) THEN

                pr_state <= next_state;

        END IF;

END PROCESS seq;

注意在组合进程中if语句要写完整if-else


三进程状态机:

 

 

op进程也可以用并行语句改写:用并行语句改写,不能再使用进程

描述状态寄存器的时序进程

描述下状态产生逻辑的组合进程

定义输出的组合逻辑进程

使用三进程描述状态机,可以达到很好的综合效果。


从表达方式上分:

符号化状态机:

所谓符号化状态机,就是在程序的说明部分使用TYPE语句定义枚举类型,其元素用状态机的状态名来定义。状态变量(如状态机的现态和次态)定义为变量或信号,并将状态变量的数据类型定义为含有既定状态元素的枚举类型。

在使用多进程时,为便于信息传递,要将状态变量定义为信号

前面的三种进程描述状态机的例子中,都是使用符号化状态机的表达方式。

符号化状态机——类型定义语句:

确定状态编码状态机:

 使用符号化定义的枚举类型,枚举类型文字元素的编码通常是自动设置的,综合器根据优化情况、优化控制的设置或设计者的特殊设定来确定各元素具体编码的二进制位数、数值及元素间编码的顺序。

也可以在程序中指明编码方式。

常用的编码方式:2进制编码、格雷码编码、One-hot编码


确定状态编码状态机——2进制编码:

状态机的每一个状态用二进制位来编码

例:实现4状态的状态机,其其二进制编码可为 状态1=00”状态2=01”状态3=10”状态4=11

需要的寄存器数量最少,有n个寄存器就可以对2^n个状态进行编码。

需要更多的外部辅助逻辑,并且速度较慢。

确定状态编码状态机——格雷码编码:

格雷码编码每次仅一个状态位的值发生变化

例:实现4状态的状态机,其格雷码编码可为 状态1=00”状态2=01”状态3=11”状态4=10

特点:触发器使用较少,速度较慢,不会产生两位同时翻转的情况。当状态位的输出被异步应用时,格雷码编码是有益的。

确定状态编码状态机——One-hot编码:

One hot的编码方案对每一个状态采用一个触发器,即4个状态的状态机需4个触发器。同一时间仅1个状态位处于有效电平(如逻辑“1”)

例:实现4状态的状态机,其one hot编码可为 状态1=0001”状态2=0010”状态3=0100”状态4=1000

特点:触发器使用较多,但逻辑简单,速度快


关于one-hotgray-codebinary编码使用说明:

Binarygray-code编码使用较少的触发器,较多的组合逻辑,而one-hot编码反之。由于CPLD更多的提供组合逻辑,而FPGA更多的提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码。

对于小型设计使用gray-codebinary编码更有效,而大型状态机使用one-hot编码更有效

相关文章:

VHDL语言基础-状态机设计-ASM图法状态机设计

目录 有限状态机的描述方法&#xff1a; ASM图&#xff1a; 状态转移图&#xff1a; 状态转移列表&#xff1a; MDS图&#xff1a; ASM图法状态机设计&#xff1a; ASM图的组成&#xff1a; 状态框&#xff1a; 判断框&#xff1a; 条件框&#xff1a; 状态框与条件框…...

Python文件的属性获取,重命名,目录的创建,显示和改变

1. 文件的属性获取 os.stat()函数可以获取文件的属性&#xff0c;该函数会返回一个和系统平台有关的stat_result对象&#xff0c; 具备一组可访问的属性&#xff0c;可以通过 stat_result.attribute 这样的格式来访问各个属性的值。 字 段描 述st_modeinode 保护模式st_inoin…...

好用的iPhone 数据恢复软件精选

随着 Apple 的 iTunes / iCloud 备份服务的兴起&#xff0c;我们总是假设这些信息在我们需要的时候可以随时访问。然而&#xff0c;事实是&#xff0c;意想不到的“不幸”发生了&#xff0c;比如 iOS 升级失败、忘记密码&#xff0c;或者更严重的情况&#xff0c;如进水或被盗。…...

Linux搭建redis集群6.x版本【超简单】

Linux搭建redis集群6.x版本【超简单】&#xff1a;&#xff1a;&#xff1a;&#xff1a;本文主要展示如何在一台服务器上搭建集群&#xff0c;核心思想就是复制实例&#xff0c;修改启动端口&#xff0c;实际上跟在几台服务器的操作都是一样的。一.安装redis wget http://dow…...

双重检查锁是如何避免缓存雪崩的,代码例子说明

双重检查锁是如何避免缓存雪崩的什么是缓存雪崩解决方案双重检查锁是如何工作的什么是缓存雪崩 缓存雪崩是指缓存同时失效&#xff0c;造成大量的缓存请求都请求到后端数据库&#xff0c;导致后端系统压力过大而瘫痪的情况。 解决方案 设置缓存的失效时间为随机值&#xff0…...

【成为架构师课程系列】架构设计中的核心思维方法

架构设计中的核心思维方法 目录 前言 #一、抽象思维 #二、分层思维 #三、分治思维 #四、演化思维 #五、如何培养架构设计思维...

Apollo/Nacos配置动态刷新原理及优劣

一. 配置方式 这里只说与Spring集成后的配置方式&#xff0c;这也是项目中主要使用的方式 Apollo 在属性上直接加value注解&#xff0c;这个属性就会随着配置的更改动态更新类实现ConfigChangeListener&#xff0c;在类中方法上ApolloConfigChangeListener注解&#xff0c;注解…...

docker的基本管理

Docker的概念云计算三层架构服务说明应用IAAS基础设施及服务硬件&#xff08;服务器、网络设置、防火墙等&#xff09;虚拟化网络虚拟化&#xff08;大二层&#xff09;例&#xff1a;openstackPAAS平台及服务环境例&#xff1a;数据库、 docker 、kubernetesSAAS应用及服务应用…...

2023年房地产投资-租金和IRR研究报告

第一章 概况 房地产投资租赁是指置业投资者在购买到物业后&#xff0c;首先对该物业进行适当整饰与装修&#xff0c;之后以出租人的身份&#xff0c;以口头协议或签订合同的形式&#xff0c;将房屋交付承租人占有、使用与收益&#xff0c;由承租人向出租人交付租金的行为。通过…...

2023-2-10刷题情况

青蛙过河 题目描述 小青蛙住在一条河边, 它想到河对岸的学校去学习。小青蛙打算经过河里 的石头跳到对岸。 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上。 不过, 每块石头有一个高度, 每次小青蛙从一块石头起跳, 这块石头的高度就 会下降 1 , 当石头…...

Python学习-----无序序列2.0(集合的创建、添加、删除以及运算)

目录 前言&#xff1a; 什么是集合 集合的三大特性 1.集合的创建 &#xff08;1&#xff09;直接创建 &#xff08;2&#xff09;强制转换 2.集合的添加 &#xff08;1&#xff09;add&#xff08;&#xff09;函数 &#xff08;2&#xff09;update() 函数 3.集合元…...

2023最详细的接口测试用例设计教程

一、接口测试流程 1、需求讨论 2、需求评审 3、场景设计 4、数据准备 5、测试执行 二、分析接口文档元素 1、接口名称 2、接口地址 3、支持格式 4、请求方式 5、请求参数&#xff08;参数名称、类型、是否必填、参数说明等&#xff09; 6、返回参数&#xff08;返回…...

【数据库】 数据库的理论基础详解

目录 一&#xff0c; 什么是数据库 二&#xff0c; 数据库管理系统(DBMS) 三&#xff0c;数据库与文件系统的区别 1&#xff0c;对比区别&#xff1a; 2&#xff0c;优缺点总结&#xff1a; 四&#xff0c;数据库的发展史 五&#xff0c;常见数据库 1&#xff0c; 关系型…...

Linux环境运行Maven 生成的hadoop jar包

运行命令&#xff1a; hadoop jar ./jar包名字 class对象路径 输入路径 输出路径 linux内部jar包测试 cd 到以下目录&#xff0c;创建以下文件夹 [rootreagan180 ~]# cd /opt/soft/hadoop313/share/hadoop/mapreduce/ 创建文件夹&#xff08;读取路径&#xff09; [roo…...

ThreadPoolExecutor原理解析

1. 工作原理1.1 流程图1.2 执行示意图从上图得知如果当前运行的线程数小于corePoolSize(核心线程数)&#xff0c;则会创建新线程作为核心线程来执行任务(注意&#xff0c;执行这一步需要获取全局锁)。如果运行的线程等于或多于corePoolSize&#xff0c;则将任务加入BlockingQue…...

谷粒学苑第二章前端框架-2.2前端框架开发过程

一、前端框架开发过程 第一步&#xff1a;添加路由 src/router模块用来管理路由。 第二步&#xff1a;点击某个路由&#xff0c;显示路由对应页面内容 component: () > import(/views/table/index), 表示路由对应的页面&#xff0c;是views/table/index.vue页面 第三步&a…...

权限管理实现的两种方式(详解)

登录的接口请求的三个内容&#xff1a;1. token2. 用户信息、角色信息3. 菜单信息第一种&#xff1a;基于角色Role的动态路由管理 (不推荐&#xff0c;但市场用的比较多)首先列出枚举每个角色对应几个路由&#xff0c;然后根据用户登录的角色遍历枚举出来的角色动态注册对应的路…...

【C++】智能指针思路解析和模拟实现

此篇文章就从以下几个方面出发&#xff0c;带你了解智能指针的方方面面1.为什么需要智能指针当我们开辟内存并使用的时候&#xff0c;我们的顺序应该是这样&#xff1a;开辟内存-》使用内存-》释放内存问题就出现在第三步&#xff0c;开辟好了&#xff0c;也使用了&#xff0c;…...

SpringCloud(18):Sentinel流控降级入门

Sentinel本地应用流控降级实现分为三步: 创建本地应用搭建本地Sentinel控制台本地应用接入本地Sentinel控制台1 本地应用创建 整体流程分析 创建springboot项目在项目的pom.xml文件中引入sentinel-core的依赖坐标创建TestController,定义使用限流规则运行测试具体流程 1.创…...

C++【多态】

文章目录1、多态的概念2、多态的定义及实现2-1、多态的构成条件2-2、虚函数2-3、虚函数的重写2-4 多态样例2-5、协变2-6、 析构函数与virtual2-7、函数重载、函数隐藏&#xff08;重定义&#xff09;与虚函数重写&#xff08;覆盖&#xff09;的对比2-8、override 和 final&…...

缓存预热、缓存雪崩、缓存击穿、缓存穿透,你真的了解吗?

缓存穿透、缓存击穿、缓存雪崩有什么区别&#xff0c;该如何解决&#xff1f; 1.缓存预热 1.1 问题描述 请求数量较高&#xff0c;大量的请求过来之后都需要去从缓存中获取数据&#xff0c;但是缓存中又没有&#xff0c;此时从数据库中查找数据然后将数据再存入缓存&#xf…...

【Java基础】018 -- 面向对象阶段项目上(拼图小游戏)

目录 拼图小游戏&#xff08;GUI&#xff09; 一、主界面分析 1、练习一&#xff1a;创建主界面1 2、练习二&#xff1a;创建主界面2&#xff08;JFrame&#xff09; 3、练习三&#xff1a;在游戏界面中添加菜单&#xff08;JMenuBar&#xff09; ①、菜单的制作 4、添加图片&a…...

【网络~】

网络一级目录二、socket套接字三、UDP数据报套接字四、TCP流套接字一级目录 1.局域网、广域网 2.IP地址是什么&#xff1f; IP地址是标识主机在网络上的地址 IP地址是如何组成的&#xff1f; 点分十进制&#xff0c;将32位分为四个部分&#xff0c;每个部分一个字节&#xff…...

手写JavaScript中的call、bind、apply方法

手写JavaScript中的call、bind、apply方法 call方法 call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。 function Product(name, price) {this.name name;this.price price; }function Food(name, price) {Product.call(this, name, price);t…...

JAVA练习46-将有序数组转换为二叉搜索树

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 2月10日练习内容 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目-…...

linux(centos7.6)docker

官方文档&#xff1a;https://docs.docker.com/engine/install/centos/1安装之前删除旧版本的docker2安装yum install-y yum-utils3配置yum源 不用官网的外国下载太慢 推荐阿里云yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.r…...

微信小程序滚动穿透问题

文章目录1、catchtouchmove"true"2、page-meta3、wx.setPageStyle做小程序的开发业务中&#xff0c;经常会使用弹窗&#xff0c;当弹窗里的内容过多时&#xff0c;要滚动查看&#xff0c;然后经常会遇到滚动弹窗&#xff0c;弹窗底下页面也跟着滚。解决思路&#xff…...

安全—06day

负载均衡反向代理下的webshell上传负载均衡负载均衡下webshell上传的四大难点难点一&#xff1a;需要在每一台节点的相同位置上传相同内容的webshell难点二&#xff1a;无法预测下一次请求是哪一台机器去执行难点三&#xff1a;当我们需要上传一些工具时&#xff0c;麻烦来了&a…...

PostgreSQL入门

PostgreSQL入门 简介 PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES&#xff0c; 版本 4.2为基础的对象关系型数据库管理系统&#xff08;ORDBMS&#xff09; 支持大部分SQL标准并且提供了许多现代特性 复杂查询外键触发器可更新视图事务完整性多版本并发控制 …...

自媒体人都在用的免费音效素材网站

视频剪辑、自媒体人必备的剪辑音效素材网站&#xff0c;免费下载&#xff0c;建议收藏&#xff01; 1、菜鸟图库 音效素材下载_mp3音效大全 - 菜鸟图库 菜鸟图库是一个综合性素材网站&#xff0c;站内涵盖设计、图片、办公、视频、音效等素材。其中音效素材就有上千首&#xf…...

政府网站建设 江苏省/百度新闻官网

Android的包文件APK分为两个部分&#xff1a;代码和资源&#xff0c;所以打包方面也分为资源打包和代码打包两个方面&#xff0c;这篇文章就来分析资源和代码的编译打包原理。 具体说来&#xff1a; 1.通过AAPT工具进行资源文件&#xff08;包括AndroidManifest.xml、布局文件、…...

衢州网站建设/微信营销

(点击图片 进入专题 ↑)“人活着总要为自己找点价值。”最近&#xff0c;郑州有位94岁的“煎饼奶奶”火了。因为每天半夜12点到次日凌晨5点在路边摆摊卖煎饼&#xff0c;老人被网友拍下后引起关注。很多网友认为老人生活困难&#xff0c;替她心酸&#xff0c;还有人指责儿女不孝…...

怎么做网站和艺龙对接/58同城黄页推广

本文作者&#xff1a;CODING 用户 - 廖石荣 持续集成的概念 持续集成(Continuous integration,简称 CI&#xff09;是一种软件开发实践&#xff0c;即团队开发成员经常集成他们的工作&#xff0c;通常每个成员每天至少集成一次&#xff0c;也就意味着每天可能会发生多次集成。每…...

河北省建设工程招标投标网站/网络推广网站电话

前端开发前端“前端”&#xff0c;“前端”和“前端”。 您过去可能已经看过或使用了上述所有方法&#xff0c;但是哪个正确&#xff1f; 让我们来看看&#xff01; wikipedia.org paulirish.com 网站&#xff1a;http&#xff1a;//paulirish.com“前端”约154个结果&…...

网站建设经营范围/谷歌网页版入口

更多实例例子 1移除字符串两侧的空格&#xff1a;$str " Hello World! ";echo "不使用 trim: " . $str;echo "";echo "使用 trim: " . trim($str);?>以上代码的 HTML 输出如下(请查看源代码)&#xff1a;不使用 trim: Hello Worl…...

男人与女人做视频网站/站长工具seo推广 站长工具查询

一、下载安装文件百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1SerJrXnVS774lcHY58KIww提取码&#xff1a;txyr二、安装openoffice1、将下载的安装文件上传到linux你指定的目录下&#xff0c;这个没有固定的目录&#xff0c;你放在那里的可以。如图&#xff…...