资源预览内容
第1页 / 共80页
第2页 / 共80页
第3页 / 共80页
第4页 / 共80页
第5页 / 共80页
第6页 / 共80页
第7页 / 共80页
第8页 / 共80页
第9页 / 共80页
第10页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章 有限状态机设计第一节 一般状态机的设计一、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 ; 二、有限状态机的优越性 有限状态机克服了纯硬件数字系统顺序方式控制不 灵活的缺点。 状态机的结构模式相对简单。 状态机容易构成性能良好的同步时序逻辑模块。 状态机的VHDL表述丰富多样。 在高速运算和控制方面,状态机更有其巨大的优势。 就可靠性而言,状态机的优势也是十分明显的。三、一般状态机的设计最常用的状态机通常包含说明部分、主 控时序进程、主控组合进程、辅助进程 几部分。(1)说明部分 完成对新数据类型(状态类型,即状态 名)和状态变量的定义 TYPE STATE IS (IDLE,DECISION,READ, WRITE) -枚举状态类型 SIGNAL PRESENT_STATE,NEXT_STATE:STATE ; -定义信号(2)主控时序进程完成当前状态向下一个的跃迁,但不 负责进入下一状态的具体状态取值,只 是在时钟沿到来时,当前状态进入下一 个状态。在这一部分也可完成同步或异步清零 或置位方面的控制信号。(3)主控组合进程 根据外部输入的控制信号(包括来自 状态机的外部信号和来自状态机内部其 它非主控的组合或时序进程的信号)、 或(和)当前状态的状态值确定下一状 态的取向,以及确定对外输出或对内部 其它组合或时序进程输出控制信号的内 容。(4)辅助进程:用于配合状态机工作的其 他组合进程和时序进程。状态机的建立过程一、利用可枚举的状态类型定义信号TYPE STATE IS (IDLE,DECISION,READ,WRITE) -枚举状态类型 SIGNAL PRESENT_STATE,NEXT_STATE:STATE TYPE -定义信号二、建立状态机的主控时序进程和主控组合进程主控时序进程完成进程的跃迁,主控组合 进程定义状态的转移方向和输出。由于次态是 现态及输入信号的函数,所以状态均为进程的 敏感信号。 STATE_COMB: PROCESS (PRESENT_STATE,READ,WRITE,IDLE) BEGINEND PROCESS STATE_COMB;三、在主控组合进程中定义状态的转移在进程中插入CASE WHEN 语句, 因为空闲语句是状态的起点和终点,因 此,作为WHEN 之后的第一项,再列出 状态转移到其他状态的条件,即可写出 状态转移的流程。第二节 Moore型有限状态机的设计从状态机的信号输出方式分:Moore型和 Mealy型两类状态机。从输出时序上看,前者属于 同步输出状态机,后者属于异步输出状态机。 Mealy型状态机的输出是当前状态和所有输入信号的 函数,它的输出是在输入变化后立即发生的,不依 赖时钟的同步。 Moore型状态机的输出仅为当前状态的函数,这类 状态机在输入发生变化后还必须等待时钟的到来, 时钟使状态发生变化时才导致输出的变化所以比 Mealy型状态机要多等待一个时钟周期。一、三进程有限状态机 以A/D采样控制器的设计为例 1、应用状态机设计控制器方法简述 (1)分析控制器设计指标,建立系统算法模型 图; (2)分析被控对象的时序状态,确定控制器有 限状态机的各个状态,及输入/输出条件; (3)应用VHDL语言完成描述。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的 EOC信号由高电平转为低电平,开始数据转换,直到EOC信 号低电平转为高电平时转换结束;之后使能OE信号,使转换 数据输出。 系统级的设计是控制器设计的步骤: 第一步,是将控制器指标规范用自然语言描述,并将 其语言描述转换为真值表、状态图或算法模型的过 程。对于VHDL语言来说,系统级的设计就是用一系 列相互关联的进程组成硬件算法模型,即将描述系 统功能的自然语言翻译为进程,每个进程完成不同 的功能,并通过进程模型图来表示。在ADC0809控制器的设计中,可以将其划分为 三个进程,即状态生成进程、状态转换进程、状态 机输出进程。三部分关系见图1所示。二、状态划分在进行控制部分状态机的设计过程 中,主要是分析ADC0809的时序来确定 状态转换进程中的各个状态,几个状态 下的控制信号输出。根据以上设计思想和VHDL语言的特点 ,控制器的状态生成进程以时钟信号为敏感 量,当时钟发生有效跳变时,状态机的状态 发生变化,即产生下一状态。而状态转换进 程采用组合逻辑进程,使用CASE语句检查状 态机的当前状态,然后使用IF-THEN-ELSE 语句决定下一状态。这种描述风格产生结构 化的VHDL代码,并且可读性好。ADC08090809将0-5V输入 模拟电压通过 FPGA中的状态机 转换输出为16进 制数:“9D”旋转此电位器 可改变0809的 输出注意转换输出 已改变为:7C3、单进程Moore型有限状态机由于输出信号由组合进程发出,在 特定情况下,难免出现毛刺现象,所以 利用单进程Moore状态机来避免产生毛 刺。第三节 Mealy型有限状态机的设计【例8-6】 MEALY2 LIBRARY IEEE; -MEALY FSM USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY2 ISPORT ( CLK ,DATAIN,RESET : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0); END MEALY2; ARCHITECTURE behav OF MEALY2 ISTYPE states IS (st0, st1, st2, st3,st4); SIGNAL 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 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 DATAIN = 1 THEN Q2 := “11101“ ; 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 AD574 ISPORT (D :IN STD_LOGIC_VECTOR(11 DOWNTO 0); CLK ,STATUS : IN STD_LOGIC;-状态机时钟CLK,AD574状态信号STATUSLOCK0 : 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 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; BEGINK12X8 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) - 时序进程 BEGINIF ( CLKEVENT AND CLK=1) THEN current_state = next_state; END IF;END PROCESS REG; LATCH1 : PROCESS (LOCK) - 数据锁存器进程BEGINIF 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的驱动泵;主控组合
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号