如何设计最优化的状态机(有图版)

合集下载

第14章 状态机设计(state machine design)

第14章  状态机设计(state  machine  design)

第14章 状态机设计(State Machine Design)讲到VHDL设计而不讲state machine,感觉上就是不太完整,我们先来看看什么是state machine,它应该是一种流程控制的设计,在有限的状态中,根据判别信号的逻辑值决定后面要进入哪一个状态,这样的讲法似乎有些抽象,我们先来看看下面的状态图。

图14-1所显示的是一个十字路口的红绿灯控制设计,在一开始时信号Reset 会被设为逻辑’0’,此时state machine会在Reset状态,一直等到信号Reset变成逻辑’1’时,state machine才会进入真正的控制状态。

在之后的三个状态中,我们各定义了一个counter,当进入Red或是之后的Green及Yellow状态时,相对的counter值即会开始递减。

当counter值递减到0时,state machine即会改变到下一个状态。

当然state machine的执行就是依照这种方式进行,但是其中仍有许多的细节是设计者所要注意的,在接下来的章节中,我们会依据实际的例子来介绍state machine的设计方式。

14-1State Machine的建立在这一节我们所举的例子是一个类似检查密码的设计,在一般办公室的门口都会有门禁管制,进门前须先输入一组四个数字的密码,当密码确认无误后门才会打开,除此之外还有更改密码的功用。

我们先来看看其状态图。

在图14-2中一共有四个状态,一开始会维持在idle状态,当要更改或是第一次输入密码时,需要按下一个特殊的“密码更改”按键,此时InpinN信号会变成逻辑’0’的状态,状态机即会进入LoadPin的状态,接着再输入四个数字的密码,密码输入完毕按下“输入”按键,状态机即回到原先的idle状态。

在另一方面,当处于平时状态,有人进入门口要输入密码前,他也必需要按下另一个特殊键“密码输入”,表示之后输入的数字是待验证的密码,此时InData 信号会变成逻辑’0’,于是状态机进入InPin的状态。

电子设计自动化第五章 状态机

电子设计自动化第五章   状态机
第五章 有限状态机设计
精品课件
第一节 一般状态机的设计
一、 1、数据类型定义语句
精品课件
精品课件
子类型SUBTYPE的语句格式如下: SUBTYPE 子类型名 IS 基本数据类型 RANGE 约
束范围; SUBTYPE digits IS INTEGER RANGE 0 to 9 ;
精品课件
2、枚举类型 枚举类型是用文字符号来表示一组实际
三、在主控组合进程中定义状态的转移
在进程中插入CASE WHEN 语句, 因为空闲语句是状态的起点和终点,因 此,作为WHEN 之后的第一项,再列出状 态转移到其他状态的条件,即可写出状 态转移的流程。
精品课件
第二节 Moore型有限状态机的设计
从状态机的信号输出方式分:Moore型和 Mealy型两类状态机。从输出时序上看,前者属于 同步输出状态机,后者属于异步输出状态机。 Mealy型状态机的输出是当前状态和所有输入信号的 函数,它的输出是在输入变化后立即发生的,不依 赖时钟的同步。 Moore型状态机的输出仅为当前状态的函数,这类状 态机在输入发生变化后还必须等待时钟的到来,时 钟使状态发生变化时才导致输出的变化所以比 Mealy型状态机要多等待一个时钟周期。
精品课件
(2)主控时序进程 完成当前状态向下一个的跃迁,
但不负责进入下一状态的具体状态取值, 只是在时钟沿到来时,当前状态进入下 一个状态。
在这一部分也可完成同步或异步清零 或置位方面的控制信号。
精品课件
(3)主控组合进程
根据外部输入的控制信号(包括来自 状态机的外部信号和来自状态机内部其 它非主控的组合或时序进程的信号)、 或(和)当前状态的状态值确定下一状 态的取向,以及确定对外输出或对内部 其它组合或时序进程输出控制信号的内 容。

UML图详解(八)——状态机(状态图和活动图)

