第7章VHDL有限状态机设计N_第1页
第7章VHDL有限状态机设计N_第2页
第7章VHDL有限状态机设计N_第3页
第7章VHDL有限状态机设计N_第4页
第7章VHDL有限状态机设计N_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、EDA技术实用教程技术实用教程第第7 7章章 VHDL有限状态机设计有限状态机设计 q有限状态机及其设计技术,时使用数字系统设计中的重要组成部分,是实现高效、高可靠性逻辑控制的重要途径。q面对先进的EDA技术,有限状态机在具体的设计技术和实现方法上又有了许多新的内容。q本章重点介绍用VHDL设计不同类型有限状态机的方法,同时考虑设计中许多重点关注的问题。 内容提要特点特点: 用用VHDL可以设计出不同表达方式可以设计出不同表达方式和不同功能的状态机,然而它们都有相和不同功能的状态机,然而它们都有相对固定的语句和表达方式。对固定的语句和表达方式。 为什么要使用状态机为什么要使用状态机q有限状态机

2、克服了纯硬件数字系统顺序方式控制不灵活的缺点。q状态机的结构模式相对简单。q状态机容易构成性能良好的同步时序逻辑模块。q在高速运算和控制方面,状态机更有其巨大的优势。q就可靠性而言,状态机的优势也是十分明显的。7.1. 一般有限状态机一般有限状态机 的设计的设计 用户自定义数据类型定义语句用户自定义数据类型定义语句TYPE语句用法如下:TYPETYPE 数据类型名 ISIS 数据类型定义 OFOF 基本数据类型 ;或TYPETYPE 数据类型名 ISIS 数据类型定义 ;例如:以下列出了几种不同的定义方式:TYPE st1 IS ARRAY ( 0 TO 15 ) OF STD_LOGIC ;

3、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 ;布尔数据类型的定义语句是: TYPE BOOLEAN IS (FALSE,TRUE) ;TYPE my_logic IS ( 1 ,Z ,U ,0 ) ;SIGNAL s1 : my_logic ;s1 = Z ; 子类型SUBTYPESUBTYPE的语句格式如下:SUBTYPESUBTYPE 子类型名 ISIS 基本数据类型 RA

4、NGERANGE 约束范围; 例如:SUBTYPESUBTYPE digits digits ISIS INTEGERINTEGER RANGERANGE 0 to 9 0 to 9 ; 一般有限状态机的设计1. 1. 说明部分说明部分 说明部分中使用TYPE语句定义新的数据类型,该类型为枚举型,其元素通常都用状态机的状态名来定义。 状态变量应定义成信号,便于信息的传递;并将状态变量的数据类型定义为含有既定状态元素的行定义的数据类型。ARCHITECTURE .IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state:

5、FSM_ST; . 2. 2. 主控时序进程主控时序进程 主控时序进程负责状态机的运转和在时钟驱动下负责状态转换的进程。状态机时随外部时钟信号,以同步时序方式工作的。因此,状态机中必须包含一个对工作时钟信号敏感的进程,作为状态机的“驱动泵”。 当时钟发生有效跳变时,状态机的状态才发生变化。一般地,主控时序进程可以不负责下一状态的具体取值。REG: PROCESS (reset,clk) 主控时序进程 BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state comb_outpu

6、ts= 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; IF state_inputs = 11 THEN next_state = s3; ELSE next_state = s0; E

7、ND IF; END case; END PROCESS; END behv;主控组合进程完成的功能:状态译码1、根据信号current_state中的状态值,进入相应的状态;2、并在此状态中向外部发出控制信号comb_outputs;3、确定下一状态next_state的走向。com b_outputsstate_inputsresetclkF S M :s_m achineC O Mnext_statecurrent_stateP R O C E S SR E GP R O C E S S用于配合状态及工作的组合进程或时序进程。4. 4. 辅助进程辅助进程【例7-1】LIBRARY IEE

8、E;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, s2, s3); SIGNAL current_state, next_state: FSM_ST;BEGIN R

9、EG: 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 next_state comb_outputs= 8; IF state_inputs = 00 THEN next_state=s1; ELSE next_state comb_outputs= 12; IF s

10、tate_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 behv;接上页接上页com b_outputsstate_inputsresetclkF S M :s_m achineC O Mnext_statecurrent_stateP R O C E S SR E GP R O C E S S4. 4.

11、辅助进程辅助进程用于配合状态机工作的组合进程或时序进程。例如为了稳定输出三个值的数据锁存器等。图图7-2 例例7-1状态机的工作时序图状态机的工作时序图7.2 Moore型有限型有限 状态机的设计状态机的设计从信号输出方式上分类从信号输出方式上分类:Moor型状态机型状态机 属于异步输出状态机,输出仅为当前状态的函数。这类状态机在输入发生变化,还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化。Mealy型状态机型状态机 属于同步输出状态机,输出是当前状态和所有输入信号的函数。这类状态机的输出是在输入发生变化后立即发生的,不依赖时钟的同步。图图7-2 例例7-1状态机的工作时序图状态机

