(八)有限元状态机的设计100402_第1页
(八)有限元状态机的设计100402_第2页
(八)有限元状态机的设计100402_第3页
(八)有限元状态机的设计100402_第4页
(八)有限元状态机的设计100402_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章有限元状态机的设计一、概述二、Moore状态机三、Mealy状态机四、状态编码五、非法状态处理作业一、概述时序电路典型时序电路典型时序电路一般时序电路一般时序电路每一种典型时序电路,都有明确的逻辑功能和比较固定的设计方法。这类电路在实际中应用十分广泛。如同步计数器、异步计数器、移位寄存器等等。用以解决一般的时序逻辑问题,这些问题都能用有限个不同的状态来描述和控制能用有限个不同的状态来描述和控制。这些状态在一定的条件之下会发生转换。有限元状态机主要是用来解决有限元状态机主要是用来解决一般时序逻辑电路一般时序逻辑电路问题。问题。 有限元状态机有限元状态机(Finite State Machi

2、ne FSM)在VHDL中有着广泛的应用,许多实际问题都是通过状态机来实现的,尤其是同步时序逻辑电路的设计。主要功能: 是用来实现一个数字电路设计中的控制部分控制部分,其功能与CPU的功能十分相似。对CPU来讲,系统执行速度与CPU运行速度及具体编程风格有关。使用状态机来实现时,执行使用状态机来实现时,执行的速度主要受系统更新状态所需时间的限制的速度主要受系统更新状态所需时间的限制。实践证明:在执行耗费时间和执行时间的确定性方面,状态机要比CPU好。状态机分类从信号输出方式分:Mealy型:输出与输入和现态有关。Moore型:输出只与现态有关。次态次态逻辑逻辑状态状态寄存器寄存器输出输出逻辑逻

3、辑输入输入输出输出次态次态现态现态时钟信号时钟信号复位信号复位信号次态次态逻辑逻辑状态状态寄存器寄存器输出输出逻辑逻辑输入输入输出输出次态次态现态现态时钟信号时钟信号复位信号复位信号Mealy型状态机结构图Moore型状态机结构图状态机分类单进程状态机多进程状态机(二进程、三进程)符号化状态机确定状态编码的状态机从编码方式分:从结构分:从状态表达方式分:顺序编码状态机一位热码编码状态机其他编码方式状态机实现方法 在VHDL语言中,状态机的实现符合人的思维逻辑,简单明了。用用VHDL可以设计不同表达方式和不同实用功能的状可以设计不同表达方式和不同实用功能的状态机,态机,多数状态机都有相对固定的语

4、句和程序表达方式多数状态机都有相对固定的语句和程序表达方式,只,只要把握住了这些固定的语句表达部分,就能根据实际需要写要把握住了这些固定的语句表达部分,就能根据实际需要写出各种风格和面向不同实用目的的出各种风格和面向不同实用目的的VHDL状态机状态机,适用于大型复杂的系统。 在传统传统的数字电路设计中,往往通过设计原始状态图,进行状态化简得到最简状态图,再通过状态分配和确定激励函数和输出函数后,实现状态机。设计过程比较复杂,只适合小型简单系统。状态机的优势1、状态机克服了纯硬件数字系统顺序方式控制不灵活顺序方式控制不灵活的缺点;2、由于状态机的结构相对简单,故设计方案相对固定设计方案相对固定;

5、3、状态机容易构成性能良好的同步时序逻辑模块;4、与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、程序层次分明,结构清晰层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的好处;5、在高速运算和控制方面,状态机更有其巨大的优势。6、高可靠性。状态机设计相关语句TYPE 数据类型名 IS 数据类型定义;枚举型类型定义语句TYPE week IS (sun,mon,tue,wed,thu,fri,sat) ;TYPE BOOLEAN IS (FALSE,TRUE) ;定义:举例:TYPE my_logic IS ( 1 ,Z ,U ,0 ) ;SIGNAL s1 : m

