资源预览内容
第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
第9页 / 共41页
第10页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
竞争与冒险在组合逻辑电路中,输入到同一个门的一组信号,或由于来自于不同的路径,或由于通过门的个数不同,或由于经过不同长度的传输线,或由于各信号输出门的差异等,致使这些信号到达门电路输入端的时间有早有晚,这种现象叫做竞争。由于在门的输入端有竞争而导致在其输出产生了干扰脉冲,则称为冒险。竞争冒险举例有竞争不一定会产生冒险,但有冒险必然是由竞争引起的。冒险的危害在计数器电路中,如果输入有冒险,就会产生错误的计数 低速电路常用消抖方法竞争和冒险在组合逻辑电路中普遍存在,竞争现象客观存在无法消除。 在输出端对地接一几百PF的小电容C,将输出端的干扰脉冲抑制到门电路的翻转电平门限之外.缺点:仅适用于低速电路。高速电路外部消抖在高速系统中,对数字信号的延迟及其边沿的上升、下降时间有严格的限制,如MAX7000和74ACT器件要求输入上升时间和下降时间的典型值为3ns,加入几百PF的电容会使其边沿时间大大超过该值,所以对输出信号滤波是不允许的;但对于74HC系列器件的边沿时间最长可以到500ns,对输出信号用小电容滤波是允许的。同步电路消除冒险 用触发器及同步脉冲CP对输入输出进行同步可以消除部分竞争与冒险 VHDL程序architecture a of synand_or issignal qa,qb,y1,y2:std_logic; beginp1:process(cp)beginif cpevent and cp=1 thenqa=a;qb=b;end if;end process p1;y1=qa and qb;y2=qa or qb; p2:process(cp)beginif cpevent and cp=1 thenq1=y1;q2=y2;end if;end process p2;end a; 软件消抖举例process(grst,fosc) variable state_cnt : integer range 0 to 10;variable state_st : integer range 0 to 1;beginif grst = 0 thenstate_cnt := 0;state1 if state = 0 and state_cnt 5 thenstate_cnt := state_cnt + 1;elsif state = 0 and state_cnt = 5 thenstate1 = 0;state_st := 1;elsestate1 if state = 1 and state_cnt 5 thenstate_cnt := state_cnt + 1;elsif state = 1 and state_cnt = 5 thenstate1 = 1;state_st := 0;elsestate1 = 0;state_cnt := 0;end if;end case;end if;end process pro4;状态机的优越性1有限状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态机的工作方式是根据控制信号按照预先设定的状态进行顺序运行的,状态机是纯硬件数字系统中的顺序控制电路,因此状态机在其运行方式上类似于控制灵活和方便的CPU,而在运行速度和工作可靠性方面都优于CPU。状态机的优越性2由于状态机的结构模式相对简单,设计方案相对固定,特别是可以定义符号化枚举类型的状态,这一切都为VHDL 综合器尽可能发挥其强大的优化功能提供了有利条件。而且,性能良好的综合器都具备许多可控或自动的专门用于优化状态机的功能。状态机的优越性3状态机容易构成性能良好的同步时序逻辑模块,这对于对付大规模逻辑电路设计中令人深感棘手的竞争冒险现象无疑是一个上佳的选择。为了消除电路中的毛刺现象,在状态机设计中有多种设计方案可供选择。状态机的优越性4与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样、程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的特点。 状态机的优越性5 就运行速度而言,尽管CPU和状态机都是按照时钟节拍以顺序时序方式工作的,但CPU是按照指令周期,以逐条执行指令的方式运行的;每执行一条指令,通常只能完成一项简单的操作,而一个指令周期须由多个机器周期构成,一个机器周期又由多个时钟节拍构成;一个含有运算和控制的完整设计程序往往需要成百上千条指令。相比之下,状态机状态变换周期只有一个时钟周期,而且,由于在每一状态中,状态机可以完成许多并行的运算和控制操作,所以,一个完整的控制程序,即使由多个并行的状态机构成,其状态数也是十分有限的。一般由状态机构成的硬件系统比CPU所能完成同样功能的软件系统的工作速度要高出三至四个数量级。 状态机的优越性6就可靠性而言,状态机的优势也是十分明显的。CPU本身的结构特点与执行软件指令的工作方式决定了任何CPU都不可能获得圆满的容错保障。因此,用于要求高可靠性的特殊环境中的电子系统中,如果以CPU作为主控部件,应是一项错误的决策。然而,状态机系统就不同了,首先它是由纯硬件电路构成,不存在CPU运行软件过程中许多固有的缺陷;其次是由于状态机的设计中能使用各种完整的容错技术;再次是当状态机进入非法状态并从中跳出,进入正常状态所耗的时间十分短暂,通常只有2、3个时钟周期,约数十个ns,尚不足以对系统的运行构成损害;而CPU通过复位方式从非法运行方式中恢复过来,耗时达数十ms,这对于高速高可靠系统显然是无法容忍的。状态机分类从状态机的信号输出方式上分有Mealy型和Moore型两种状态机;从结构上分,有单进程状态机和多进程状态机;从状态表达方式上分有符号化状态机和确定状态编码的状态机;从编码方式上分有顺序编码状态机、一位热码编码状态机或其他编码方式状态机。然而最一般和最常用的状态机通常包含说明部分、主控时序进程、主控组合进程、辅助进程几个部分。某状态机举例说明部分说明部分中使用TYPE语句定义新的数据类型,此数据类型为枚举型,其元素通常都用状态机的状态名来定义。状态变量 (如现态和次态) 应定义为信号,便于信息传递;并将状态变量的数据类型定义为含有既定状态元素的新定义的数据类型。说明部分一般放在结构体的ARCHITECTURE和BEGIN之间,例如: ARCHITECTURE IS TYPE FSM_ST IS (s0,s1,s2,S3); SIGNAL current_state,next_state: FSM_ST;主控时序进程所谓主控时序进程是指负责状态机运转和在时钟驱动下负责状态转换的进程。状态机是随外部时钟信号,以同步时序方式工作的。因此,状态机中必须包含一个对工作时钟信号敏感的进程,作为状态机的“驱动泵” 。当时钟发生有效跳变时,状态机的状态才发生变化。状态机向下一状态(包括再次进入本状态)转换的实现仅仅取决于时钟信号的到来。一般地,主控时序进程可以不负责下一状态的具体状态取值,如s0、s1、s2、s3中的某一状态值。当时钟的有效跳变到来时,时序进程只是机械地将代表次态的信号nextstate中的内容送入现态的信号current state中,而信号nextstate中的内容完全由其他的进程根据实际情况来决定,当然此进程中也可以放置一些同步或异步清零或置位方面的控制信号。总体来说,主控时序进程的设计比较固定、单一和简单。 主控组合进程主控组合进程的任务是根据外部输入的控制信号(包括来自状态机外部的信号和来自状态机内部其他非主控的组合或时序进程的信号),或(和)当前状态的状态值确定下一状态(next_ state)的取向,即next_state的取值内容,以及确定对外输出或对内部其他组合或时序进程输出控制信号的内容。 辅助进程如用于配合状态机工作的组合进程或时序进程,例如为了完成某种算法的进程;或用于配合状态机工作的其他时序进程,例如为了稳定输出设置的数据锁存器等。实体及说明部分(枚举类型)LIBRARY IEEE;USE IEEESTD_LOGIC_164ALL;ENTITY s_ machine IS PORT (clk,reset :IN STD_LOGIC; state_inputs:IN STD_LOGIC_ VECTOR (0 TO 1); comb_outputs : OUT INTEGER 0 TO 15 );END s_ machine;ARCHITECTURE behv OF s_ machine ISTYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST;结构体中主控时序进程BEGIN REG: PROCESS (reset,clk) BEGINIF 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 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 behv;仿真结果Moore输出只是状态机当前状态的函数Mealy输出为有限状态机当前值和输入值的函数某Moore状态机举例设计要求:设计一个存储控制器状态机。能够根据微处理器的读写周期,分别对存储器输出写使能WE和读使能OE信号。工作过程:存储控制器的输入信号为微处理器的就绪READY及读写read_write信号。当上电复位后,或read有效时,存储控制器开始工作,并在下一个时钟周期判断本次作业任务是读存储器还是写存储器。判断的依据是,当read_write有效时为读操作,否则为写操作。也就是说非读即写。读操作时,OE信号有效,写操作时,WE信号有效。当READY信号有效时,表示读本次作业处理完成,并使控制器恢复到初始状态。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY moore ISPORT(clk,ready,read_write: IN Std_Logic; oe,we : OUT Std_Logic);END moore;ARCHITECTURE state_machine OF Moore ISTYPE state_type IS (idle,decision,read,write);SIGNAL present_state,next_state: state_type;BEGINstate_clocked:PROCESS(clk) BEGINIF(rising_edge(clk) THEN present_state oe=0; we=0; IF(ready=1) THEN next_state=decision; ELSE next_state oe=0; we=0; IF(read_write=1) THEN next_state=read; ELSE next_state oe=1; we=0; IF(ready=1) THEN next_state=idle; ELSE next_state oe=0; we=1; IF(ready=1) THEN next_state=idle;ELSE next_state=write; END IF; END CASE; END PROCESS state_comb;END state_machine;某Mealy状态机举例 与Moore型状态机相比,Mealy机的输出变化要领先一个周期,即一旦输入信号或状态发生变化,输出信号即刻发生变化。Moore机和Mealy机在设计上基本相同,稍有不同之处是,Mealy机的组合进程中的输出信号是当前状态和当前输入的函数。某Mealy状态机举例枚举型数据类型,定义四个状态library ieee;use ieee.std_logic_1164.all;entity mealy isport( clk,in1,rst:instd_logic;out1: outstd_logic_vector(3 downto 0);end;architecture a of mealy istype state_type is (s0,s1,s2,s3);signal state:state_type;beginmealy_process:process(clk,rst)beginif rst=1 thenstateif in1=1 thenstateif in1=0 thenstateif in1=1 thenstateif in1=0 thenstateif in1=1 thenout1=”1001”;else out1if in1=0 thenout1=”1100”;else out1if in1=1 thenout1=”1111”;else out1if in1=0 thenout1=”0000”;else out1=”1111”;end if;end case;end process output_process;end a;仿真结果t2t7t8t9t10t11t12t13t15t14t16t17t18t5t6t4t3t1t0
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号