12、的工作时序图7.2.1 7.2.1 三进程有三进程有限状态机限状态机Moore型状态机应用实例:A/D采样控制器AD574:12位模数转换器,转换速度20us采样50点所需时间:20us*50=1ms一个采样周期的操作:1、初始化AD574;2、启动采样;3、等待20us;4、发读取命令;5、分两次读取数据;分两次存数到外部RAM;7、外部RAM增址。用单片机实现: 整个周期需用CPU指令30条,每条指令平均2个机器周期,设CPU时钟为12MHz,则机器周期为1us,30条指令为60us,加上AD574采样周期的20us,共80us。50个采样周期需4ms。用状态机实现: 整个采样周期需要4至

13、5个状态即可完成。若FPGA的时钟频率为100MHz,状态转移时间为一个时钟周期,即10ns,一个采样周期约50ns,不到单片机60us采样周期的千分之一。CECS RC K12/8 A0工 作 状 态0XXXX禁止X1XXX禁止100X0启动12位转换100X1启动8位转换1011X12位并行输出有效10100高8位并行输出有效10101低4位加上尾随4个0有效表表7-1 AD574逻辑控制真值表(逻辑控制真值表(X表示任意)表示任意)图图7-3 AD574工作时序工作时序 图图7-4 AD574工作时序工作时序图图7-5 采样状态机结构框图采样状态机结构框图【例例7-2】LIBRARY I

14、EEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ad574 IS PORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC;-状态机时钟CLK,AD574状态信号 LOCK0 : 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

15、 ad574 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL current_state, next_state: states :=st0 ; SIGNAL REGL : STD_LOGIC_VECTOR(11 DOWNTO 0); SIGNAL LOCK : STD_LOGIC; BEGIN K12X8 = 1; LOCK0 next_state next_state IF (STATUS=1) THEN next_state = st2; ELSE next_state next_state next_state next_state

16、 CS=1; A0=1;RC=1;LOCK CS=0; A0=0;RC=0;LOCK CS=0; A0=0;RC=0;LOCK CS=0; A0=0;RC=1;LOCK CS=0; A0=0;RC=1;LOCKCS=1; A0=1;RC=1;LOCK=0;-其它返回初始态 END CASE ;END PROCESS COM2 ;REG: PROCESS (CLK) - 时序进程 BEGIN IF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF;END PROCESS REG; LATCH1 : PROCESS (LOC

17、K) - 数据锁存器进程 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF;END PROCESS ; Q next_state = st1; CS=1; A0=1;RC=1;LOCK next_state = st2; CS=0; A0=0;RC=0;LOCK IF (STATUS=1) THEN next_state = st2; ELSE next_state = st3; END IF ; CS=0; A0=0;RC=0;LOCK next_state = st4; CS=0; A0=0;RC=1;LOCK next_state

18、= st0; CS=0; A0=0;RC=1;LOCK next_state = st0; END CASE ;END PROCESS COM ; PROCESSREG时序进程PROCESSCOM组合进程PROCESSLATCH锁存器current_statenext_stateLOCK状态机FSMFPGA/CPLDFPGA/CPLDCLK CS A0 RC K12/8 STATUSD11.0AD574Q11.0模拟信号输入采样数据输出7.2.2 单进程单进程Moore型型 有限状态机有限状态机【例例7-4】单进程状态机LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.

