第8章VHDL状态机设计与应用(2014)_第1页
第8章VHDL状态机设计与应用(2014)_第2页
第8章VHDL状态机设计与应用(2014)_第3页
第8章VHDL状态机设计与应用(2014)_第4页
第8章VHDL状态机设计与应用(2014)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、第第8 8章章 有限状态机有限状态机(FSM(FSM,Finite State Machine ) ) 有限状态机有限状态机(Finite State MachineFinite State Machine)又称有限状态自动机)又称有限状态自动机或简称状态机,是表示有限个状态以及在这些状态之间的转移和或简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。动作等行为的数学模型。 状态机由一组状态、一个初始状态、输入和根据输状态机由一组状态、一个初始状态、输入和根据输入及现有状态转换为下一个状态的转换函数组成。入及现有状态转换为下一个状态的转换函数组成。 8.1 VHDL8

2、.1 VHDL状态机的一般形式状态机的一般形式 回顾:回顾:类型定义语句类型定义语句 TYPE TYPE 数据类型名数据类型名 IS IS 数据类型定义数据类型定义 OF OF 基本数据类型基本数据类型 ; ;或或TYPE TYPE 数据类型名数据类型名 IS IS 数据类型定义数据类型定义 ; ; TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;TYPE week IS (sunTYPE week IS (sun,monmon,tuetue,wedwed,thuth

3、u,frifri,sat) ; sat) ; TYPE m_state IS ( st0TYPE m_state IS ( st0,st1st1,st2st2,st3st3,st4st4,st5 ) ;st5 ) ;SIGNAL present_stateSIGNAL present_state,next_state : m_state ; next_state : m_state ; TYPE BOOLEAN IS (FALSETYPE BOOLEAN IS (FALSE,TRUE) TRUE) ; 回顾:回顾:类型定义语句类型定义语句 TYPE my_logic IS ( 1 TYPE m

4、y_logic IS ( 1 ,Z Z ,U U ,0 ) ;0 ) ; SIGNAL s1 : my_logic ; SIGNAL s1 : my_logic ; s1 = Z ; s1 = Z ; SUBTYPE SUBTYPE 子类型名子类型名 IS IS 基本数据类型基本数据类型 RANGE RANGE 约束范围约束范围; ; SUBTYPE digits IS INTEGER RANGE 0 to 9 ;SUBTYPE digits IS INTEGER RANGE 0 to 9 ; 8.1 VHDL8.1 VHDL状态机的一般形式状态机的一般形式 8.1.1 8.1.1 状态机的优

5、势状态机的优势 l状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点;状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点;l由于状态机的结构相对简单,设计方案相对固定;由于状态机的结构相对简单,设计方案相对固定;l状态机容易构成性能良好的同步时序逻辑模块;状态机容易构成性能良好的同步时序逻辑模块;l与与VHDLVHDL的其他描述方式相比,状态机的的其他描述方式相比,状态机的VHDLVHDL表述丰富多样、表述丰富多样、程序层次分明,结构清晰,易读易懂;在排错、修改和模块移程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的好处;植方面也有其独到的好处;l在高速运算和控制方面,

6、状态机更有其巨大的优势。在高速运算和控制方面,状态机更有其巨大的优势。 l高可靠性。高可靠性。 8.1 VHDL8.1 VHDL状态机的一般形式状态机的一般形式 8.1.2 VHDL8.1.2 VHDL状态机的一般结构状态机的一般结构 1. 1. 说明部分说明部分 ARCHITECTURE .ISARCHITECTURE .IS TYPE FSM_ST IS (s0 TYPE FSM_ST IS (s0,s1s1,s2s2,s3); s3); SIGNAL current_state, next_state: FSM_ST; SIGNAL current_state, next_state:

7、FSM_ST; . . 包含说明部分、主控时序进程、主控组合进程包含说明部分、主控时序进程、主控组合进程 、辅助、辅助进程等。进程等。主要使用主要使用TYPETYPE定义新的数据类型(枚举类型)。定义新的数据类型(枚举类型)。8.1 VHDL8.1 VHDL状态机的一般形式状态机的一般形式 2. 2. 主控时序进程主控时序进程 comb_outputsstate_inputsresetclkFSM: s_machineCOMnext_statecurrent_statePROCESSREGPROCESS图图8-1 8-1 一般状态机结构框图一般状态机结构框图 主控时序进程是指负责状态机运转和在