UML图详解(八)——状态机(状态图和活动图)

UML图详解(⼋)——状态机(状态图和活动图)⼀、概念状态图和活动图是状态机的两种表现形式。

利⽤状态机可以精确地描述对象的⾏为。

从对象的初始状态起,开始响应事件并执⾏某些动作,这些事件引起状态的转换;对象在新状态下⼜开始响应事件和执⾏动作,如此连续进⾏直到终结状态。

⼆、状态图状态图(State Diagram)=状态(State)+迁移(Transition)⼀个状态图描述⼀个状态机。

状态图表现从⼀个状态到另⼀个状态的控制流。

<1>状态图的语法1>除了状态中的初始状态(实⼼圆)和终⽌状态(⽜眼形状),其它状态⽤⼀个圆⾓矩形表⽰转换表⽰状态间可能的路径,⽤箭头表⽰事件/动作写在由它们触发引起的转换上<2>状态2>状态⼀般是给定类对象中的⼀组属性值,在其所在的上下⽂中应该唯⼀,但可以匿名。

在对系统建模时,我们可以只关⼼那些明显影响对象⾏为的属性以及由他们表达的对象状态,⽽不⽤理睬那些于对象⾏为⽆关的状态。

表⽰⽅式:状态由⼀个带圆⾓的矩形表⽰。

应⽤标签标⽰状态的内部活动。

语法:标签/活动表达式UML提供的标签:1. entry:当进⼊⼀个状态的时候被⾃动触发,该活动在状态中其它任何活动之前被⾃动触发。

2. do:当状态处于激活时执⾏do活动,do活动在进⼊活动之后执⾏,并且⼀直运⾏到它本⾝完成为⽌。

3. exit:当离开⼀个状态的时候被⾃动触发,该活动在该状态结束之前、所有其它活动都完成后被触发。

状态可以嵌套状态图,此时状态称为组成状态,否则为简单状态。

⼊⼝事件表⽰⼀个⼊⼝的动作序列,它在进⼊状态时执⾏。

⼊⼝事件的动作是原⼦的,并且先于⼈和内部活动或转换。

出⼝事件表⽰⼀个出⼝的动作序列,它在退出状态时执⾏。

出⼝事件也是原⼦的,它跟在所有的内部活动之后,但是先于所有的出⼝转换。

1. 简单状态(Simple State)2. 复合状态(Composite State)复合状态可以有多组状态图,每组⽤虚线分割开来。

第7章状态机图

第7章状态机图

7 第章状态图
7.6 并发状态
7.6.1 并发状态的含义 7.6.2 同步状态
7.6.1 并发状态的含义
并发状态:在一个状态机或一个复合状态中,如果同时存 在相互可以独立的几组状态,则称这几组状态是并发状态 (concurrent state)。
例如:
7.6.2 同步状态
同步状态:指多个并发区间中的状态在转换过程彼此存在 同步关系,一个区间中的一个转换需要等到另一个区间中的 某个转换发生后才能进行。 例如:
• 初始状态表示一个状态机从此结点开始,但事物不会此状态 停留,会立即转换到初始状态所连接的第下一个状态。
• 初始状态只有输出,没有输入。
7.7.2 分叉与汇合
• 分叉 (fork) :指将一个转换分成两个或多个转换,用来描述 需要并发的状态。
• 汇合 (join) :指将从并发状态来的转换合并形成一个转换, 用来描述多个并发状态的控制同步。
7.8.5 状态机与其他的图比较
1)状态机图用于事物状态及其变换的建模;活动图用于过 程流程建模 。 2)状态结点表示事物一个状态,活动结点表示一个过程中 的一个动作。 3)交互图用于多个对象为完成一个任务的交互关系,状态 机图表示一个事物所处的状态,及其变换。 4)可以用状态机描述一个交互过程中所处的状态及其转换, 用活动图描述一个交互执行的流程。
3 交互状态建模:一个交互描述为完成某项功能,系统中 若干个对象相互交互消息的过程。一个交互过程也会存在 多种状态,及其状态的转换,可以用状态机图来描述交互 状态的转换。
订货交互的状态机:
7.8.2 状态机的用途
4 构件状态建模:构件封装了多个类,构件在其生命周期 中也会存在不同状态,可以用状态机对构件的状态及其转 换进行建模。

