收藏 分享(赏)

ch7-有限状态机设计.ppt

上传人:kpmy5893 文档编号:10108073 上传时间:2019-10-10 格式:PPT 页数:45 大小:460KB
下载 相关 举报
ch7-有限状态机设计.ppt_第1页
第1页 / 共45页
ch7-有限状态机设计.ppt_第2页
第2页 / 共45页
ch7-有限状态机设计.ppt_第3页
第3页 / 共45页
ch7-有限状态机设计.ppt_第4页
第4页 / 共45页
ch7-有限状态机设计.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、第7章 有限状态机设计,7.1:一般有限状态机的设计 7.2:Moore型有限状态机的设计 7.3:Mealy型有限状态机的设计 7.4:状态编码 7.5:状态机剩余状态处理 7.6:LPM模块的VHDL文本方式调用,7.1.1 用户自定义数据类型定义语句,VHDL允许用户自行定义新的数据类型。枚举、整数、数组、记录、时间、实数用户自定义数据类型是用类型定义语句TYPE和子类型定义语句SUBTYPE实现的。,TYPE st1 IS ARRAY(0 TO 15 ) OF STD_LOGIC; TYPE week IS (sun,mon,tue,wed,thu,fri,sat);,7.1 一般有限

2、状态机的设计,TYPE语句用法如下: TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型; TYPE 数据类型名 IS 数据类型定义;,枚举类型,数组类型,VHDL中的枚举数据类型是一种特殊的数据类型,用文字符号表示一组实际的二进制数。 状态符号化,TYPE m_state IS (st0,st1,st2,st3,st4,st5); Signal present_state,next_state : m_state;,TYPE my_logic IS (1, Z,U,0); SIGNAL s1 : my_logic ;s1 = Z ;,枚举数据类型在综合后转化为二进制代码。如果直接用

3、数值来定义,必须使用单引号。,一、枚举数据类型,一般情况下,编码顺序是默认的,将第一个枚举量编码为“0”,以后依次加“1”。综合器自动将每一个枚举量转变成位矢量,位矢量的长度根据实际状态个数来决定。编码方式也会因综合器及综合控制方式不同而不同,特殊情况下,编码顺序也可人为设置。,二、布尔数据类型的定义语句TYPE BOOLEAN IS (FALSE,TRUE) ;,SUBTYPE语句用法如下: SUBTYPE 子类型名 IS 基本数据类型 RANGE 约束范围;,SUBTYPE digitS IS INTEGER RANGE (0 TO 9);,子类型SUBTYPE是由TYPE定义的原数据类型

4、(基本数据类型)的一个子集,满足原数据类型的所有约束条件。,不同于TYPE的是:SUBTYPE只是在基本数据类型上作一些约束条件,并没有定义新的数据类型。,由于子类型和基本数据类型属同一种数据类型,属于两者的数据对象间可以直接进行赋值操作,不必进行数据类型的转换。,三、子类型SUBTYPE,7.1.2 为什么要使用状态机,有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。 状态机的结构模式相对简单。 状态机容易构成性能良好的同步时序逻辑模块。 状态机的VHDL表述丰富多样。 在高速运算和控制方面,状态机更有其巨大的优势。 就可靠性而言,状态机的优势也是十分明显的。,一、状态机的基本结构和

5、功能状态机是一类很重要的时序电路,是许多数字电路的核心部件。状态机的一般形式如图所示。,状态机的结构示意图,二、状态机的基本操作 状态机内部状态转换状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。 (2)产生输出信号序列输出信号由输出译码器根据当前状态和输入条件决定。用输入信号决定下一状态也称为“转移”。从一个状态转移到另一个状态称为控制定序,而决定下一状态所需的逻辑称为转移函数。,7.1.3 一般有限状态机的设计方法,一、VHDL设计的状态机的几种形式信号输出方式:Mealy型、Moore型结构:单进程、多进程状态表达式:符号化、确定状态编码编码方式:顺序编码、一位热码

6、编码、其他编码为了能获得可综合的,高效的VHDL状态机描述,建议使用枚举数据类型来定义状态机的状态,并使用多进程方式来描述状态机的内部逻辑。一般情况下,可使用两个进程来描述,一个进程描述时序逻辑,包括状态寄存器的工作和寄存器状态的输出;另一个进程描述组合逻辑,包括进程间状态值的传递逻辑以及状态转换值的输出。必要时还可引入第三个进程完成其他的逻辑功能。,ARCHITECTURE .ISTYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST; BEGIN.,最一般和最常用的状态机通常包含说明部分、主控时序进程、主

