《电子设计自动化第五章》由会员分享,可在线阅读,更多相关《电子设计自动化第五章(80页珍藏版)》请在金锄头文库上搜索。
1、第五章 有限状态机设计第一节 一般状态机的设计一、一、1、数据类型定义语句数据类型定义语句 子类型子类型SUBTYPE的语句格式如下:的语句格式如下:SUBTYPE SUBTYPE 子子类类型型名名 IS IS 基基本本数数据据类类型型 RANGE RANGE 约约束范围束范围; ;SUBTYPE digits IS INTEGER RANGE 0 to 9 ;SUBTYPE digits IS INTEGER RANGE 0 to 9 ;2、枚举类型枚举类型 枚举类型是用文字符号来表示一组实际枚举类型是用文字符号来表示一组实际的二进制数。的二进制数。TYPE m_state IS (s0,s
2、1,s2,s3); SIGNAL current_state, next_state: m_state ; 二、二、有限状态机的优越性有限状态机的优越性 有限状态机克服了纯硬件数字系统顺序方式控制不有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。灵活的缺点。 状态机的结构模式相对简单。状态机的结构模式相对简单。 状态机容易构成性能良好的同步时序逻辑模块。状态机容易构成性能良好的同步时序逻辑模块。 状态机的状态机的VHDLVHDL表述丰富多样。表述丰富多样。 在高速运算和控制方面,状态机更有其巨大的优势。在高速运算和控制方面,状态机更有其巨大的优势。 就可靠性而言,状态机的优势也是十分明
3、显的。就可靠性而言,状态机的优势也是十分明显的。三、一般状态机的设计 最常用的状态机通常包含最常用的状态机通常包含说明部分说明部分、主主控时序进程控时序进程、主控组合进程主控组合进程、辅助进程辅助进程几部分。几部分。(1)说明部分说明部分完成对新数据类型(状态类型,即状态完成对新数据类型(状态类型,即状态名)和状态变量的定义名)和状态变量的定义TYPE STATE IS (IDLE,DECISION,READ,WRITE)-枚举状态类型枚举状态类型SIGNAL PRESENT_STATE,NEXT_STATE:STATE ;-定义信号定义信号(2)主控时序进程主控时序进程 完成当前状态向下一个
4、的跃迁,但不完成当前状态向下一个的跃迁,但不负责进入下一状态的具体状态取值,只负责进入下一状态的具体状态取值,只是在时钟沿到来时,当前状态进入下一是在时钟沿到来时,当前状态进入下一个状态。个状态。 在这一部分也可完成在这一部分也可完成同步同步或或异步清零异步清零或或置位置位方面的控制信号。方面的控制信号。(3)主控组合进程主控组合进程根据根据外部输入的控制信号外部输入的控制信号(包括来自(包括来自状态机的外部信号和来自状态机内部其状态机的外部信号和来自状态机内部其它非主控的组合或时序进程的信号)、它非主控的组合或时序进程的信号)、或(和)或(和)当前状态的状态值当前状态的状态值确定下一状确定下
5、一状态的取向,以及确定对外输出或对内部态的取向,以及确定对外输出或对内部其它组合或时序进程输出控制信号的内其它组合或时序进程输出控制信号的内容。容。(4)辅助进程辅助进程:用于配合状态机工作的其:用于配合状态机工作的其他组合进程和时序进程。他组合进程和时序进程。状态机的建立过程一、一、利用可枚举的状态类型定义信号利用可枚举的状态类型定义信号TYPE STATE IS (IDLE,DECISION,READ,WRITE)-枚举状态类型枚举状态类型SIGNAL PRESENT_STATE,NEXT_STATE:STATE TYPE-定义信号定义信号二、建立状态机的主控时序进程和主控组合进程 主控时
6、序进程完成主控时序进程完成进程的跃迁进程的跃迁,主控组合,主控组合进程定义状态的进程定义状态的转移方向和输出转移方向和输出。由于次态是。由于次态是现态及输入信号的函数,所以现态及输入信号的函数,所以状态状态均为进程的均为进程的敏感信号。敏感信号。STATE_COMB: PROCESS (PRESENT_STATE,READ,WRITE,IDLE)BEGINEND PROCESS STATE_COMB;三、在主控组合进程中定义状态的转移 在进程中插入在进程中插入CASE WHEN 语句,语句,因为因为空闲语句空闲语句是状态的起点和终点,因是状态的起点和终点,因此,作为此,作为WHEN 之后的第一
7、项,再列出之后的第一项,再列出状态转移到其他状态的条件,即可写出状态转移到其他状态的条件,即可写出状态转移的流程。状态转移的流程。第二节 Moore型有限状态机的设计型有限状态机的设计 从状态机的信号输出方式分:从状态机的信号输出方式分:Moore型型和和Mealy型型两类状态机。从输出时序上看,前者属于两类状态机。从输出时序上看,前者属于同步输出同步输出状态机,后者属于状态机,后者属于异步输出异步输出状态机。状态机。 Mealy型状态机的输出是型状态机的输出是当前状态当前状态和和所有输入信号所有输入信号的的函数,它的输出是在输入变化后立即发生的,不依函数,它的输出是在输入变化后立即发生的,不
8、依赖时钟的同步。赖时钟的同步。Moore型状态机的输出型状态机的输出仅为当前状态仅为当前状态的函数,这类的函数,这类状态机在输入发生变化后还必须等待时钟的到来,状态机在输入发生变化后还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化所以比时钟使状态发生变化时才导致输出的变化所以比Mealy型状态机要多等待一个时钟周期。型状态机要多等待一个时钟周期。一、一、三进程有限状态机三进程有限状态机以以A/DA/D采样控制器的设计为例采样控制器的设计为例1、应用状态机设计控制器方法简述、应用状态机设计控制器方法简述(1)分分析析控控制制器器设设计计指指标标,建建立立系系统统算算法法模模型型图;图;
9、(2)分分析析被被控控对对象象的的时时序序状状态态,确确定定控控制制器器有有限状态机的各个状态,及输入限状态机的各个状态,及输入/输出条件;输出条件;(3)应用)应用VHDL语言完成描述。语言完成描述。2、 AD0809采样控制器的设计采样控制器的设计ADC0809为单极性输入,为单极性输入,8位转换逐次逼近位转换逐次逼近A/D转换器,可转换器,可对对05V的的INT0INT7的的8路模拟信号分时进行转换,完成路模拟信号分时进行转换,完成一次转换的时间约为一次转换的时间约为100微秒。微秒。其其中中D7D0为为A/D变变换换数数据据输输出出;ADD-CBA为为8路路通通道道选选择择地地址址;S
10、TART信信号号是是转转换换启启动动信信号号,上上升升沿沿有有效效;EOC为为状状态态结结束束标标志志,低低电电平平转转为为高高电电平平时时转转换换结结束束;OE为为数数据据输输出出允允许许信信号号,高高电电平平有有效效; ALE为为地地址址锁锁存存允允许许信信号号;LOCK为数据锁存信号。为数据锁存信号。在在转转换换开开始始前前,ADC0809需需要要在在ALE上上升升沿沿控控制制下下,将将3位位8路路通通道道选选择择地地址址锁锁入入锁锁存存器器,以以确确定定转转换换信信号号通通道道;然然后后在在时时钟钟的的下下降降沿沿产产生生START信信号号启启动动转转换换,这这时时ADC0809的的E
11、OC信信号号由由高高电电平平转转为为低低电电平平,开开始始数数据据转转换换,直直到到EOC信信号号低低电电平平转转为为高高电电平平时时转转换换结结束束;之之后后使使能能OE信信号号,使使转转换换数据输出。数据输出。 系统级的设计是控制器设计的步骤系统级的设计是控制器设计的步骤:第第一一步步,是是将将控控制制器器指指标标规规范范用用自自然然语语言言描描述述,并并将将其其语语言言描描述述转转换换为为真真值值表表、状状态态图图或或算算法法模模型型的的过过程。程。 对对于于VHDL语语言言来来说说,系系统统级级的的设设计计就就是是用用一一系系列列相相互互关关联联的的进进程程组组成成硬硬件件算算法法模模
12、型型,即即将将描描述述系系统统功功能能的的自自然然语语言言翻翻译译为为进进程程,每每个个进进程程完完成成不不同同的功能,并通过进程模型图来表示。的功能,并通过进程模型图来表示。 在在ADC0809控控制制器器的的设设计计中中,可可以以将将其其划划分分为为三三个个进进程程,即即状状态态生生成成进进程程、状状态态转转换换进进程程、状状态态机输出进程机输出进程。三部分关系见图。三部分关系见图1所示。所示。二、状态划分 在在进进行行控控制制部部分分状状态态机机的的设设计计过过程程中中,主主要要是是分分析析ADC0809的的时时序序来来确确定定状状态态转转换换进进程程中中的的各各个个状状态态,几几个个状
13、状态态下的控制信号输出。下的控制信号输出。 根据以上设计思想和根据以上设计思想和VHDL语言的特点,语言的特点,控制器的状态生成进程以控制器的状态生成进程以时钟信号时钟信号为敏感量,为敏感量,当时钟发生有效跳变时,状态机的状态发生当时钟发生有效跳变时,状态机的状态发生变化,即产生下一状态。而状态转换进程采变化,即产生下一状态。而状态转换进程采用用组合逻辑进程组合逻辑进程,使用,使用CASE语句语句检查状态机检查状态机的当前状态,然后使用的当前状态,然后使用IF-THEN-ELSE语句语句决定下一状态。这种描述风格产生结构化的决定下一状态。这种描述风格产生结构化的VHDL代码,并且可读性好。代码
14、,并且可读性好。ADC08090809将将0-5V输入输入模拟电压通过模拟电压通过FPGA中的状态机中的状态机转换输出为转换输出为16进进制数:制数:“9D”旋转此电位器旋转此电位器可改变可改变0809的的输出输出注意转换输出注意转换输出已改变为:已改变为:7C3、单进程单进程Moore型有限状态机型有限状态机 由于输出信号由组合进程发出,在由于输出信号由组合进程发出,在特定情况下,难免出现特定情况下,难免出现毛刺现象毛刺现象,所以,所以利用利用单进程单进程Moore状态机来避免产生毛状态机来避免产生毛刺。刺。第三节第三节 Mealy型有限状态机的设计型有限状态机的设计【例例8-6】 MEAL
15、Y2 LIBRARY IEEE; -MEALY FSMUSE IEEE.STD_LOGIC_1164.ALL;ENTITY MEALY2 IS PORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0);END MEALY2;ARCHITECTURE behav OF MEALY2 IS TYPE states IS (st0, st1, st2, st3,st4); SIGNAL STX : states ; SIGNAL Q1 : STD_LOGIC_VECTOR(4 DOWNTO 0); BE
16、GIN 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 THEN STX STX = st0; END CASE ; 接下页接下页IF CLKEVENT AND CLK = 1 THEN Q1=Q2; END IF; END PROCESS COM1 ; Q IF DATAIN = 1
17、 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 DATAIN = 1 THEN Q2 := 11101 ;
18、ELSE Q2:=01101 ; END IF ; WHEN OTHERS = Q2:=00000 ; END CASE ; 接下页接下页由由CPLD/FPGA中中的状态机来控制的状态机来控制AD574的采样操作的采样操作RAM在此适配在此适配板下面板下面高速晶振高速晶振单片机单片机适配板下的AD574ARCSTATUSD11.0AD574启动时序20usZ/CS图图7-3 AD574工作时序工作时序 图图7-4 AD574工作时序工作时序图图7-5 采样状态机结构框图采样状态机结构框图【例例】LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY
19、AD574 IS PORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC;-状态机时钟状态机时钟CLK,AD574状态信号状态信号STATUS 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 AD57
20、4 ISTYPE 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 CS=1;
21、 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 RE
22、G; LATCH1 : PROCESS (LOCK) - 数据锁存器进程数据锁存器进程 BEGIN IF LOCK=1 AND LOCKEVENT THEN REGL = D ; END IF; END PROCESS ; Q = REGL; END behav;接上页接上页图图8-6 AD574采样状态机工作时序采样状态机工作时序第四节第四节 状态编码状态编码状态位直接输出型编码状态位直接输出型编码接下页接下页接下页接下页接上页接上页2 顺序编码顺序编码3 一位热码编码(一位热码编码(One-hot encoding)图图7-13 一位热码编码方式选择窗一位热码编码方式选择窗状态机编码方式设置状态机编码方式设置第五节第五节 非法状态处理非法状态处理状态机状态机 VHDL基本语法小结基本语法小结 状态编码符号化,用户数据类型和子类型定义: TYPE,SUBTYPE定义FSM的现态和次态:current_state , next_state 可设置多个进程:至少含一个主控时序进程和一个主控组合进程 ,主控时序进程作为FSM的驱动泵;主控组合进程控制FSM的工作顺序 组合进程中使用 CASE 语句 其它辅助进程可以有时序和组合进程 配合FSM主机工作 可以有多个FSM并行工作 对于多个FSM,采用单一时钟同步时序 容易协调控制所有FSM的工作