8、时钟驱动下主控时序进程是指负责状态机运转和在时钟驱动下负责状态转换的进程。负责状态转换的进程。8.1 VHDL8.1 VHDL状态机的一般形式状态机的一般形式 8.1.2 VHDL8.1.2 VHDL状态机的一般结构状态机的一般结构 3. 3. 主控组合进程主控组合进程 4. 4. 辅助进程辅助进程 可称为状态译码进程,其任务是根据外部输入可称为状态译码进程,其任务是根据外部输入的控制信号和当前的状态值确定下一状态的取向。的控制信号和当前的状态值确定下一状态的取向。用于配合状态机工作的组合进程或时序进程。用于配合状态机工作的组合进程或时序进程。8.1 VHDL8.1 VHDL状态机的一般形式状

9、态机的一般形式 8.1.2 VHDL8.1.2 VHDL状态机的一般结构状态机的一般结构 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY s_machine IS PORT ( 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 IS TYPE FSM_ST IS (s0, s1, s

10、2, s3);-数据类型定义,状态符号化数据类型定义,状态符号化 SIGNAL current_state, next_state: FSM_ST;-将现态和次态将现态和次态定义为新的数据类型定义为新的数据类型BEGIN REG: 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 ne

11、xt_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; IF state_inputs = 11 THEN next_state = s3; ELSE next_state = s0; END IF; END case; END PROCESS; END b

12、ehv; 8.1 VHDL8.1 VHDL状态机的一般形式状态机的一般形式 图图8-2 8-2 例例8-18-1状态机的工作时序状态机的工作时序 8.1 VHDL8.1 VHDL状态机的一般形式状态机的一般形式 8.1.2 VHDL8.1.2 VHDL状态机的一般结构状态机的一般结构 8.2 Moore8.2 Moore型状态机的设计型状态机的设计 8.2.1 8.2.1 多进程状态机多进程状态机 图图8-5 ADC08098-5 ADC0809工作时序工作时序 Moore Moore状态机的输出仅为状态机的输出仅为当前状态的函数当前状态的函数, MealyMealy的输出与的输出与状态和输入

13、都有关系状态和输入都有关系, MooreMoore状态机在输入发生变化时还必须状态机在输入发生变化时还必须等到时钟的到来,时钟使状态发生变化时才导致输出的变化,等到时钟的到来,时钟使状态发生变化时才导致输出的变化,比比MealyMealy机要多等待一个时钟周期机要多等待一个时钟周期。5.2 Moore5.2 Moore状态机状态机 8.2.1 8.2.1 多进程状态机多进程状态机 图图8-6 8-6 控制控制ADC0809ADC0809采样状态图采样状态图 8.2 Moore8.2 Moore状态机状态机 5.2.1 5.2.1 多进程状态机多进程状态机 图图8-7 8-7 采样状态机结构框图

14、采样状态机结构框图 【例例8 8-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT IS PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);-来自来自0809转换好的转换好的8位数据位数据CLK,RST: IN STD_LOGIC; -状态机工作时钟状态机工作时钟EOC : IN STD_LOGIC; -转换状态指示,低电平表示正在转换转换状态指示,低电平表示正在转换ALE : OUT STD_LOGIC; -8个模拟信号通道地址锁存信号个模拟信号通道地址锁存信号START : OUT STD_LO

15、GIC; -转换开始信号转换开始信号OE : OUT STD_LOGIC; -数据输出数据输出3态控制信号态控制信号ADDA : OUT STD_LOGIC; -信号通道最低位控制信号信号通道最低位控制信号LOCK_T : OUT STD_LOGIC; -观察数据锁存时钟观察数据锁存时钟Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -8位数据输出位数据输出END ADCINT;ARCHITECTURE behav OF ADCINT IS TYPE states IS (s0, s1, s2, s3,s4);-定义各状态子类型定义各状态子类型 SIGNAL cur