6、y_logic ;s1 = Z ;状态机设计相关语句TYPE m_state IS ( st0,st1,st2,st3,st4,st5 ) ;SIGNAL present_state,next_state : m_state ;定义状态机用枚举型语句VHDL设计状态机的构成构成说明部分主控时序时序进程主控组合组合进程辅助辅助进程等单进程状态机三进程状态机构成说明部分主控时序时序进程主控组合组合进程二进程状态机构成说明部分主控时序、组合进程说明部分说明部分说明部分使用TYPE语句来定义新的数据类型,此数据类型为枚举型,其元素通常都是用状态机的状态来定义都是用状态机的状态来定义。状态变量(如现态和

7、次态)应定义为信号信号,便于信息传递,状态变量的数据类型为方才定义的新的数据类型。 说明部分一般放在结构体的ARCHITECTURE和BEGIN之间。ARCHITECTURE IS TYPE FSM_ST IS (S0,S1,S2,S3); SIGNAL current_state , next_state : FSM_ST; BEGIN例:ARCHITECTURE IS TYPE FSM_ST IS (S0,S1,S2,S3); SIGNAL current_state , next_state : FSM_ST; BEGIN说明:1、定义新的数据类型FSM_ST为枚举型,有4个成员(S0,

8、S1,S2,S3);2、定义两个信号current_state(现态),next_state(次态),类型为FSM_ST,每个信号都有4种取值。3、由于状态变量的取值为文字符号,因此以上语句定义的状态机属于符号化状态机属于符号化状态机。主控时序进程主控时序进程u主控时序进程是指负责状态机运转负责状态机运转和在时钟驱动下负责状态在时钟驱动下负责状态转换的进程转换的进程。(即负责将次态次态赋给现态现态)u当时钟发生有效跳变时,状态机状态才发生变化,状态机向下一状态(包括再次进入本状态)转换的时刻时刻仅取决于时钟信号的到来。u一般地,主控时序进程不负责不负责下一状态的具体状态取值,如S0,S1,S2

9、,S3中的某一状态值,当时钟的有效跳变到来时,时序进程只是机械地将代表次态的信号只是机械地将代表次态的信号next_statenext_state中的值送中的值送入现态的信号入现态的信号current_statecurrent_state中,而信号中,而信号next_statenext_state中的内容中的内容完全由其他进程根据实际情况来决定。完全由其他进程根据实际情况来决定。u时序进程中也可以放置一些同步或异步清零或置位同步或异步清零或置位方面的控制信号。例1:主控时序进程举例REG: PROCESS (reset, clk) BEGIN IF reset = 1 THEN current

10、_state = s0 ; ELSIF clk=1 AND clkEVENT THEN current_state comb_outputs =5; IF state_inputs=“00” THEN next_state =S0; ELSE 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 =S0; ELSE next_state comb_outputs =14

11、; IF state_inputs=“11” THEN next_state =S3; ELSE next_state =S0; END IF; END CASE;END PROCESS ;S05S18S212S3140000/00/0011/11/1111辅助进程 辅助进程是配合状态机工作的组合或时序进程配合状态机工作的组合或时序进程。例如为了完成某种算法的进程,或用于配合状态机工作的其他时序进程,或为了稳定输出设置的数据锁存器等。例3:完整的状态机举例LIRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS PORT ( clk

12、,reset : IN STD_LOGIC; state_inputs : IN STD_LOGIC_VECTOR(0 TO 1); comb_output : OUT INTEGER RANGE 0 TO15 ) ; END ENTITY s_machine;ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (S0, S1, S2, S3); SIGNAL current_state,next_state : FSM_ST;BEGIN定义端口定义类型定义信号例3:完整的状态机举例BEGINREG: PROCESS (reset, clk) BE

13、GIN IF reset = 1 THEN current_state = s0 ; ELSIF clk=1 AND clkEVENT THEN current_state comb_outputs comb_outputs comb_outputs comb_outputs Z输出信号现态次态输出ZX=0X=1S0S0S20S1S0S21S2S2S31S3S3S10某一电路状态图如图所示,用VHDL语言设计此电路。(VHDL芯片设计,清华大学出版社, P351)例4:现态次态输出ZX=0X=1S0S0S20S1S0S21S2S2S31S3S3S10LIRARY IEEE;USE IEEE.S