19、ALL;ENTITY MOORE1 IS PORT (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 ST_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST : ST_TYPE ;BEGIN PROCESS(CLK,RST) BEGIN IF RST =1 THEN C_ST = ST0 ; Q IF D

20、ATAIN =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 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 = S

21、T0; END CASE; END IF; END PROCESS;END behav;接上页接上页接上页接上页CASE语句处于测试时钟上升沿的条件语句中,因此在综合中对Q的赋值操作必然引起对Q的锁存。由于Q的输出信号在下一状态出现时,有时钟上升沿锁入锁存器后输出,即有时序器件同步输出,从而很好地避免了竞争冒险现象。图图7-7 例例7-4状态机综合后的状态机综合后的RTL电路模块图电路模块图图图7-8 例例7-4单进程状态机工作时序单进程状态机工作时序图图7-9 对应于例对应于例7-4的的2进程状态机工作时序图进程状态机工作时序图 7.3. Mealy型有限型有限 状态机的设计状态机的设计从信

22、号输出方式上分类从信号输出方式上分类:Moor型状态机型状态机 属于异步输出状态机,输出仅为当前状态的函数。这类状态机在输入发生变化,还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化。Mealy型状态机型状态机 属于同步输出状态机,输出是当前状态和所有输入信号的函数。这类状态机的输出是在输入发生变化后立即发生的,不依赖时钟的同步。【例例7-5】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY1 ISPORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECT

23、OR(4 DOWNTO 0);END MEALY1;ARCHITECTURE behav OF MEALY1 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; BEGIN COMREG : PROCESS(CLK,RESET) BEGIN -决定转换状态的进程 IF 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 T

24、HEN 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 ; ELSE Q IF DATAIN = 1 THEN Q = 11101 ; ELSE Q Q=00000 ; END CASE ;END PROCESS COM1 ;END behav; q进程COM1负责根据状态和输入信号给出不同的输出信号。q与Moore型状态机相同, Mealy机

25、的组合进程中的输出信号是当前状态和当前输入的函数。用于配合状态及工作的组合进程或时序进程。4. 4. 辅助进程辅助进程【例7-1】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

26、FSM_ST IS (s0, s1, s2, 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 next_state=s0; ELSE next_state comb_outputs= 8; IF

27、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 IF DATAIN = 1 THEN Q2 := 10000 ; ELSE Q2 := 01010 ;END IF ; WHEN st1 = IF DATAIN = 0 THEN Q

28、2 := 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 OTHERS = Q2:=00000 ; END CASE ; IF CLKEVENT AND CLK

29、= 1 THEN Q1=Q2; END IF; END PROCESS COM1 ;Q = Q1 ;END behav;图图7-11 例例7-6状态机工作时序图状态机工作时序图【例例7-4】单进程状态机LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MOORE1 IS PORT (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

30、MOORE1 IS TYPE ST_TYPE IS (ST0, ST1, ST2, ST3,ST4); SIGNAL C_ST : ST_TYPE ;BEGIN PROCESS(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

31、 ;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 next_state next_state IF (STATUS=1) THEN next_state = st2; ELSE next_state next_state next_state next_state = st0; END CASE ; OUT4 = current_state(4 DOWNTO 1); END P

32、ROCESS COM1 ;REG: PROCESS (CLK) - 时序进程 BEGIN IF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF; END PROCESS REG; LK = current_state(1) ; LATCH1 : PROCESS ( LK ) - 数据锁存器进程 BEGIN IF LK=1 AND LKEVENT THEN REGL = D ; END IF; END PROCESS ; Q next_statenext_state next_state = st0; END case;

33、 状态机剩余状态处理状态机剩余状态处理【例例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 OR st3

34、 OR st4) ; 状态机剩余状态处理状态机剩余状态处理 一位热键编码方式状态机剩余状态处理一位热键编码方式状态机剩余状态处理 鉴于一位热码编码方式的特点,正常的状态只可能有1个触发器的状态为1,其余所有的触发器的状态皆为0,即任何多于1个触发器为1的状态都属于非法状态。 CLKRSTENA 数码管动态扫描计数显示模块 模块介绍1、DIV模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div is port( clk:in std_logic; outy:out std_log

35、ic);end div; architecture behav of div is signal sig : std_logic; signal count :std_logic_vector(9 downto 0); begin process(clk) begin if( clkEVENT and clk=1) then if (count=1111111111) then count0);sig=1; else count = count + 1; sig=0; end if; end if;end process;outy=sig;end behav; 模块介绍2、COUNT10模块L

36、IBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.sTD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT ( CLK : IN STD_LOGIC; RST : IN STD_LOGIC; ENA : IN STD_LOGIC; COUT : OUT STD_LOGIC; OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNT10;ARCHITECTURE BEHAV OF CNT10 IS signal CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);

37、BEGIN P_REG: PROCESS(CLK,RST,ENA) BEGIN IF RST=1 THEN CQI= 0000; ELSIF CLKEVENT AND CLK= 1 THEN IF ENA=1 THEN IF CQI1001 THEN CQI=CQI+1; ELSE CQI=0000; END IF; END IF; END IF; if CQI=0000 then count=1; else cout=0; end if; OUTY=CQI; END PROCESS P_REG; END BEHAV; 模块介绍3、CNT4模块LIBRARY IEEE;use ieee.std

38、_logic_1164.all;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt4 IS PORT( clk : in std_logic; date : out std_logic_vector(1 downto 0);end cnt4; architecture rtl of cnt4 is signal date_tmp : std_logic_vector(1 downto 0);begin process( clk) begin if(clkEVENT and clk=1) then IF (date_tmp=11) THEN date_tmp0)

39、; ELSE date_tmp=date_tmp+1; END IF; end if; date=date_tmp; end process;end rtl; 模块介绍4、BITSEL模块LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY bitsel ISPORT( B : IN STD_LOGIC_VECTOR(1 DOWNTO 0);BSEL : OUTSTD_LOGIC_VECTOR(3 downto 0);END BITSEL;ARCHITECTURE BEHAV OF bitsel ISBEGIN BSEL =0001 WHEN B=0 ELSE 0010 WHEN B=1 ELSE 0100 WHEN B=2 ELSE 1000 WHEN B=3 ELSE 0000; END BEHAV; 模块介绍5、LED8S模块-LIBRARY IEEE;USE IEEE.STD_LOG

温馨提示

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

评论

0/150

提交评论