文档详情

数字系统设计:第五章 状态机(排3)

努力****83
实名认证
店铺
PPTX
797.16KB
约85页
文档ID:189303956
数字系统设计:第五章 状态机(排3)_第1页
1/85

第五章第五章 状态机设计状态机设计目录目录u时序电路的概念时序电路的概念u时序电路时序电路与状态机的与状态机的关系关系u电路电路的竞争与的竞争与冒险冒险u有限状态机有限状态机的描述的描述方法方法uASM图法状态机图法状态机设计设计u有限状态机的有限状态机的分类分类u状态机状态机VHDL实现举例实现举例时序电路的概念时序电路的概念u在组合电路中,任一时刻的稳定输出只取在组合电路中,任一时刻的稳定输出只取决于当时的输入,而在时序电路中任一时决于当时的输入,而在时序电路中任一时刻的稳定输出,不仅可能取决于当时的输刻的稳定输出,不仅可能取决于当时的输入,还取决于电路的原来的状态,即与过入,还取决于电路的原来的状态,即与过去的输入情况有关去的输入情况有关时序电路的概念时序电路的概念下面以一个简单的三位计数器为例,说明时序电路的结构下面以一个简单的三位计数器为例,说明时序电路的结构u设计分析设计分析3位计数器,由时钟上升沿触发,计数从位计数器,由时钟上升沿触发,计数从000111,到,到111后则重新回到后则重新回到000采用上升沿触发的采用上升沿触发的D触发器作为状态寄存器,触发器作为状态寄存器,D触发器的示意图和真值表如下:触发器的示意图和真值表如下:1DC1DCDCQ+Q+001110-0-1时序电路的概念时序电路的概念用用A、B、C分别表示分别表示3个位,则个位,则A+、B+、C+表表示示A、B、C的次态。

其真值表如下:的次态其真值表如下:ABCA+B+C+000001001010010011011100100101101110110111111000时序电路时序电路的概念的概念u三位计数器的结构三位计数器的结构根据上面的分析,根据上面的分析,3位位计数器需要用到计数器需要用到3个状态个状态寄存器A+、B+、C+是状态寄存器的输入;是状态寄存器的输入;A、B、C是状态寄存器的输出由此可根据时是状态寄存器的输出由此可根据时序电路的一般模型可画出序电路的一般模型可画出3位计数器的结构位计数器的结构时序电路的概念时序电路的概念u次态逻辑关系的推导次态逻辑关系的推导通过真值表,可以画出卡诺图如下:通过真值表,可以画出卡诺图如下:AB C00011110 0A+:100110101 AB C00011110 0B+:101101001 AB C00011110 0C+:111110000由卡诺图可导出次态逻辑方程:由卡诺图可导出次态逻辑方程:时序电路的概念时序电路的概念u电路图电路图根据次态电路的组成,可以得到次态逻辑的组根据次态电路的组成,可以得到次态逻辑的组成,从而可以得出成,从而可以得出3位计数器的详细电路:位计数器的详细电路:时序电路时序电路与状态机的关系与状态机的关系u状态机的本质状态机的本质状态机的本质就是对具有逻辑顺序或时序规律状态机的本质就是对具有逻辑顺序或时序规律事件的一种描述方法。

具有逻辑顺序和时序规事件的一种描述方法具有逻辑顺序和时序规律的事件都适合用状态机描述律的事件都适合用状态机描述同步时序逻辑电路符合状态机的一般特征,即同步时序逻辑电路符合状态机的一般特征,即具有逻辑顺序和时序规律,所以可以用状态机具有逻辑顺序和时序规律,所以可以用状态机描述时序电路时序电路与状态机的关系与状态机的关系u状态机的基本要素状态机的基本要素状态:也叫状态变量在逻辑设计中,使用状状态:也叫状态变量在逻辑设计中,使用状态划分逻辑顺序和时序规律态划分逻辑顺序和时序规律输出:输出指在某一个状态时特定发生的事件输出:输出指在某一个状态时特定发生的事件输入:指状态机中进入每个状态的条件,有的输入:指状态机中进入每个状态的条件,有的状态机没有输入条件,其中的状态转移较为简状态机没有输入条件,其中的状态转移较为简单,有的状态机有输入条件,当某个输入条件单,有的状态机有输入条件,当某个输入条件存在时才能转移到相应的状态存在时才能转移到相应的状态时序电路时序电路与状态机的关系与状态机的关系u日常生活中的状态机日常生活中的状态机通过状态机的方式,通过状态机的方式,我们可以清晰地描述我们可以清晰地描述一个学生的在校生活一个学生的在校生活方式。

