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