7、控组合进程、辅助进程几个部分。 1、说明部分 使用TYPE语句定义新的数据类型,采样状态机的状态名定义枚举型数据。 状态变量(初态和次态)为信号,定义为含有状态元素的的新定义数据类型。 说明部分放在ARCHITECTURE和BEGIN之间。,二、VHDL描述状态机程序组成,一般状态机结构框图工作示意图,主控时序进程,主控组合进程,2、主控时序进程负责状态机的运转和时钟驱动下负责状态转换的进程。状态机向下一状态转换的实现仅仅取决于时钟信号。一般地,主控时序进程不负责下一状态的的具体状态取值。,3、主控组合进程 根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其它非主控的组合或时序

8、进程的信号),或/和当前状态的状态值确定下一状态的取值内容,确定对外输出或对内部其它组合或时序进程输出控制信号的内容。 4、辅助进程配合状态机工作的组合进程或时序进程。例如为了完成某种算法的进程,或用于配合状态机工作的其他时序进程,或为了稳定输出设置的数据锁存器等。,【例7-1】一般状态机的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_ou

9、tputs : OUT INTEGER RANGE 0 TO 15 ); END s_machine; ARCHITECTURE behv OF s_machine ISTYPE FSM_ST IS (s0, s1, s2, s3); -定义FSM_ST为枚举型数据类型SIGNAL current_state, next_state: FSM_ST;,说明部分,BEGINREG: PROCESS (reset,clk) -时序逻辑进程BEGINIF reset = 1 THEN current_state comb_outputs= 5; -初始态译码输出5,IF state_inputs =

10、 “00“ THEN -根据外部的状态控制输入“00”next_state comb_outputs comb_outputs comb_outputs = 14;IF state_inputs = “11“ THEN next_state = s3; ELSE next_state = s0; END IF;END case;END PROCESS; -由信号NEXT_STATE将下一状态值带出此进程,进入进程REG END behv;,例7-1状态机的工作时序图,进程间一般是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上进程间的动作是有先后的。进程REG在时钟上升沿到来时,将

11、首先运行,完成状态转换的赋值操作。如果外部控制信号STATE_INPUTS不变,只有当来自进程REG的信号CURRENT_STATE改变时,进程COM才开始动作。在COM进程中,将根据CURRENT_STATE的值和外部的控制码STATE_INPUTS来决定下一时钟边沿到来后,进程REG的状态转换方向。这个状态机的两位组合输出COMB_OUTPUTS是对当前状态的译码,可以通过这个输出值了解状态机内部的运行情况;同时可以利用外部控制信号STATE_INPUTS任意改变状态机的状态变化模式。,在设计中,如果希望输出的信号具有寄存器锁存功能,则需要为此输出写第3个进程,并把CLK和RESET信号放

12、到敏感信号表中。本例中,用于进程间信息传递的信号CURRENT_STATE和 NEXT_STATE,在状态机设计中称为反馈信号。状态机运行中,信号传递的反馈机制的作用是实现当前状态的存储和下一个状态的译码设定等功能。在VHDL中可以有两种方式来创建反馈机制。即使用信号的方式和使用变量的方式,通常倾向于使用信号的方式。一般地,先在进程中使用变量传递数据,然后使用信号将数据带出进程。,7.2 Moore型有限状态机的设计,状态机,Moore,Mealy,同步输出状态机;输出为当前状态的函数;在输入变化后,必须等待时钟的到来,时钟使状态发生变化时才导致输出变化。,异步输出状态机;输出为当前状态和所有

13、输入信号的函数;输出在输入变化后立即发生,不依赖时钟的同步。,Moore状态机,Moore状态机的输出只与有限状态机的当前状态有关,与输入信号的当前值无关。 Moore有限状态机在时钟脉冲的有效边沿后的有限时延后,输出达到稳定值。 即使在一个时钟周期内输入信号发生变化,输出也会在一个完整的时钟周期内保持稳定值而不变。 输入对输出的影响要到下一个时钟周期才能反映出来。 Moore有限状态机最重要的特点就是将输入与输出信号隔离开来。,Mealy状态机,Mealy有限状态机的输出不单与当前状态有关,而且与输入信号的当前值有关。 输入信号可能在一个时钟周期内任意时刻变化,这使得Mealy有限状态机对输

14、入的响应发生在当前时钟周期,比Moore有限状态机对输入信号的响应要早一个周期。 因此,输入信号的噪声可能影响输出信号。,AD574逻辑控制真值表(X表示任意),7.2.1 多进程有限状态机,AD574工作时序,STATUS:AD574芯片的一个输出引脚,标志芯片的忙或闲的状态,在转换进行时,它为高电平,转换结束时变低电平。,采样状态机结构框图,图7-4 AD574工作时序,【例7-2】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY AD574 ISPORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK

15、,STATUS : IN STD_LOGIC;-状态机时钟CLK,AD574状态信号STATUSLOCK0 : OUT STD_LOGIC; -内部锁存信号LOCK的测试信号CS,A0,RC,K12X8 : OUT STD_LOGIC; -AD574控制信号Q : OUT STD_LOGIC_VECTOR(11 DOWNTO 0); -锁存数据输出 END AD574;,ARCHITECTURE behav OF AD574 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL current_state, next_state: states

16、:=st0 ;SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0);SIGNAL LOCK : STD_LOGIC; BEGINK12X8 = 1; LOCK0 = LOCK ;,COM: PROCESS(current_state,STATUS) BEGIN CASE current_state IS WHEN st0= next_state next_state = st2; CS=0; A0=0;RC=0;LOCK=0; -启动12位转换,WHEN st2 = IF (STATUS=1) THEN next_state next_state next_s

17、tate next_state = st0; -其它情况返回初始态 END CASE ;END PROCESS COM ;,思考:Moore型?Mealy型?,REG: PROCESS (CLK) - 时序进程 BEGINIF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF; END PROCESS REG;,LATCH1 : PROCESS (LOCK) - 数据锁存器进程 BEGINIF LOCK=1 AND LOCKEVENT THEN REGL = D ;END IF; END PROCESS ; Q = RE

18、GL; END behav;,AD574采样状态机工作时序,状态机RTL电路图,【例7-3】 COM1: PROCESS(current_state,STATUS) -决定转换状态的进程 BEGIN CASE current_state IS WHEN st0 = next_state next_state IF (STATUS=1) THEN next_state next_state next_state next_state = st0; END CASE ; END PROCESS COM1 ;,COM2: PROCESS(current_state) -输出控制信号的进程 BEGIN