方式时序电路时序电路与状态机的关系与状态机的关系u描述时序电路的状态机的组成描述时序电路的状态机的组成组合逻辑组合逻辑组合逻辑组合逻辑又可分为次态逻辑和输出逻辑两个部分又可分为次态逻辑和输出逻辑两个部分其中其中:次态逻辑的功能是用来确定有限状态机的下:次态逻辑的功能是用来确定有限状态机的下一一个状态个状态;输出逻辑是用来确定有限状态机的输出输出逻辑是用来确定有限状态机的输出存储存储逻辑逻辑寄存器寄存器逻辑的功能:用来存储有限状态机的内部逻辑的功能:用来存储有限状态机的内部状状态电路的竞争与冒险电路的竞争与冒险u竞争与冒险竞争与冒险所谓竞争与冒险,就是在组合电路中,信号经所谓竞争与冒险,就是在组合电路中,信号经不同途径传输后,达到电路中某一汇合点的时不同途径传输后,达到电路中某一汇合点的时间有先有后,这种现象成为竞争由于竞争而间有先有后,这种现象成为竞争由于竞争而是电路输出发生瞬间错误的现象,称为冒险是电路输出发生瞬间错误的现象,称为冒险在时序逻辑电路中,产生次态的电路和输出电在时序逻辑电路中,产生次态的电路和输出电路是组合逻辑电路组合逻辑电路存在竞争与路是组合逻辑电路组合逻辑电路存在竞争与冒险,可能导致时序系统进入不正确的状态。

冒险,可能导致时序系统进入不正确的状态使用同步时序逻辑电路可以克服次态逻辑存在使用同步时序逻辑电路可以克服次态逻辑存在竞争与冒险的问题竞争与冒险的问题电路电路的竞争与冒险的竞争与冒险u竞争与冒险的例子竞争与冒险的例子由于延迟时间的存在,由于延迟时间的存在,当信号当信号C经过经过多条路径多条路径传送后又重新会合传送后又重新会合到到U3上上,由于由于C-D路径路径上门上门的的级数与级数与C-E路径路径不同,导致不同,导致到达到达会合点会合点U3的的时间有先有后,从而产生瞬间的错误输出时间有先有后,从而产生瞬间的错误输出电路电路的竞争与冒险的竞争与冒险u上例中的时序如图上例中的时序如图毛刺电路电路的竞争与冒险的竞争与冒险u状态机克服竞争冒险的方法状态机克服竞争冒险的方法在次态产生组合逻辑电路中,可以通过时序逻辑在次态产生组合逻辑电路中,可以通过时序逻辑消除毛刺,从而克服竞争冒险消除毛刺,从而克服竞争冒险通过输出端时序同步的方法消除竞争与冒险(即通过输出端时序同步的方法消除竞争与冒险(即使用同步时序逻辑电路设计方法详细实例见后使用同步时序逻辑电路设计方法详细实例见后面介绍)面介绍)有限状态机的描述方法有限状态机的描述方法u状态转移图状态转移图u状态转移状态转移列表列表uMDSMDS图图uASMASM图(主要讲解)图(主要讲解)状态 输入a=1b=1defaultS0S1S2S1S2S0S2S0有限有限状态机状态机的描述方法的描述方法uASM图法设计状态机图法设计状态机ASM本质上是一个有限状态机,主要用于本质上是一个有限状态机,主要用于同步同步时序系统时序系统。

ASM精确地表示出精确地表示出状态转换的时间状态转换的时间关系从形式上看,这种流程图类似于描述软件程序从形式上看,这种流程图类似于描述软件程序的流程图,但它的流程图,但它能和实现它的硬件很好的对应能和实现它的硬件很好的对应起来起来本章主要学习使用本章主要学习使用ASM图法描述状态机图法描述状态机ASM图法状态机设计图法状态机设计ASM图组成图组成uASM图的组成图的组成状态框状态框用一个矩形框来表示一个状态状态的名称写在左用一个矩形框来表示一个状态状态的名称写在左上角;状态的二进制编码写在右上角;操作内容写上角;状态的二进制编码写在右上角;操作内容写在矩形框内在同步系统中,状态经历的时间至少在矩形框内在同步系统中,状态经历的时间至少是一个时钟周期,也可以是几个周期是一个时钟周期,也可以是几个周期寄存器操作或输出状态名 二进制码R 0C=1T1001ASM图法状态机设计图法状态机设计ASM图组成图组成uASM图的组成图的组成判断框判断框用单入口双出口的菱形或单入口多出口的多边形符用单入口双出口的菱形或单入口多出口的多边形符号表示在菱形和多边形框内写检测条件,在分支号表示在菱形和多边形框内写检测条件,在分支出口处注明各分支所满足的条件。

出口处注明各分支所满足的条件判断框必须跟着状态框判断框的执行与状态框在判断框必须跟着状态框判断框的执行与状态框在同一时钟周期内同一时钟周期内条件01引出分支 引出分支ASM图法状态机设计图法状态机设计ASM图组成图组成uASM图组成图组成条件框条件框用椭圆框表示条件框一定是与判断框的一个转移用椭圆框表示条件框一定是与判断框的一个转移分支相连接,仅当判断框中判断变量满足相应的转分支相连接,仅当判断框中判断变量满足相应的转移条件时,才进行条件框中标明的操作和信号输出移条件时,才进行条件框中标明的操作和信号输出虽然条件框和状态框都能执行操作和输出信号,但虽然条件框和状态框都能执行操作和输出信号,但二者有很大区别二者有很大区别寄存器操作或输出ASM图法状态机设计图法状态机设计ASM图组成图组成u状态框与条件框的区别状态框与条件框的区别ASM图法状态机设计图法状态机设计ASM图组成图组成ASM图法状态机设计图法状态机设计ASM图组成图组成状态框判断框条件框虚线框部分就是一个状态单元,条件虚线框部分就是一个状态单元,条件框中框中R0也在这个状态单元内执行也在这个状态单元内执行ASM图法状态机设计图法状态机设计ASM图组成图组成uASM图的组成图的组成状态单元状态单元状态单元由一个状态框或状态单元由一个状态框或 条件框组成。