16、rent_state, next_state: states :=s0 ; SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; -转换后数据输出锁存时钟信号转换后数据输出锁存时钟信号 BEGINADDA = 0; LOCK_T 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 = s3; -EOC=1表

17、明转换结束表明转换结束 ELSE next_state ALE=0;START=0;LOCK=0;OE=1; next_state ALE=0; START=0; LOCK=1; OE=1; next_state next_state = s0; END CASE ; END PROCESS COM ; REG: PROCESS (CLK,RST) BEGIN IF RST=1 THEN current_state=s0; ELSIF (CLKEVENT AND CLK=1) THEN current_state=next_state; END IF; END PROCESS REG; LAT

18、CH1:PROCESS (LOCK) -在在LOCK的上升沿,将转换好的数据锁入的上升沿,将转换好的数据锁入 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF; Q=REGL; END PROCESS LATCH1 ; Q next_state next_state IF (EOC=1) THEN next_state = s3; ELSE next_state next_state next_state next_state ALE=0;START=0;LOCK=0;OEALE=1;START=1;LOCK=0;OEALE=0;STAR

19、T=0;LOCK=0;OEALE=0;START=0;LOCK=0;OEALE=0;START=0;LOCK=1;OE ALE=0;START=0;LOCK=0; END CASE ; END PROCESS COM2 ; 8.2 Moore8.2 Moore状态机状态机 8.2.2 8.2.2 单进程单进程MooreMoore状态机状态机 LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 ISENTITY MOORE1 IS PORT (DATAIN

20、:IN STD_LOGIC_VECTOR(1 DOWNTO 0); PORT (DATAIN :IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST : IN STD_LOGIC; CLK,RST : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END MOORE1;END MOORE1;ARCHITECTURE behav OF MOORE1 ISARCHITECTURE behav OF MOORE1 IS TYPE ST_TYP

21、E IS (ST0, ST1, ST2, ST3,ST4); TYPE ST_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST : ST_TYPE ;SIGNAL C_ST : ST_TYPE ; BEGIN BEGIN PROCESS(CLK,RST) PROCESS(CLK,RST) BEGIN BEGIN (接下页)(接下页)8.2 Moore8.2 Moore状态机状态机 5.2.2 5.2.2 单进程单进程MooreMoore状态机状态机 IF RST =1 THEN C_ST = ST0 ; Q IF DATAIN =10 THEN C_S

22、T = 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 IF; 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 = ST0; END CASE; END

23、IF; END PROCESS;END behav; 8.3 Mealy8.3 Mealy状态机状态机 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 ISPORT ( CLK, DIN1,DI2, RST: IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END MEALY1;ARCHITECTURE behav OF MEALY1 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL PST : states ; BEGIN

24、Mealy Mealy状态机一旦输入信号或状态发生变化,输出信号即刻状态机一旦输入信号或状态发生变化,输出信号即刻发生变化,比发生变化,比MooorMooor型的输出变化要领先一周期。型的输出变化要领先一周期。5.3 Mealy5.3 Mealy状态机状态机 COMREG: PROCESS(CLK,RST,PST, DIN1) BEGIN -决定转换状态的进程决定转换状态的进程 IF RST =1 THEN PST IF DIN1=1 THEN PST IF DIN1=1 THEN PST IF DIN1=1 THEN PST IF DIN1=1 THEN PST IF DIN1=0 THEN

25、 PST PST IF DIN2 = 1 THEN Q = 10000 ; ELSE Q IF DIN2 = 0 THEN Q = 10111 ; ELSE Q IF DIN2 = 1 THEN Q = 10101 ; ELSE Q IF DIN2 = 0 THEN Q = 11011 ; ELSE Q IF DIN2 = 1 THEN Q = 11101 ; ELSE Q Q=00000 ; END CASE ; END PROCESS COM;END behav; 8.3 Mealy8.3 Mealy状态机状态机 .PROCESS(CLK,RST,PST,DIN) BEGIN IF RST

26、=1 THEN ST IF DIN1=1 THEN ST =S1; ELSE ST IF DIN1=1 THEN ST =S2; ELSE ST IF DIN1=0 THEN ST =S3; ELSE ST IF DIN1=1 THEN ST =S4; ELSE ST IF DIN1=0 THEN ST =S5; ELSE ST ST=SO ; END CASE ; IF ST=s8 THEN SOUT=1; ELSE SOUT=0; END IF; END IF END PROCESS;END behav; 8.3 Mealy8.3 Mealy状态机状态机 8.3 Mealy8.3 Meal

27、y状态机状态机 模块间一般的通信握手协议模块间一般的通信握手协议就绪信号选通信号数据S1接收端状态转移R1R2R3输出就绪信号,等待 数据和选通信号发送端状态转移就绪等待输出数据和选通信号,等待就绪信号结束S2结束选通,通信结束取数据结束就绪信号,等待选通信号结束通信结束S3练习练习数据从模块数据从模块A发送给模块发送给模块B的整个过程分成的整个过程分成6个阶段:个阶段: (1) 发送模块发送模块A等待接收模块等待接收模块B送来的接收就绪信号。当该送来的接收就绪信号。当该就绪信号有效时,表明接收模块就绪信号有效时,表明接收模块B已作好接收数据准备,发送已作好接收数据准备,发送模块模块A可以向接

28、收模块可以向接收模块B发送数据。发送数据。 (2) 接收模块接收模块B向发送模块向发送模块A输出接收就绪信号,然后等待输出接收就绪信号,然后等待发送模块发送模块A输出的数据和数据有效输出的数据和数据有效(选通信号选通信号)的到来。的到来。 (3) 发送模块发送模块A在确认就绪信号以后,输出数据和数据选通在确认就绪信号以后,输出数据和数据选通信号,并等待接收模块信号,并等待接收模块B的就绪信号结束。的就绪信号结束。 练习练习 (4) 接收模块接收模块B在确认选通信号有效以后,就接收模块在确认选通信号有效以后,就接收模块A发送发送来的数据并使就绪信号结束,然后等待选通信号结束。来的数据并使就绪信号

29、结束,然后等待选通信号结束。 (5) 发送模块发送模块A在确认就绪信号结束以后结束数据通信过程,在确认就绪信号结束以后结束数据通信过程,进入本身的处理过程。进入本身的处理过程。 (6) 接收模块接收模块B在确认选通信号结束后结束通信过程,进入在确认选通信号结束后结束通信过程,进入自身的处理。自身的处理。 、阶段是、阶段是2个模块互相确认数据通信准备是否已准备好;个模块互相确认数据通信准备是否已准备好;阶段是模块阶段是模块B接收数据;确认数据已被接收,就绪和选接收数据;确认数据已被接收,就绪和选通信号结束。通信号结束。练习练习8.4 8.4 状态编码状态编码 8.4.1 8.4.1 直接输出型编

30、码直接输出型编码 表表8-1 控制信号状态编码表控制信号状态编码表 状态状态 状状 态态 编编 码码STARTALEOELOCKB功功 能能 说说 明明ST0 00000初始态初始态ST111000启动转换启动转换ST200001若测得若测得EOC=1时,转下一状态时,转下一状态ST3ST300100输出转换好的数据输出转换好的数据ST400110利用利用LOCK的上升沿将转换好的数据锁存的上升沿将转换好的数据锁存【例例8-8】ARCHITECTURE behav OF AD0809 IS SIGNAL cs, SOUT: STD_LOGIC_VECTOR(4 DOWNTO 0 ); CONS

31、TANT s0 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00000 ; CONSTANT s1 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 11000 ; CONSTANT s2 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00001 ; CONSTANT s3 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00100 ; CONSTANT s4 : STD_LOGIC_VECTOR(4 DOWNTO 0) := 00110 ; SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN Q = REGL; ADDA = 0; PROCESS(cs,EOC) BEGIN -规定各状态转换方式规定各状态转换方式 IF RST=1 THEN

温馨提示

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

评论

0/150

提交评论