6.状态机图(状态+活动)

6.状态机图(状态+活动)

课堂练习(电梯系统的状态图)
带有复杂转换的状态图
补充说明(状态图)
适用情况:
适用于描述跨越多个用例的单个对象行为 不适合描述多个对象之间的行为协作 故需与其他技术(类图、对象图)结合使用
注意事项:
不要花费大量时间和精力为系统中的每个类都 画对应的状态图 开发人员只关心关键类的行为,只需为这些类 建立状态图,帮助理解所研究的问题
方法二:
先对活动进行全局的分析 再将活动分配各具体的对象
建议:
两种方法各有利弊 根据个人习惯和具体情况而定
分类(1.简单活动图)
分类(1.简单活动图)
分类(2.标识泳道的活动图)
泳道(SwimLane):用于有效 地标识每个活动的实施者。 表示方法:
用一条垂直的线将活动分开 每个泳道都有一个唯一的名称 每个活动节点、分支必须只属 于一个泳道;而转换,分叉与 汇合是可以跨泳道的。
状态机图(State machine Diagram)
状态(state):
定义对象在其生命周期中的一种条件或状况 比如:满足某些条件、执行某些活动或等待某些事件 例子:灯的开闭、人的梦醒、学生的课上与课下
理解
状态的存在:对象在任何时刻都会处于某种状态之中 状态的转移:事件使对象从一个状态转向另一个状态 当面对所检测到的事件或所接收到的消息时,对象所 处的状态不同,做出的反应也不同
细化状态内的活动与转换
状态图(航班预订3)
使用复合状态
课堂练习
绘制电脑工作时的状态转换图
课堂练习
绘制手机工作时的状态转换图
课堂练习(电梯系统的状态图)
电梯开始处于空闲状态(idle),当有人按下按钮要求使用电梯时 (事件is required发生),电梯进入运行状态(run)。如果电梯的 当前楼层比想要的楼层高时(监护条件[currentFloor>desiredFloor] 成立),电梯进入下降状态(moving down);反之,如果电梯的当 前楼层比想要的楼层低时(监护条件[currentFloor<desiredFloor] 成立),电梯进入上升状态(moving up);如果电梯的当前楼层与 想要的楼层相同时(监护条件[currentFloor=desiredFloor]成立), 电梯门打开(door open)。在电梯上升或下降期间,每经过一个楼 层就判断监护条件[currentFloor=desiredFloor]是否成立,若不成 立,继续移动,若成立,就进入停止状态(stop),15秒后,电梯门 自动打开(door open),2分钟后,电梯门自动关上(door close), 如果有更多的电梯使用要求,进入运行状态(run),反之,则进入 空闲状态(idle)。

第6讲 有限状态机的设计.

第6讲 有限状态机的设计.


Mealy状态机:

为什么要用状态机
比较下列表达的区别:

C语言中a=0; a=1; a=0; VHDL中a<=0; a<=1; a<=0; C语言中x=a; a=b; b=x; VHDL中x<=a; a<=b; b<=x;
为什么要用状态机
关键在于实现顺序 状态机克服了纯硬件数字系统顺序方式控制不灵 活的缺点 状态机容易构成性能良好的同步时序逻辑模块 在高速运算和控制方面有其巨大的优势 由于状态机的结构相对简单,设计方案相对固定 状态机的VHDL表述丰富多样、有其独到的好处 高可靠性
TYPE my_logic IS
SIGNAL s1 : my_logic; s1 <='Z';
如何设计状态机