状态单元的条件框组成状态单元的入口必须是状态框的入口,入口必须是状态框的入口,出口可以有几个,但必须出口可以有几个,但必须指向状态框指向状态框仅包含一个状态框,无判仅包含一个状态框,无判断框和条件框的断框和条件框的ASM块是块是一个简单块一个简单块每个状态单元表示一个时每个状态单元表示一个时钟周期内系统所处的状态,钟周期内系统所处的状态,在该状态下完成快内的若在该状态下完成快内的若干操作ASM图法状态机设计图法状态机设计硬件实现硬件实现u用用ASM图描述一个系统控制器时,实际上图描述一个系统控制器时,实际上是描述了该控制器的硬件结构和时序工作是描述了该控制器的硬件结构和时序工作过程,因此过程,因此ASM图与硬件有很好的对应关图与硬件有很好的对应关系,系,ASM图的硬件实现有以下几种方法:图的硬件实现有以下几种方法:用计数器实现用计数器实现ASM图图用多路选择器实现用多路选择器实现ASM图图每个状态一个触发器(定序型)每个状态一个触发器(定序型)基于基于ROM法实现法实现ASM图(微程序型)图(微程序型)uASM图的硬件实现一共有图的硬件实现一共有4中方法,这里中方法,这里我们重点介绍用计数器实现我们重点介绍用计数器实现ASM图的方法。

图的方法ASM图法状态机设计图法状态机设计硬件实现硬件实现uASM图的状态分配图的状态分配N个状态变量可以描个状态变量可以描述述2n个状态该个状态该ASM图中有图中有3个状态,个状态,所以需要两个状态所以需要两个状态变量设两个状态变量设两个状态变量为变量为Q2Q1,我们,我们选用选用2个个D触发器用二进制计数序列用二进制计数序列依次表示状态依次表示状态ASM图法状态机设计图法状态机设计硬件实现硬件实现u状态转换表状态转换表因为因为10和和11状态与输入状态与输入X无关,所以无关,所以X值可作任意值处值可作任意值处理表中表中01未指定状态,采用计数器实现,因此需考虑因未指定状态,采用计数器实现,因此需考虑因偶然因素出现偶然因素出现01状态时,应强迫其次态为状态时,应强迫其次态为00,所以一,所以一旦出现旦出现01状态后,经过一个时钟周期就可以自动回到状态后,经过一个时钟周期就可以自动回到有用状态循环有用状态循环现态现态次态次态输出输出Q2Q1XQ2n+1Q1n+1Z1Z20001011001111001X000010X000011X0000ASM图法状态机设计图法状态机设计硬件实现硬件实现u由状态转换表推导触发器的驱动方程由状态转换表推导触发器的驱动方程对于复杂的对于复杂的ASM图和相应的状态表可用图和相应的状态表可用卡诺图对次态进行化简,得到简化的驱卡诺图对次态进行化简,得到简化的驱动方程。

动方程ASM图除了可以得到状态表和驱动方程图除了可以得到状态表和驱动方程外,还可以得到输出方程外,还可以得到输出方程ASM图法状态机设计图法状态机设计硬件实现硬件实现uASM图的硬件实现图的硬件实现采用计数器法实现采用计数器法实现ASM图,图,一旦一旦ASM图有很小的改动,图有很小的改动,就需要重新设计与次态相关就需要重新设计与次态相关的组合电路部分此外,当的组合电路部分此外,当系统的状态超过系统的状态超过8个时,个时,ASM图的硬件实现也很复杂图的硬件实现也很复杂学习学习ASM图的硬件实现有助图的硬件实现有助于我们更好的理解后续的内于我们更好的理解后续的内容,下面我们将学习如何使容,下面我们将学习如何使用用VHDL实现实现ASM图ASM图法状态机设计图法状态机设计举例举例u举例举例 要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支要求设计一套交叉路口交通信号灯,该路口有一条交通干线与支线,支线上装有传感器,当支线有车通过时,传感器输出信号线,支线上装有传感器,当支线有车通过时,传感器输出信号CAR=1正常的工作状态时干线亮绿灯,支线亮红灯;当正常的工作状态时干线亮绿灯,支线亮红灯;当CAR=1时,干线亮红灯,支线亮绿灯,并开始计时,时,干线亮红灯,支线亮绿灯,并开始计时,START_TIEMR=1,当计时结束,即信号当计时结束,即信号TIMED=1时,重新回到正常工作状态(干线时,重新回到正常工作状态(干线亮绿灯,支线亮红灯)。

亮绿灯,支线亮红灯)ASM图法状态机设计图法状态机设计举例举例u设计步骤设计步骤根据设计要求,我们先确定系统的输入:根据设计要求,我们先确定系统的输入:clock,car,timed,res_n然后确定系统的输出:然后确定系统的输出:start_timer;major_green,minor_green.(枚举类型枚举类型)分析系统所有可能出现的状态:分析系统所有可能出现的状态:state=Gmajor_green=1,minor_green=0;state=Rmajor_green=0,minor_green=1;根据题意,画出根据题意,画出ASM图:图:有限状态机的分类有限状态机的分类u从信号输出方式上分从信号输出方式上分Mealy型状态机型状态机Moore型状态机型状态机u从结构上分从结构上分单进程状态机单进程状态机两进程状态机两进程状态机三进程状态机三进程状态机u从表达方式上分从表达方式上分符号化状态机符号化状态机确定状态确定状态编码状态机编码状态机顺序顺序编码状态机编码状态机独热码状态机独热码状态机格雷码状态机格雷码状态机从信号输出方式上分从信号输出方式上分uMoore型有限状态机型有限状态机是指那些输出信号仅与当前状态有关的有限状是指那些输出信号仅与当前状态有关的有限状态机,即可以把态机,即可以把Moore型有限状态机的输出看型有限状态机的输出看成是当前状态的函数。