14、TD_LOGIC_1164.ALL;ENTITY Moore_2 IS PORT ( clk,reset : IN STD_LOGIC; X : IN STD_LOGIC ; Z : OUT STD_LOGIC) ; END Moore_2;ARCHITECTURE Moore_2_arch OF Moore_2 IS TYPE State IS (S0,S1,S2,S3); SIGNAL Present_state,Next_state : State;BEGIN例4:BEGIN PROCESS (reset, clk) BEGIN IF reset = 1 THEN Present_sta

15、te = s0 ; ELSIF clk=1 AND clkEVENT THEN Present_state IF X=0 then Next_state =S0; ELSE Next_state =S2; END IF; Z IF END IF; Z IF END IF; Z IF END IF; Z Z输出信号现态次态输出ZX=0X=1S0S0S10S1S1S01用MooreMachine设计一个奇偶校验器(Parity checker),其方框图如图所示。在X端输入的一连串0与1的信号中:(1)当1的数量为偶数个时,输出端Z为0;(2)当1的数量为奇数个时,输出端Z为1。(VHDL芯片设计

16、,清华大学出版社, P354)S11S001001例4_1:LIRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Moore_3 IS PORT ( clk,reset : IN STD_LOGIC; X : IN STD_LOGIC ; Z : OUT STD_LOGIC) ; END Moore_3;ARCHITECTURE Moore_3_arch OF Moore_3 IS TYPE State IS (S0,S1); SIGNAL Present_state,Next_state : State;BEGIN现态次态输出ZX=0X=1S0S0S1

17、0S1S1S01例4-1:BEGIN BB: PROCESS (reset, clk) BEGIN IF reset = 1 THEN Present_state = s0 ; ELSIF clk=1 AND clkEVENT THEN Present_state IF X=0 then Next_state =S0; ELSE Next_state =S1; END IF; Z IF X=0 then Next_state =S1; ELSE Next_state =S0; END IF; Z =1; END CASE;END PROCESS AA ;END Moore_3_arch ;例4