一种新的语法:类型定义语句
SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围; SUBTYPE digits IS INTEGER RANGE 0 to 9 ;
利用类型定义语句定义状态类型:
COM:PROCESS(current_state, state_Inputs) --主控组合进程 BEGIN CASE current_state IS WHEN s0 => comb_outputs<= 5; IF state_inputs = "00" THEN next_state<=s0; ELSE next_state<=s1; END IF; WHEN s1 => comb_outputs<= 8; IF state_inputs = "00" THEN next_state<=s1; ELSE next_state<=s2; END IF; WHEN s2 => comb_outputs<= 12; IF state_inputs = "11" THEN next_state <= s0; ELSE next_state <= s3; END IF; WHEN s3 => comb_outputs <= 14; IF state_inputs = "11" THEN next_state <= s3; ELSE next_state <= s0; END IF; END case; END PROCESS; END behv;

uml建模状态机图PPT专业课件

uml建模状态机图PPT专业课件
4
例:CD播放器
5
一、状态(state)
2、状态的表示 状态名称 入口动作 出口动作 内部转换 内部活动 可推迟事件
状态示例
6
动作(Action)
可执行的原子计算。 不可中断,其执行时间可忽略不计。
两种特殊动作:
进入动作(entry action):进入某状态时执 行的动作,用“entry/要执行的动作”表示。
34
10.3 建立状态机图
1.寻找主要的状态 飞机票有以下4种状态:无预订、部分预订、
预订完、预订关闭。 (1)在刚确定飞行计划时,显然没有任何预订,
且在顾客预订机票之前都将处于“无预订”状态。 (2)对于订座而言,有“部分预订”和“预订完”
两种状态。 (3)当航班快要起飞时,要“预订关闭”。
35
11
(3)简单状态
组成: 状态名 进入/退出动作 内部转移----不导致状态改变的转换,不会
执行entry和exit动作。 内部活动 延迟事件----延迟到下一状态处理的事件。
12
EnterPassword
entry/ set echo * exit/ set echo normal event keypress/ handle character event help/ display help event save/ defer do/ get password
Maintaining The train stop
22
(2)内部转换
有一个源状态但没有目标状态,转换后的状态 仍是它本身。
23
(3)自动转换
在没有外部事件的作用下,对象执行了某些活 动后,自然而然地完成的转换。

数字电路设计课件第六讲状态机设计

数字电路设计课件第六讲状态机设计

comb_outputs : OUT INTEGER RANGE 0 TO 15 );
END s_machine;
ARCHITECTURE behv OF s_machine IS
TYPE FSM_ST IS (s0, s1, s2, s3);
SIGNAL current_state, next_state: FSM_ST;
END PROCESS; END behv;
2020/7/16
7.1.3 一般有限状态机的设计 4. 辅助进程
图7-2 例7-1状态机的工作时序图
2020/7/16
2020/7/16
VHDL综合器易于优化 易构成性能良好的时序逻辑模块 结构模式简单、层次分明、易读易懂、易排错 利用同步时序和全局时钟线可实现高速FSM 运行模式类似于CPU,易于进行顺序控制 高可靠性,非法状态易控制
clk reset state_inputs
PROCESS REG
FSM: s_machineቤተ መጻሕፍቲ ባይዱ
current_state next_state
PROCESS COM
comb_outputs
2020/7/16
图7-1 一般状态机结构框图工作示意图
7.1.3 一般有限状态机的设计
3. 主控组合进程
控组合进程的任务是根据外部输入的控制信号(包括 来自状态机外部的信号和来自状态机内部其它非主控的 组合或时序进程的信号),或(和)当前状态的状态值 确定下一状态(next_state)的取向,即next_state的 取值内容,以及确定对外输出或对内部其它组合或时序 进程输出控制信号的内容。
2020/7/16
7.1.3 一般有限状态机的设计 4. 辅助进程
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何设计最优化的状态机前言:数字电路通常分为组合逻辑电路和时序电路,组合逻辑电路outputs = F(current inputs)时序电路outputs = F(current inputs,past inputs)有限状态机就是时序电路的数学抽象,一个有限状态机系统包括inputs ,outputs, states .状态机分为同步状态机(synchronous)和异步状态机(asynchronous),异步状态机由于输出信号不稳定,所以不详细讨论,对绝大多数设计来说,用的最广泛的是同步状态机。