成是当前状态的函数Moore型有限状态机框图:型有限状态机框图:从信号输出方式上分从信号输出方式上分uMealy型有限状态机型有限状态机是指那些输出信号不仅与当前状态有关,而且是指那些输出信号不仅与当前状态有关,而且还与所有的输入信号有关的有限状态机,即可还与所有的输入信号有关的有限状态机,即可以把以把Mealy有限状态机的输出看作当前状态和有限状态机的输出看作当前状态和所有输入信号的函数可见,所有输入信号的函数可见,Mealy有限状态有限状态机要比机要比Moore有限状态机复杂一些有限状态机复杂一些Mealy有限状态机框图:有限状态机框图:从信号输出方式上分从信号输出方式上分uMoore型和型和Mealy型有限状态机的区别:型有限状态机的区别:Moore型有限状态机仅与当前状态有关,而与型有限状态机仅与当前状态有关,而与输入信号无关;输入信号无关;Mealy型有限状态机不但与当前状态有关,而型有限状态机不但与当前状态有关,而且还与状态机的输入信号有关且还与状态机的输入信号有关从信号输出方式上分从信号输出方式上分u采用何种有限状态机的判别条件:采用何种有限状态机的判别条件:Moore型有限状态机可能要比相应的型有限状态机可能要比相应的Mealy型型有限状态机需要更多的状态。