19、 CASE current_state IS WHEN st0= CS CS CS CS CSCS=1; A0=1;RC=1;LOCK=0;-其它情况返回初始态END CASE ; END PROCESS COM2 ;,组合进程COM可分成两个组合进程COM1、COM2,7.2.2 单进程Moore型有限状态机,library ieee; -例7-4单进程Moore型 use ieee.std_logic_1164.all; entity moore1 is port(datain: in std_logic_vector(1 downto 0);clk,rst : in STD_LOGIC;

20、Q : out STD_LOGIC_VECTOR(3 DOWNTO 0); end moore1; architecture bhe of moore1 is type states is (st0,st1,st2,st3,st4); signal c_st:states;,begin process(clk,rst) beginif rst=1 then c_stif datain=“10“ then c_stif datain=“11“ then c_stif datain=“01“ then c_stif datain=“10“ then c_stif datain=“10“ then

21、c_st c_st=st0;end case; end if; end process; end bhe;,process(clk,rst) -例7-4双进程Moore型 beginif rst=1 then c_stif datain=“10“ then c_stif datain=“11“ then c_stif datain=“01“ then c_stif datain=“10“ then c_stif datain=“10“ then c_st c_st=st0;end case; end if; end process;,process(c_st) begincase c_st i

22、swhen st0 =QQQQQnull;end case; end process; end bhe;,例7-4:单进程和双进程MOORE型有限状态机程序仿真结果,双进程输出有毛刺,单进程输出落后一个周期,7.3 Mealy型有限状态机的设计,library ieee;-例7-5 use ieee.std_logic_1164.all; entity mealy1 is port(clk,datain,reset : in STD_LOGIC;Q : out STD_LOGIC_VECTOR(4 DOWNTO 0); end mealy1; architecture bhe of mealy

23、1 is type states is (st0,st1,st2,st3,st4); signal stx:states; begin,comreg:process(clk,reset) -决定状态转换的进程 beginif reset=1 then stxif datain=1 then stxif datain=0 then stxif datain=1 then stxif datain=0 then stxif datain=1 then stx stx=st0;,end case;end if; end process comreg; com1:process(stx,datain)

24、 -输出控制信号的进程 begincase stx iswhen st0 =if datain=1 then Qif datain=0 then Qif datain=1 then Qif datain=0 then Qif datain=1 then Q Q=“00000“;end case; end process com1; end bhe;,com1:process(stx,datain,clk) -例7-6variable Q2 :std_logic_vector(4 downto 0); begin case stx is when st0 =if datain=1 then Q2

25、:=“10000“;else Q2:=“01010“; end if; when st1 =if datain=0 then Q2:=“10111“;else Q2:=“10100“; end if; when st2 =if datain=1 then Q2:=“10101“;else Q2:=“10011“; end if; when st3 =if datain=0 then Q2:=“11011“;else Q2:=“01001“; end if; when st4 =if datain=1 then Q2:=“11101“;else Q2:=“01101“; end if; when

26、 others = Q2:=“00000“;end case; if clkevent and clk=1 then Q1=Q2;end if; end process com1; Q=Q1; end bhe;,采用同步锁存实现输出控制信号进程,例7-5、7-6:MEALY型有限状态机程序仿真结果,未锁存,输出有毛刺,输出落后,由时钟同步锁存,使用VHDL描述状态机时,必须注意避免由于寄存器的引入而创建了不必要的异步反馈路径。根据VHDL综合器的规则,对于所有可能的输入条件,当进程中的输出信号如果没有被完全地与之对应指定时,即没有为所有可能的输入条件提供明确的赋值时,此信号将自动被指定,即在未

27、列出的条件下保持原值,这就意味着引入了寄存器。在状态机中,如果存在一个或更多的状态没有被明确地指定转换方式,或者对于状态机中的状态值没有规定所有的输出值,寄存器就将在设计者的不知不觉中被引入了。在程序的综合过程中,应密切注视VHDL综合器给出的每一个警告信息,并根据警告信息的指示,对程序作必要的修改。,7.4 状态编码,7.4.1 状态位直接输出型编码将状态编码直接输出作为控制信号,要求对状态机的各状态的编码作特殊的选择,以适应控制时序的要求。,特点:输出速度快,没有毛刺现象;程序可读性差,组合逻辑资源占用多;难以有效地控制非法状态的出现。,7.4.2 顺序编码,编码最简单,使用的触发器数量最

28、少,增加了组合逻辑资源;剩余的非法状态量少,容错技术最简单;输出的控制信号必须另外设置相应的进程处理。,7.4.3 一位热码编码(One-Hot Encoding),状态机的每一个状态都由一个触发器的状态表示;使用触发器较多,但编码方式简单;简化了状态译码逻辑,提高了状态转换速度;,状态机的每一个状态用二进制位来编码 例:实现4状态的状态机,其二进制编码可为状态1“00” 状态2“01” 状态3“10” 状态4“11” 特点 触发器使用较少,速度较慢,可能产生两位同时翻转的情况。如:“01”“10”,顺序编码,格雷码编码,格雷码编码每次仅一个状态位的值发生变化 例:实现4状态的状态机,其格雷码

29、编码可为 状态1“00” 状态2“01” 状态3“11” 状态4“10” 特点 触发器使用较少,速度较慢,不会产生两位同时翻转的情况。,ONE HOT编码,ONE HOT的编码方案对每一个状态采用一个触发器,即4个状态的状态机需4个触发器。同一时间仅1个状态位处于逻辑“l”电平。 例:实现4状态的状态机,其ONE HOT编码可为 状态1“0001” 状态2“0010” 状态3“0100” 状态4“1000” 特点 触发器使用较多,但逻辑简单,速度快,7.5 状态剩余状态处理,状态机设计中,不可避免出现剩余状态,即未被定义的编码组合,这些状态在正常运行中不会出现,通常称为非法状态。如果没有对非法

30、状态进行合理的处理,在外界干扰或随机上电的初始启动后,状态机可能进入非法状态而导致工作异常。因此,状态机系统的容错技术必须慎重考虑剩余状态的处理。处理时,必然会不同程度地耗用逻辑资源,设计者在选用何种状态机结构、何种编码方式、何种容错技术及系统的工作速度与资源利用率方面作权衡比较。,剩余状态处理方法,在语句中对每个非法状态都作出明确的状态转换指示; 使用OTHERS语句对未提到的状态作统一处理; 输出的控制信号必须另外设置相应的进程处理。 需要注意的是,有的综合器对符号化定义状态的编码方式不是固定的,为了安全起见,建议直接使用常量来定义合法状态和剩余状态。 使用一位热码的编码方式时,剩余状态随

31、有效状态数的增加呈指数剧增,必须用其他方式对它的剩余状态处理。, -例7-10 alarm =(st0 AND (st1 OR st2 OR st3 OR st4 OR st5) OR(st1 AND (st0 OR st2 OR st3 OR st4 OR st5) OR(st2 AND (st0 OR st1 OR st3 OR st4 OR st5) OR(st3 AND (st0 OR st1 OR st2 OR st4 OR st5) OR(st4 AND (st0 OR st1 OR st2 OR st3 OR st5) OR(st5 AND (st0 OR st1 OR st2

32、OR st3 OR st4);,第7章作业 1、设计一个111序列检测器电路,其功能是连续输入三个或三个以上的1时,电路输出为1,其余情况下输出为0。要求:画出其状态转移图,并编写VHDL程序实现上述功能。 2、设计一个自动售货机控制程序,它的投币口每次可以投入1元、2元、5元,且规定投入1元或2元后不得再投入5元。当投入总值等于或超过设定值(4元),售货机就自动送出货物并找回多余的钱。要求定义状态取值,画出其状态转移图,编写程序,实现售一件商品的功能。 输入: din=00 未投币 din=01 投入1元 din=10 投入2元 din=11 投入5元 输出:commodity 控制送出商品,1为送出; give_change控制找钱,0为不找钱,1为找1元钱。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报