下面主要讨论了同步状态机的设计。

一.状态机的基础知识1.1. moore状态机和mealy状态机的区别:2.1.1moore状态机输出只依赖于及其的当前状态,与输入信号无关。

这是moore状态机的优点。

下面是moore状态机的模型:moore状态机比较容易用数学的方式来分析,因此被更广泛的用在代数状态机理论中(algebraic FSM theory)。

Mealy状态机输出依赖于机器现在的状态和输入的值,如果输入改变,输出可以在一个时钟周期中将发生了改变。

其模型如下:图的说明:state memory :保存现在的状态(current state s(t) )state transistion function :根据现态和输入x(t),s(t+1)来决定下一个状态。

Output function :根据s(t)和x(t)来决定最后的输出。

Mealy 状态机通常可以有更少的状态变量,因此在工程领域有更为广阔的应用,状态变量越少,则所需的存储单元就越少。

下面用简单的实例来具体说明两者编程的区别,和综合出来的结果的不同:Mealy状态机的简单例子:1.源程序:demo_process:process(clk,reset)beginif(reset = '1')thenstate <= s0;out1 <= (others=>'0');elsif rising_edge(clk) thencase state iswhen s0 => if(in1 = '1')thenstate <= s1;out1 <= "1000";end if;when s1 => if(in1 = '0')thenstate <= s2;out1 <= "1001";end if;when s2 => if(in1 = '1')thenstate <= s3;out1 <= "1100";end if;when s3 => if(in1 = '0')thenstate <= s0;out1 <= "1111";end if;when others =>null;end case;end if;end process;modelsim仿真结果:synplify综合结果:1.模块表示图:在这张综合图上可以明显得看出红线即input所参与决定的是状态的产生和输出。

而且输出out1为了防止输出的波形不好(因为通过组合电路输出的波形不稳定),所以加了一个触发器。

2.门级综合结果(仅作参考):其中状态机模块编码采用两个触发器,见下图:所以如果在语言中没有对状态进行编码,那么综合器会自动将编码方式设为顺序编码。

Moore状态机的简单例子:1源程序:demo_process:process(clk,reset)beginif(reset = '1')thenstate <= s0;out1 <= (others=>'0');elsif rising_edge(clk) thencase state iswhen s0 => if(in1 = '1')thenstate <= s1;end if;out1 <= "1000";when s1 => if(in1 = '0')thenstate <= s2;end if;out1 <= "1001";when s2 => if(in1 = '1')thenstate <= s3;end if;out1 <= "1100";when s3 => if(in1 = '0')thenstate <= s0;end if;out1 <= "1111";when others =>null;end case;end if;end process;2.Modelsim仿真结果:3.ynplfy综合结果:1.原理图模块:从图中可以看出红线即输入仅仅参与决定了状态机产生状态。

2.门级综合结果:(仅作参考)从以上两种状态机的例子可以看出,同一周期对同样的输入,两种仿真结果一致,只是在综合上有所区别。

1.2 创建状态图或者状态转换表。

设计者通常可以用两种工具来简化状态表的建立过程:状态图和转换表。

状态图提供了一种图形化的,易理解的对FSM操作的描述,但限制于相对较小的设计,当设计太复杂而无法创建状态图时,应使用转换表。

2.2.1 创建状态图状态图应该从复位状态开始,每一个圈表示一个状态,状态图是有向图,圈内部应标上状态的名称和此状态的输出赋值,两个状态之间的转变通过一个有向线段表示,转变条件应标志在有向线段上面,该条件与时钟的上升沿同步。

下面是一个简单的图例:1.2.2 创建转换表状态图是帮助理解状态之间关系的有效一种方法,然而对于许多状态的大电路,状态会变得凌乱,极难画出可用的形式。

这时,普遍采用一种称作转换表的文本描述方式,创建转换表的方法与状态图相同,不同的是转换列在一个表中。