有限状态机需要更多的状态Moore型有限状态机的输出与当前的输入部分型有限状态机的输出与当前的输入部分无关,因此当前输入产生的任何效果将会延迟无关,因此当前输入产生的任何效果将会延迟到下一个时钟周期到下一个时钟周期可见,可见,Moore型状态机的型状态机的最大优点就是可以将输入部分和输出部分隔离最大优点就是可以将输入部分和输出部分隔离开对于对于Mealy型有限状态机来说,由于它的输出型有限状态机来说,由于它的输出是输入信号的函数,因此如果输入信号发生改是输入信号的函数,因此如果输入信号发生改变,那么输出可以在一个时钟周期内发生改变变,那么输出可以在一个时钟周期内发生改变从状态机的结构上分从状态机的结构上分u单进程描述单进程描述它就是将状态机的三个逻辑单元(状态寄存器、它就是将状态机的三个逻辑单元(状态寄存器、下状态产生逻辑、输出逻辑)合并起来,采用下状态产生逻辑、输出逻辑)合并起来,采用一个进程描述一个进程描述适用于简单的设计;适用于简单的设计;对于复杂的状态机,可读性差,易出错,不利对于复杂的状态机,可读性差,易出错,不利于于EDA软件优化软件优化从状态机的结构上分从状态机的结构上分u单进程状态机单进程状态机下一状态组合逻辑寄存输出逻辑当前状态时序逻辑从状态机的结构上分从状态机的结构上分u单进程状态机单进程状态机LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY traffic IS PORT(clock,timed,car:IN std_ulogic;start_timer,major_green,minor_green:OUT std_ulogic);END ENTITY traffic;ARCHITECTURE asm1 OF traffic IS BEGIN PROCESS(clock,timed,car)TYPE state_type IS(G,R);-这里采用符号化状态机的描述方式这里采用符号化状态机的描述方式 VARIABLE state:state_type;-将状态定义为变量类型将状态定义为变量类型 BEGIN IF(rising_edge(clock)THEN CASE state IS WHEN G=major_green=1;minor_green=0;从状态机的结构上分从状态机的结构上分u单进程状态机单进程状态机 IF(car=1)THEN start_timer major_green=0;minor_green=1;IF(timed=1)THEN state:=G;END IF;END CASE;END IF END PROCESS;END ARCHITETURE;从状态机的结构上分从状态机的结构上分u单进程状态机单进程状态机单进程状态变量可以定义为变量类型,放在进程的说单进程状态变量可以定义为变量类型,放在进程的说明部分;明部分;一般在进程的开头写上时钟有效边沿的检测语句;一般在进程的开头写上时钟有效边沿的检测语句;注意在这里进程敏感参数表中的注意在这里进程敏感参数表中的car和和timed可省去可省去rising_edge(clock)也可以写成也可以写成clockevent and clock=1;条件涵盖不完整的条件涵盖不完整的if语句会产生寄存器;语句会产生寄存器;这是将时序电路和组合电路混合的系统,有时会引入这是将时序电路和组合电路混合的系统,有时会引入不必要的寄存器。

如果将描述时序的部分放在具有边不必要的寄存器如果将描述时序的部分放在具有边沿检测条件的沿检测条件的if语句或语句或wait语句的进程中,而将描述组语句的进程中,而将描述组合电路的语句放在普通的进程中,这样可以有效控制合电路的语句放在普通的进程中,这样可以有效控制寄存器的引入寄存器的引入从状态机的结构上分从状态机的结构上分u双进程双进程状态机状态机第二个进程(纯组合逻辑),描述状态转移条件的判断与输出第一个进程(同步时序),格式化地描述次态到现态的转移一般情况是组合逻辑输出,如果时序允许,尽量插入寄存器输出从状态机的结构上分从状态机的结构上分u双进程状态机双进程状态机LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY traffic IS PORT(clock,timed,car:IN std_ulogic;start_timer,major_green,minor_green:OUT std_ulogic);END ENTITY traffic;ARCHITECTURE asm2 OF traffic ISTYPE state_type IS(G,R);-利用枚举类型定义状态利用枚举类型定义状态SIGNAL pr_state,next_state:state_type;-将状态机的现态、次态定义为全局将状态机的现态、次态定义为全局信号,便于在进程间传递信号,便于在进程间传递信息信息BEGINseq:PROCESS(clock)BEGIN IF(rising_edge(clock)THEN pr_state=next_state;-次态是寄存器的输入次态是寄存器的输入 END IF;-条件涵盖不完整的条件涵盖不完整的if语句产生状态寄存器语句产生状态寄存器END PROCESS seq;-产生状态寄存器的进程产生状态寄存器的进程从状态机的结构上分从状态机的结构上分u双进程状态机双进程状态机com:PROCESS(pr_state,car,timed)BEGIN start_timer major_green=1;minor_green=0;IF(car=1)THEN start_timer=1;nx_state=R;ELSE nx_state major_green=0;minor_green=1;IF(timed=1)THEN nx_state=G;ELSE nx_state=R;END IF;END CASE;END PROCESS com;-产生次态和输出逻辑的进程产生次态和输出逻辑的进程END asm2;从状态机的结构上分从状态机的结构上分u双进程状态机:双进程状态机:双进程中状态变量要定义为双进程中状态变量要定义为SIGNAL类型,用于进类型,用于进程间信息的传递程间信息的传递可以在产生寄存器的进程中加上异步复位语句,可以在产生寄存器的进程中加上异步复位语句,用于确定初始状态用于确定初始状态seq:PROCESS(reset,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从状态机的结构上分从状态机的结构上分u三进程状态机三进程状态机第一个进程(同步时序)格式化描述次态寄存器迁移到现态寄存器第二个进程(状态转移组合逻辑),描述状态转移条件判断第三个进程(输出组合逻辑),一般使用同步时序逻辑同步输出。

从状态机的结构上分从状态机的结构上分u三进程状态机三进程状态机LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY traffic IS PORT(clock,timed,car:IN std_ulogic;start_timer,major_green,minor_green:OUT std_ulogic);END ENTITY traffic;ARCHITECTURE asm2 OF traffic ISTYPE state_type IS(G,R);-利用枚举类型定义状态利用枚举类型定义状态SIGNAL pr_state,next_state:state_type;-将状态机的现态、次态定义为全局信号,便于在进程间传递将状态机的现态、次态定义为全局信号,便于在进程间传递信息信息BEGINseq:PROCESS(clock)BEGIN IF(rising_edge(clock)THEN pr_state IF(car=1)THEN nx_state=R;ELSE nx_state IF(timed=1)THEN nx_state=G;ELSE nx_state=R;END IF;END CASE;END PROCESS ns;-产生次态逻辑进程产生次态逻辑进程从状态机的结构上分从状态机的结构上分u三进程状态机三进程状态机op:PROCESS(car,pr_state)Mealy State MachineBEGINstart_timer=0;IF(pr_state=G)THEN major_green=1;minor_green=0;IF(car=1)THEN start_timer=1;END IF;ELSE major_green=0;minor_green=1;END IF;END PROCESS op;-产生输出逻辑的进程产生输出逻辑的进程END asm3;从状态机的结构上分从状态机的结构上分uop进程也可以用并行语句改写:进程也可以用并行语句改写:start_timer=1 WHEN(pr_state=G AND car=1)ELSE 0;major_green=1WHEN(pr_state=G)ELSE 0;minor_green=1WHEN(pr_state=R)ELSE 0;u注意:注意:用并行语句改写,不能再使用进程用并行语句改写,不能再使用进程从状态机的结构上分从状态机的结构上分u三进程状态机三进程状态机描述状态寄存器的时序进程描述状态寄存器的时序进程描述下状态产生逻辑的组合进程描述下状态产生逻辑的组合进程定义输出的组合逻辑进程定义输出的组合逻辑进程使用三进程描述状态机,可以达到很好的综合使用三进程描述状态机,可以达到很好的综合效果。

效果从表达方式上分从表达方式上分u符号化状态机符号化状态机所谓符号化状态机,就是在程序的说明部分使所谓符号化状态机,就是在程序的说明部分使用用TYPE语句定义枚举类型,其元素用状态机语句定义枚举类型,其元素用状态机的状态名来定义状态变量(如状态机的现态的状态名来定义状态变量(如状态机的现态和次态)定义为变量或信号,并将状态变量的和次态)定义为变量或信号,并将状态变量的数据类型定义为含有既定状态元素的枚举类型数据类型定义为含有既定状态元素的枚举类型在使用多进程时,为便于信息传递,要将状态在使用多进程时,为便于信息传递,要将状态变量定义为信号变量定义为信号前面的三种进程描述状态机的例子中,都是使前面的三种进程描述状态机的例子中,都是使用符号化状态机的表达方式用符号化状态机的表达方式从表达方式上分从表达方式上分u符号化状态机符号化状态机类型类型定义语句定义语句TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数基本数据类型据类型;或或 TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义;例:例:TYPE st1 IS ARRAY(0 TO 15)OF STD_LOGIC;TYPE week IS(sun,mon,tue,wed,thu,fri,sat);符号化状态机应用符号化状态机应用TYPE m_state IS(st0,st1,st2,st3,st4,st5);SIGNAL present_state,next_state:m_state;从表达方式上分从表达方式上分u确定确定状态状态编码状态机编码状态机使用符号化定义的枚举类型,枚举类型文字元使用符号化定义的枚举类型,枚举类型文字元素的编码通常是自动设置的,综合器根据优化素的编码通常是自动设置的,综合器根据优化情况、优化控制的设置或设计者的特殊设定来情况、优化控制的设置或设计者的特殊设定来确定各元素具体编码的二进制位数、数值及元确定各元素具体编码的二进制位数、数值及元素间编码的顺序。

素间编码的顺序也可以在程序中指明编码方式也可以在程序中指明编码方式常用的编码方式常用的编码方式2进制编码进制编码格雷码编码格雷码编码One-hot编码编码从表达方式上分从表达方式上分u确定状态编码状态机确定状态编码状态机2进制编码进制编码状态机的每一个状态用二进制位来编码状态机的每一个状态用二进制位来编码例:实现例:实现4状态的状态机,其其二进制编码可状态的状态机,其其二进制编码可为为 状态状态1=“00”状态状态2=“01”状态状态3=“10”状态状态4=“11”需要的寄存器数量最少,有需要的寄存器数量最少,有n个寄存器就可以个寄存器就可以对对2n个状态进行编码个状态进行编码需要更多的外部辅助逻辑,并且速度较慢需要更多的外部辅助逻辑,并且速度较慢从表达方式上分从表达方式上分u确定状态编码状态机确定状态编码状态机格雷格雷码编码码编码格雷码编码每次仅一个状态位的值发生变化格雷码编码每次仅一个状态位的值发生变化例:实现例:实现4状态的状态机,其格雷码编码可为状态的状态机,其格雷码编码可为 状态状态1=“00”状态状态2=“01”状态状态3=“11”状状态态4=“10”特点:触发器使用较少,速度较慢,不会产生特点:触发器使用较少,速度较慢,不会产生两位同时翻转的情况。

当状态位的输出被异步两位同时翻转的情况当状态位的输出被异步应用时,格雷码编码是有益的应用时,格雷码编码是有益的从表达方式上分从表达方式上分u确定状态编码状态机确定状态编码状态机One-hot编码编码One hot的编码方案对每一个状态采用一个触的编码方案对每一个状态采用一个触发器,即发器,即4个状态的状态机需个状态的状态机需4个触发器同一个触发器同一时间仅时间仅1个状态位处于有效电平(如逻辑个状态位处于有效电平(如逻辑“1”)例:实现例:实现4状态的状态机,其状态的状态机,其one hot编码可为编码可为 状态状态1=“0001”状态状态2=“0010”状态状态3=“0100”状态状态4=“1000”特点:触发器使用较多,但逻辑简单,速度快特点:触发器使用较多,但逻辑简单,速度快从表达方式上分从表达方式上分u关于关于one-hot、gray-code、binary编码使编码使用说明用说明Binary、gray-code编码使用较少的触发器,编码使用较少的触发器,较多的组合逻辑,而较多的组合逻辑,而one-hot编码反之由于编码反之由于CPLD更多的提供组合逻辑,而更多的提供组合逻辑,而FPGA更多的更多的提供触发器资源,所以提供触发器资源,所以CPLD多使用多使用gray-code,而,而FPGA多使用多使用one-hot编码。

编码对于小型设计使用对于小型设计使用gray-code和和binary编码更编码更有效,而大型状态机使用有效,而大型状态机使用one-hot编码更有效编码更有效从表达方式上分从表达方式上分u程序中指明编码方式程序中指明编码方式ARCHITECTURE BEHAV OF BINARY ISTYPE STATE_TYPE IS(S1,S2,S3,S4,S5,S6,S7);ATTRIBUTE ENUM_ENCODING:STRING;ATTRIBUTE ENUM_ENCODING OF STATE_TYPE:TYPE IS 001 010 011 100 101 110 111;ARCHITECTURE BEHAV OF ONE_HOT ISTYPE STATE_TYPE IS(S1,S2,S3,S4,S5,S6,S7);ATTRIBUTE ENUM_ENCODING:STRING;ATTRIBUTE ENUM_ENCODING OF STATE_TYPE:TYPE IS 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;二进制编码One-hot编码状态机状态机VHDL实现实现举例举例Mealy型输出同步型输出同步uMealy型状态机型状态机使用使用VHDL语言实现以下语言实现以下ASM图描述的状态机图描述的状态机仅一个寄存器状态机状态机VHDL实现实现举例举例Mealy型输出同步型输出同步输出端无同步输出端无同步-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY simple_fsm ISPORT(a,b,d,clk,rst:IN BIT;x:OUT BIT);END simple_fsm;-ARCHITECTURE simple_fsm OF simple_fsm ISTYPE state IS(stateA,stateB);SIGNAL pr_state,nx_state:state;BEGIN-Lower section:-PROCESS(rst,clk)BEGIN IF(rst=1)THENpr_state=stateA;ELSIF(clkEVENT AND clk=1)THENpr_state x=a;IF(d=1)THEN nx_state=stateB;ELSE nx_state x=b;IF(d=1)THEN nx_state=stateA;ELSE nx_state=stateB;END IF;END CASE;END PROCESS;END simple_fsm;使用synplify综合后的RTL图状态机状态机VHDL实现实现举例举例Mealy型输出同步型输出同步输出端有同步输出端有同步-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY simple_fsm ISPORT(a,b,d,clk,rst:IN BIT;x:OUT BIT);END simple_fsm;-ARCHITECTURE simple_fsm OF simple_fsm ISTYPE state IS(stateA,stateB);SIGNAL pr_state,nx_state:state;SIGNAL temp:BIT:=0;BEGIN-Lower section:-PROCESS(rst,clk)BEGIN IF(rst=1)THENpr_state=stateA;ELSIF(clkEVENT AND clk=1)THENx=temp;pr_state temp=a;IF(d=1)THEN nx_state=stateB;ELSE nx_state temp=b;IF(d=1)THEN nx_state=stateA;ELSE nx_state=stateB;END IF;END CASE;END PROCESS;END simple_fsm;使用synplify综合后的RTL图多出一个输出寄存器状态机状态机VHDL实现实现举例举例Mealy型输出同步型输出同步两种方式的仿真结果对比两种方式的仿真结果对比输出无同步方式实现的Mealy型状态机,其输出结果与时钟不同步。

输出同步方式实现的同样的状态机,其输出结果与时钟是同步的状态机状态机VHDL实现实现举例举例Mealy型输出同步型输出同步结论结论从形式上看,在输出端不使用同步方法时,只存储从形式上看,在输出端不使用同步方法时,只存储了了pr_state;而使用同步方法时,同时存储了;而使用同步方法时,同时存储了output对于对于Mealy型状态机,可以使用输出同步方式,来型状态机,可以使用输出同步方式,来设计同步时序电路设计同步时序电路对于对于moore型状态机,则不需要使用输出端同步的型状态机,则不需要使用输出端同步的描述方式就可以得到同步输出的效果,这也是描述方式就可以得到同步输出的效果,这也是moore型状态机的优点之一型状态机的优点之一状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响u使用三种进程描述状态机使用三种进程描述状态机分别使用单进程、双进程、三进程结构的分别使用单进程、双进程、三进程结构的VHDL语言实现如以下语言实现如以下ASM图所示的状态机图所示的状态机状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响单进程描述的单进程描述的VHDL代码代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine1 ISPORT(clk,reset:IN STD_LOGIC;state_inputs:IN STD_LOGIC_VECTOR(0 TO 1);comb_outputs:OUT INTEGER RANGE 0 TO 15);END s_machine2;ARCHITECTURE behv OF s_machine1 ISTYPE FSM_ST IS(s0,s1,s2,s3);SIGNAL state:FSM_ST;BEGINPROCESS(reset,clk,state,state_inputs)BEGIN IF reset=1 THEN state comb_outputs=5;IF state_inputs=00 THEN state=s0;ELSE state comb_outputs=8;IF state_inputs=00 THEN state=s1;ELSE state comb_outputs=12;IF state_inputs=11 THEN state=s3;ELSE state comb_outputs=14;IF state_inputs=11 THEN state=s3;ELSE state=s0;END IF;END CASE;END IF;END PROCESS;END behv;-(完)(完)状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响单进程描述单进程描述RTL图图单单进程描述状态机内部结构进程描述状态机内部结构状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响双进程描述的双进程描述的VHDL代码代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine ISPORT(clk,reset:IN STD_LOGIC;state_inputs:IN STD_LOGIC_VECTOR(0 TO 1);comb_outputs:OUT INTEGER RANGE 0 TO 15);END s_machine;ARCHITECTURE behv OF s_machine ISTYPE FSM_ST IS(s0,s1,s2,s3);SIGNAL current_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)BEGIN IF reset=1 THEN current_state=s0;ELSIF clk=1 AND clkEVENT THEN current_state comb_outputs=5;IF state_inputs=00 THEN next_state=s0;ELSE 状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响 next_state comb_outputs=8;IF state_inputs=00 THEN next_state=s1;ELSE next_state comb_outputs=12;IF state_inputs=11 THEN next_state=s3;ELSE next_state comb_outputs=14;IF state_inputs=11 THEN next_state=s3;ELSE next_state=s0;END IF;END CASE;END PROCESS;END behv;状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响双进程描述产生的双进程描述产生的RTL图图双进程描述状态机内部结构双进程描述状态机内部结构状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响三进程描述的三进程描述的VHDL代码代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine2 ISPORT(clk,reset:IN STD_LOGIC;state_inputs:IN STD_LOGIC_VECTOR(0 TO 1);comb_outputs:OUT INTEGER RANGE 0 TO 15);END s_machine2;ARCHITECTURE behv OF s_machine2 ISTYPE FSM_ST IS(s0,s1,s2,s3);SIGNAL current_state,next_state:FSM_ST;BEGINREG:PROCESS(reset,clk)BEGIN IF reset=1 THEN current_state=s0;ELSIF clk=1 AND clkEVENT THEN current_state IF state_inputs=00 THEN next_state=s0;ELSE next_state IF state_inputs=01 THEN next_state=s1;状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响 ELSE next_state IF state_inputs=10 THEN next_state=s3;ELSE next_state IF state_inputs=11 THENnext_state=s3;ELSE next_state comb_outputs comb_outputs comb_outputs comb_outputs=14;END CASE;END PROCESS;END behv;状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响三进程描述产生的三进程描述产生的RTL图图三三进程描述状态机内部结构进程描述状态机内部结构状态机状态机VHDL实现实现举例举例进程结构对进程结构对RTL的影响的影响u从以上一个很简单的状态机设计的对比上,从以上一个很简单的状态机设计的对比上,可以看出,采用单进程方式描述的状态机可以看出,采用单进程方式描述的状态机其其RTL电路相对于另外两种描述方式多产电路相对于另外两种描述方式多产生了一个寄存器。

生了一个寄存器u对于简单的设计,采用双进程和三进程综对于简单的设计,采用双进程和三进程综合结果没有差别合结果没有差别u建议描述状态机时使用双进程或者三进程建议描述状态机时使用双进程或者三进程的方式状态机状态机VHDL实现实现举例举例状态编码对状态编码对RTL的影响的影响u通过以下通过以下Moore型状态机来说明状态编码型状态机来说明状态编码对对RTL的影响的影响例:设计一个串行数据流检测器要求:输入例:设计一个串行数据流检测器要求:输入连续的二进制数,当检测到连续连续的二进制数,当检测到连续“1”的个数的个数大于大于2个的时候,输出个的时候,输出“1”;其他状态输出;其他状态输出“0”分析:确定所需的状态数,取决于数据流中出分析:确定所需的状态数,取决于数据流中出现连续现连续“1”的个数,应该为的个数,应该为4个状态状态机状态机VHDL实现实现举例举例状态编码对状态编码对RTL的影响的影响画出画出ASM图图状态机状态机VHDL实现实现举例举例状态编码对状态编码对RTL的影响的影响根据状态转移图,写出根据状态转移图,写出VHDL代码代码-LIBRARY ieee;USE ieee.std_logic_1164.all;-ENTITY string_detector ISPORT(d,clk,rst:IN BIT;q:OUT BIT);END string_detector;-ARCHITECTURE my_arch OF string_detector ISTYPE state IS(zero,one,two,three);SIGNAL pr_state,nx_state:state;BEGIN-Lower section;-PROCESS(rst,clk)BEGIN IF(rst=1)THEN pr_state=zero;ELSIF(clkEVENT AND clk=1)THEN pr_state q=0;状态机状态机VHDL实现实现举例举例状态编码对状态编码对RTL的影响的影响 IF(d=1)THEN nx_state=one;ELSE nx_state q=0;IF(d=1)THEN nx_state=two;ELSE nx_state q=0;IF(d=1)THEN nx_state=three;ELSE nx_state q=1;IF(d=1)THEN nx_state=three;ELSE nx_state=zero;END IF;END CASE;END PROCESS;END my_arch;使用使用synplify综合之后,可以看出默认的编码综合之后,可以看出默认的编码方式是方式是one-hot编码。

编码综合后是综合后是one-hot编码方式编码方式综合后是综合后是one-hot编码对应的编码对应的Map图图状态机状态机VHDL实现举例实现举例状态编码对状态编码对RTL的影响的影响状态机状态机VHDL实现实现举例举例状态编码对状态编码对RTL的影响的影响如果将在原来的程序的基础上通过如果将在原来的程序的基础上通过attribute语语句指定编码方式,即将结构体的声明部分添加句指定编码方式,即将结构体的声明部分添加如下代码,可将编码方式改为二进制编码:如下代码,可将编码方式改为二进制编码:ATTRIBUTE enum_encoding:string;ATTRIBUTE enum_encoding OF state:TYPE IS 00 01 10 11;综合后是综合后是binary码编码方式码编码方式综合后是综合后是binary码编码方式对应的码编码方式对应的Map图图状态机状态机VHDL实现实现举例举例状态编码对状态编码对RTL的影响的影响u除了以上两种方式外,还可以通过软件进除了以上两种方式外,还可以通过软件进行设置编码方式;行设置编码方式;u如果将如果将“FSM Explorer”选项勾选,那么选项勾选,那么即使是在程序中指定了编码方式,其综合即使是在程序中指定了编码方式,其综合后的状态编码也是后的状态编码也是one-hot编码;编码;u因此,在状态机设计的时候,大家要注意因此,在状态机设计的时候,大家要注意软件的使用细节,应当有意识的通过软件软件的使用细节,应当有意识的通过软件进行性能优化。

进行性能优化没有勾选“FSM Explorer”时序电路的特点。

下载提示
相关文档
正为您匹配相似的精品文档