18、_1:现态次态输出X=0X=1S0S0S10S1S1S01多进程状态机ADC0809工作时序图以ADC0809的应用为例,进行多进程状态机编程举例。(EDA技术与VHDL(2版) 清华大学出版社 P154)100uS控制控制ADC0809采样状态图采样状态图采样状态机结构框图采样状态机结构框图LOOK0数据锁存信号LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT ISPORT( D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -来自0809转换好的8位数据 CLK : IN STD_LOGIC; -状态机工作

19、时钟 EOC : IN STD_LOGIC; -转换状态指示,低电平表示正在转换 ALE : OUT STD_LOGIC; -8个模拟信号通道地址锁存信号 START : OUT STD_LOGIC; -转换开始信号 OE : OUT STD_LOGIC; -数据输出3态控制信号 ADDA : OUT STD_LOGIC; -信号通道最低位控制信号【例5】 ADDA : OUT STD_LOGIC; LOCK0 : OUT STD_LOGIC; -转换数据锁存时钟 Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -8位数据输出END ADCINT; ARCHITEC

20、TURE behav OF ADCINT ISTYPE states IS (st0, st1, st2, st3,st4) ; -定义各状态子类型SIGNAL current_state, next_state: states :=st0 ;SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK : STD_LOGIC; - 转换后数据输出锁存时钟信号BEGIN【例5】BEGIN ADDA = 1; -当ADDA=0,模拟信号进入通道IN0; - 当ADDA=1,则进入通道IN1 Q = REGL; LOCK0 = LOCK ;REG:

21、PROCESS (CLK)BEGIN IF (CLKEVENT AND CLK=1) THEN current_state ALE=0; START=0; LOCK=0; OE=0; next_state ALE=1; START=1; LOCK=0; OE=0; next_state ALE=0; START=0; LOCK=0; OE=0; IF (EOC=1) THEN next_state = st3; -EOC=1表明转换结束表明转换结束 ELSE next_state ALE=0; START=0; LOCK=0; OE=1; next_state ALE=0; START=0;

22、LOCK=1; OE=1; next_state next_state = st0; END CASE ;END PROCESS COM ;【例5】【例5】LATCH1: PROCESS (LOCK) - 此进程中,在LOCK的上升沿,将转换好的数据锁入BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF;END PROCESS LATCH1 ;END behav;ADC0809采样状态机工作时序启动转换转换结束输出允许。在EOC=1后下一个CLK,使OE=1。输出锁存。LOCK0=1回到准备状态单进程Moore状态机u单进程状态机其特点是组

23、合进程和时序进程在同一个组合进程和时序进程在同一个进程中进程中,可认为此进程为混合进程。 u单进程Moore状态机比较容易构成能避免毛刺能避免毛刺现象的进程。【例6】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 ISPORT (DATAIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END MOORE1;ARCHITECTURE behav OF MOORE1 IS TYPE S

24、T_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST : ST_TYPE ;BEGIN 【例6】BEGINPROCESS(CLK,RST)BEGIN IF RST =1 THEN C_ST = ST0 ; Q IF DATAIN =10 THEN C_ST = ST1 ; ELSE C_ST = ST0 ; END IF; Q IF DATAIN =11 THEN C_ST = ST2 ; ELSE C_ST = ST1 ; END IF; Q IF DATAIN =01 THEN C_ST = ST3 ;ELSE C_ST = ST0 ; END I

25、F;Q IF DATAIN =00 THEN C_ST = ST4 ;ELSE C_ST = ST2 ;END IF;Q IF DATAIN =11 THEN C_ST = ST0 ;ELSE C_ST = ST3 ;END IF;Q C_ST Z输出信号S00/01/01/00/01/10/0S2S1现态次态/输出X=0X=1S0S0/0S1/0S1S2/0S1/0S2S0/0S1/1S00/01/01/00/01/10/0S2S1例7:LIRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Mealy_1 IS PORT ( clk,reset : I

26、N STD_LOGIC; X : IN STD_LOGIC ; Z : OUT STD_LOGIC) ; END Mealy_1;ARCHITECTURE Mealy_1 _arch OF Mealy_1 IS TYPE State IS (S0,S1,S2); SIGNAL Present_state, Next_state : State;BEGIN现态次态/输出X=0X=1S0S0/0S1/0S1S2/0S1/0S2S0/0S1/1例7:BEHIN PROCESS (reset, clk) BEGIN IF reset = 1 THEN Present_state = S0 ; ELSI

27、F clk=1 AND clkEVENT THEN Present_state IF X=0 then Next_state =S0; Z=0; ELSE Next_state =S1; Z IF X=0 then Next_state =S2; Z=0; ELSE Next_state =S1; Z IF X=0 then Next_state =S0; Z=0; ELSE Next_state =S1; ZZ输出信号S01/01/01/1S2S10/0S30/01/00/00/0现态次态/输出X=0X=1S0S1/0S0/0S1S1/0S2/0S2S3/0S0/0S3S1/0S2/1S01

28、/01/01/1S2S10/0S30/01/00/00/0例8:LIRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Mealy_2 IS PORT ( clk,reset : IN STD_LOGIC; X : IN STD_LOGIC ; Z : OUT STD_LOGIC) ; END Mealy_2;ARCHITECTURE Mealy_2 _arch OF Mealy_2 IS TYPE State IS (S0,S1,S2,S3); SIGNAL Present_state, Next_state : State;BEGIN现态次态/输出X=

29、0X=1S0S1/0S0/0S1S1/0S2/0S2S3/0S0/0S3S1/0S2/1例8:BEHIN PROCESS (reset, clk) BEGIN IF reset = 1 THEN Present_state = S0 ; ELSIF clk=1 AND clkEVENT THEN Present_state IF X=0 then Next_state =S1; Z=0; ELSE Next_state =S0; Z WHEN S2 = WHEN S3 = IF X=0 then Next_state =S1; Z=0; ELSE Next_state =S2; Z=1; EN

30、D IF;END CASE;END PROCESS ;END Mealy_2 _arch ;例8:现态次态/输出X=0X=1S0S1/0S0/0S1S1/0S2/0S2S3/0S0/0S3S1/0S2/1例9 两进程Mealy状态机(EDA技术与VHDL(2版) 清华大学出版社 P159)S00/01010S11/101001/100000/10111S20/100111/10101S31/010010/10111S40/011011/11101 状态图如图所示,其中:状态数:5个,输入变量 DATAIN : 1位,输出变量Q:5位。状态图特点:在特定输入下转到下一状态,否则维持原态。例9LI

31、BRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 ISPORT ( CLK , DATAIN, RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) );END MEALY1;ARCHITECTURE behav OF MEALY1 ISTYPE states IS (st0, st1, st2, st3,st4 ); -定义状态SIGNAL STX : states ;BEGIN两进程Mealy状态机例9COMREG : PROCESS(CLK,RESET) -决定决定转换

32、状态转换状态的进程的进程BEGINIF RESET =1 THEN STX IF DATAIN = 1 THEN STX IF DATAIN = 0 THEN STX IF DATAIN = 1 THEN STX IF DATAIN = 0 THEN STX IF DATAIN = 1 THEN STX STX IF DATAIN = 1 THEN Q = 10000 ; ELSE Q IF DATAIN = 0 THEN Q = 10111 ; ELSE Q IF DATAIN = 1 THEN Q = 10101 ; ELSE Q IF DATAIN = 0 THEN Q = 11011

33、; ELSE Q IF DATAIN = 1 THEN Q = 11101 ; ELSE Q Q IF DATAIN=1 THEN Q2 :=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

34、DATAIN=1 THEN Q2 :=11101; ELSE Q2:=01101; END IF;WHEN OTHERS = Q2:=00000 ; END CASE ;IF CLKEVENT AND CLK = 1 THEN Q1=Q2; END IF;END PROCESS COM1 ;Q = Q1 ;END behav;- 新增变量新增变量Q2改进编程状态机工作时序图区别:1、在COM1进程中增加了一条IF语句:IF CLKEVENT AND CLK = 1 THEN Q1=Q2; END IF; 2、进程之外有语句:Q = Q1 ; 从而使Q的变化受CLK的影响,输出几乎没有毛刺改进前

35、改进后四、 状态编码直接输出型编码顺序编码一位热码编码 状态编码就是把状态机的每个状态(状态编码就是把状态机的每个状态(ST0、ST1)用)用一个确定的编码来表示。一个确定的编码来表示。1、直接输出型编码 将状态编码直接输出作为控制信号,即output=state,要求对状态机各状态的编码作特殊的选择,以适应控制对象的要求。这种状态机称为直接输出型状态机。 这类编码方式最典型的应用就是计数器。计数器实质上是一个主控时序进程和主控组合进程合二为一状态机,他的输出就是各状态的状态码。控制信号状态编码表状态状 态 编 码START ALEOELOCKB功能说明ST000000初始态ST111000启

36、动转换ST200001若测得EOC=1时,转下一状态ST3ST300100输出转换好的数据ST400110利用LOCK的上升沿将转换好的数据锁存【例10】 下表是根据0809时序要求,控制0809采样的编码表,B是标志信号。这个状态机有5个状态组成,从ST0ST5,编码为00000、11000、00001、00100、00110。每一位编码值都赋予了实际控制功能。控制信号状态编码表状态状 态 编 码START ALEOELOCKB功能说明ST000000初始态ST111000启动转换ST200001若测得EOC=1时,转下一状态ST3ST300100输出转换好的数据ST400110利用LOCK

37、的上升沿将转换好的数据锁存【例5-7】START =current_state(4)ALE =current_state(3)OE =current_state(2)LOCK =current_state(1)B =current_state(0)设有:current_state(4 downto 0)则:【例10】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY AD0809 IS PORT (D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK ,EOC : IN STD_LOGIC; ALE, START, OE,

38、 ADDA : OUT STD_LOGIC; c_state : OUT STD_LOGIC_VECTOR(4 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );END AD0809;ARCHITECTURE behav OF AD0809 ISSIGNAL current_state: STD_LOGIC_VECTOR(4 DOWNTO 0 );SIGNAL next_state: STD_LOGIC_VECTOR(4 DOWNTO 0 );CONSTANT st0 :【例10】CONSTANT st0 : STD_LOGIC_VECTOR(

39、4 DOWNTO 0) := 00000 ;CONSTANT st1 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 11000 ;CONSTANT st2 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00001 ;CONSTANT st3 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00100 ;CONSTANT st4 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00110 ;SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL LOCK : STD_LOGIC;BEGINADDA = 1; Q = REGL;START=current_state(4); ALE=current_state(3);OE=current_state(2); LOCK=current_state(1);c_state next_state next_state IF (EOC=1) THEN

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论