上图的转换表如下:注意:在写状态图或者转换表的时候要坚持互斥原则,离开任何节点的线段上的逻辑表达式必须成对互斥,即没有在离开同一节点不同线段上的两个表达式同时为真的情况,如果两个这样的表达式同时是逻辑1,那么状态机就进入了两个不同的次状态,这是不容许的。

互斥测试的是离开同一节点的两个表达式的逻辑and必须为逻辑0。

1.4 状态的编码方式在vhdl原码中是否对状态机编码作出规定并不影响状态机的功能,综合工具提供状态优化器,他可以在综合过程中确定状态编码。

状态编码主要有5种编码方式:1.顺序编码。

2.格雷码编码。

3.单热编码(one-hot)。

4.随机编码。

5.自动编码(面积最小化)。

状态机在传统上是按二进制编码的。

然而采用Gray编码,相邻状态可减少瞬变的次数。

有时不可能在所有状态中使用Gray编码,则应在状态矢量中增加触发器的数量以减少开关的次数。

另一种方法是使用one-hot编码,虽然该编码使用的触发器较多,即可减少组合逻辑的使用,在带多个输出且每个输出是几个状态的函数的状态机中更是如此。

根据状态机的形式,设计者可在Gray、One-hot或二进制间进行选择。

现在就详细说一下one-hot 状态机:1.ne-hot编码:s0 = “0001” ; s1 = “0010”; s2 = “0100”; s3 = “1000”;每一个状态用掉一个触发器,状态数等于触发器的数目。

这就意味着触发器数目增加,而状态译码组合电路被优化掉了。

对于寄存器资源丰富的xilinx器件来说,是非常适合的。

2.one-hot 状态机的好处:现在的FPGA每一个逻辑块中都包含了一个和多个触发器,对于仅需要触发器的one-hot编码解码来说,提供了很好的条件。

下面列举了一些用one-hot 设计的好处:a)对寄存器资源丰富xilinx fpga 来说更易于适配和布线。

b)one-hot状态机是典型的相当快速的状态机。

他的速度与状态的个数没有任何关系,仅仅决定于状态变迁到一个特殊状态的这种转换的数量(instead depend only on thenumber of transitions into a particular state)。

c)不用担心你会在发现最佳的状态机编码方式。

因为其他设计的状态机如果在加入一些状态或者改变其他一些什么的话,那就可能不再最优了。

One-hot 编码方式在所有状态机中是最佳的,最优的。

d)one-hot 状态机很容易设计。

状态图能够直接被画成原理图或者被直接用vhdl语言写出来,而不用编码成状态表。

e)修改起来简单明了。

增加和删掉一些状态或者改变一些敏感量等式能被综合器很容易的执行,而不会影响余下的状态机。

f)很容易从vhdl 或者verilog 综合。

g)比其他一些高性能的状态机没有任何的布线面积的浪费。

h)能够用静态时序分析的方法很容易的找出危险的不合理的状态机转换路径。

3.举例说明:type STA TE_TYPE is (s0, s1, s2, s3);attribute ENUM_ENCODING: STRING;attribute ENUM_ENCODING of STA TE_TYPE: type is "0001 0010 0100 1000"; signal CS, NS: STA TE_TYPE;begin-- build the state flopsSYNC_PROC: process (clk, reset)beginif (reset='1') thenCS <= s0;elsif rising_edge(clk) thenCS <= NS;end if;end process;-- state machineCOMB_PROC: process (CS,in1)begincase CS iswhen s0 =>out1 <= (others=>'0');if(in1 = '1')thenNS <= s1;out1 <= "1000";end if ;when s1 => if(in1 = '0')thenNS <= s2;out1 <= "1001";end if;when s2 => if(in1 = '1')thenNS <= s3;out1 <= "1100";end if;when s3 => if(in1 = '0')thenNS <= s0;out1 <= "1111";end if;when others =>null;end case;end process;在s0状态里,有一个细节,out1 <= (others=>'0');这句话在if外面,和在if里面的out1 <= "1000";这句话不会自相矛盾。

相关文档
最新文档