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-hot、gray-code、binary编码使用说明:
Binary、gray-code编码使用较少的触发器,较多的组合逻辑,而one-hot编码反之。由于CPLD更多的提供组合逻辑,而FPGA更多的提供触发器资源,所以CPLD多使用gray-code,而FPGA多使用one-hot编码。
对于小型设计使用gray-code和binary编码更有效,而大型状态机使用one-hot编码更有效

相关文章:
VHDL语言基础-状态机设计-ASM图法状态机设计
目录 有限状态机的描述方法: ASM图: 状态转移图: 状态转移列表: MDS图: ASM图法状态机设计: ASM图的组成: 状态框: 判断框: 条件框: 状态框与条件框…...
Python文件的属性获取,重命名,目录的创建,显示和改变
1. 文件的属性获取 os.stat()函数可以获取文件的属性,该函数会返回一个和系统平台有关的stat_result对象, 具备一组可访问的属性,可以通过 stat_result.attribute 这样的格式来访问各个属性的值。 字 段描 述st_modeinode 保护模式st_inoin…...
好用的iPhone 数据恢复软件精选
随着 Apple 的 iTunes / iCloud 备份服务的兴起,我们总是假设这些信息在我们需要的时候可以随时访问。然而,事实是,意想不到的“不幸”发生了,比如 iOS 升级失败、忘记密码,或者更严重的情况,如进水或被盗。…...
Linux搭建redis集群6.x版本【超简单】
Linux搭建redis集群6.x版本【超简单】::::本文主要展示如何在一台服务器上搭建集群,核心思想就是复制实例,修改启动端口,实际上跟在几台服务器的操作都是一样的。一.安装redis wget http://dow…...
双重检查锁是如何避免缓存雪崩的,代码例子说明
双重检查锁是如何避免缓存雪崩的什么是缓存雪崩解决方案双重检查锁是如何工作的什么是缓存雪崩 缓存雪崩是指缓存同时失效,造成大量的缓存请求都请求到后端数据库,导致后端系统压力过大而瘫痪的情况。 解决方案 设置缓存的失效时间为随机值࿰…...
【成为架构师课程系列】架构设计中的核心思维方法
架构设计中的核心思维方法 目录 前言 #一、抽象思维 #二、分层思维 #三、分治思维 #四、演化思维 #五、如何培养架构设计思维...
Apollo/Nacos配置动态刷新原理及优劣
一. 配置方式 这里只说与Spring集成后的配置方式,这也是项目中主要使用的方式 Apollo 在属性上直接加value注解,这个属性就会随着配置的更改动态更新类实现ConfigChangeListener,在类中方法上ApolloConfigChangeListener注解,注解…...
docker的基本管理
Docker的概念云计算三层架构服务说明应用IAAS基础设施及服务硬件(服务器、网络设置、防火墙等)虚拟化网络虚拟化(大二层)例:openstackPAAS平台及服务环境例:数据库、 docker 、kubernetesSAAS应用及服务应用…...
2023年房地产投资-租金和IRR研究报告
第一章 概况 房地产投资租赁是指置业投资者在购买到物业后,首先对该物业进行适当整饰与装修,之后以出租人的身份,以口头协议或签订合同的形式,将房屋交付承租人占有、使用与收益,由承租人向出租人交付租金的行为。通过…...
2023-2-10刷题情况
青蛙过河 题目描述 小青蛙住在一条河边, 它想到河对岸的学校去学习。小青蛙打算经过河里 的石头跳到对岸。 河里的石头排成了一条直线, 小青蛙每次跳跃必须落在一块石头或者岸上。 不过, 每块石头有一个高度, 每次小青蛙从一块石头起跳, 这块石头的高度就 会下降 1 , 当石头…...
Python学习-----无序序列2.0(集合的创建、添加、删除以及运算)
目录 前言: 什么是集合 集合的三大特性 1.集合的创建 (1)直接创建 (2)强制转换 2.集合的添加 (1)add()函数 (2)update() 函数 3.集合元…...
2023最详细的接口测试用例设计教程
一、接口测试流程 1、需求讨论 2、需求评审 3、场景设计 4、数据准备 5、测试执行 二、分析接口文档元素 1、接口名称 2、接口地址 3、支持格式 4、请求方式 5、请求参数(参数名称、类型、是否必填、参数说明等) 6、返回参数(返回…...
【数据库】 数据库的理论基础详解
目录 一, 什么是数据库 二, 数据库管理系统(DBMS) 三,数据库与文件系统的区别 1,对比区别: 2,优缺点总结: 四,数据库的发展史 五,常见数据库 1, 关系型…...
Linux环境运行Maven 生成的hadoop jar包
运行命令: hadoop jar ./jar包名字 class对象路径 输入路径 输出路径 linux内部jar包测试 cd 到以下目录,创建以下文件夹 [rootreagan180 ~]# cd /opt/soft/hadoop313/share/hadoop/mapreduce/ 创建文件夹(读取路径) [roo…...
ThreadPoolExecutor原理解析
1. 工作原理1.1 流程图1.2 执行示意图从上图得知如果当前运行的线程数小于corePoolSize(核心线程数),则会创建新线程作为核心线程来执行任务(注意,执行这一步需要获取全局锁)。如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQue…...
谷粒学苑第二章前端框架-2.2前端框架开发过程
一、前端框架开发过程 第一步:添加路由 src/router模块用来管理路由。 第二步:点击某个路由,显示路由对应页面内容 component: () > import(/views/table/index), 表示路由对应的页面,是views/table/index.vue页面 第三步&a…...
权限管理实现的两种方式(详解)
登录的接口请求的三个内容:1. token2. 用户信息、角色信息3. 菜单信息第一种:基于角色Role的动态路由管理 (不推荐,但市场用的比较多)首先列出枚举每个角色对应几个路由,然后根据用户登录的角色遍历枚举出来的角色动态注册对应的路…...
【C++】智能指针思路解析和模拟实现
此篇文章就从以下几个方面出发,带你了解智能指针的方方面面1.为什么需要智能指针当我们开辟内存并使用的时候,我们的顺序应该是这样:开辟内存-》使用内存-》释放内存问题就出现在第三步,开辟好了,也使用了,…...
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、函数重载、函数隐藏(重定义)与虚函数重写(覆盖)的对比2-8、override 和 final&…...
动感软膜天花技术白皮书:从异形设计到商业照明的实战解析
动感软膜天花技术白皮书:从异形设计到商业照明的实战解析动感软膜天花的科技内核与市场演进当人们走进现代商业空间,头顶那片既能模拟蓝天白云软膜天花效果,又能实现动态光影变幻的顶面系统,正是动感软膜天花技术的具象化呈现。这…...
互联网大厂 Java 求职面试技巧揭秘
互联网大厂 Java 求职面试技巧揭秘 在当今互联网大厂求职面试中,技术与场景的交汇点常常成为面试官考察的重点。本文将通过一位搞笑的程序员燕双非与严肃的面试官的对话,展示 Java 技术栈下的面试问题,并深入解答其中的技术要点。第一轮面试 …...
移动SoC设计演进:从骁龙600/400系列看芯片战略与体验竞争
1. 从一场发布会看移动芯片的十年演进2015年2月,巴塞罗那世界移动通信大会前夕,高通的一则新闻稿在业内激起了不小的涟漪。他们宣布了全新的骁龙600和400系列移动平台,其中最引人注目的,是首次将当时ARM最新的64位Cortex-A72核心引…...
企业微信消息发送踩坑实录:.NET Core下处理AccessToken过期与消息安全的最佳实践
企业微信消息发送实战:.NET Core中的AccessToken管理与消息安全策略 当企业微信API集成到生产环境时,开发者常会遇到两个看似简单却暗藏玄机的问题:AccessToken突然失效导致消息发送失败,以及敏感信息传输时的安全风险。本文将分享…...
别再复制粘贴了!手把手教你封装一个可复用的Qt文本编辑器核心组件类
从零封装高复用Qt文本编辑器核心类:工程化实践指南 在Qt开发中,文本编辑器是最常见的功能需求之一。许多开发者习惯将所有逻辑堆砌在MainWindow类中,导致代码臃肿、难以维护和复用。本文将带你从工程化角度重构文本编辑器,将其核心…...
工程师视角:最低成本脱碳路径与气候解决方案的工程化思维
1. 项目概述:一封关于气候与经济的公开信最近在EE Times上读到一封写给埃隆马斯克的公开信,作者格伦温瑞布提出了一些关于气候变化和联邦预算赤字的想法,挺有意思的。这封信的核心不是空谈环保理念,而是从一个工程师和务实主义者的…...
win10打印机不能共享报0x0000011b/0x00000709修复工具合集分享 ,亲测解决Windows打印机共享报错问题
先说说我的情况。公司大概十几个人,两台共享打印机,一台接在Win10的台式机上,一台接在Win11的笔记本上。本来用着一直正常,去年开始,陆陆续续有同事反映连不上打印机。 最常见的报错就是0x00000709,还有0x…...
工业控制系统安全实践:基于ISA-62443-3-3标准的OT/IT融合指南
1. 项目概述:当工业安全遇上新标准在工业自动化领域摸爬滚打了十几年,我见过太多因为安全标准“两张皮”而引发的头疼事。一边是负责生产线的工控工程师,他们的核心信条是“稳定压倒一切”,任何可能影响PLC运行周期、导致电机意外…...
Claude长文档推理能力跃迁全记录(2024–2026技术演进图谱)
更多请点击: https://intelliparadigm.com 第一章:Claude 2026长文档推理能力的定义与边界 Claude 2026 的长文档推理能力指其在单次上下文窗口内(最大支持 2,000,000 tokens)对跨章节、多模态混合结构化文本(含嵌入表…...
模函数激活:挑战ReLU的极致简洁方案,为CV与TinyML带来性能突破
1. 项目概述:为什么我们需要重新审视激活函数?在深度学习的工具箱里,激活函数可能是最不起眼,却又最不可或缺的部件。它就像神经网络中的“开关”或“阀门”,决定了每个神经元是否被激活,以及激活的程度。长…...
