第五讲基本时序逻辑电路设计2010年12月基本时序逻辑电路设计¾时序逻辑电路的基本知识¾时序逻辑电路的VHDL描述¾同步时序逻辑电路和异步时序逻辑电路时序逻辑电路的电路特征:•时序电路的输出信号不仅取决于电路当时的输入,还取决于电路原来的状态,体现了“记忆”特性。•从电路行为上讲,不管输入如何变化,仅当时钟的沿(上升沿或下降沿)到达时,才有可能使输出发生变化。触发器由时钟信号来触发,控制翻转时刻,而对触发器翻转到何种状态并无影响。¾时序逻辑电路的基本知识时序逻辑电路的两个基本组成部分:•用来计算输入和寄存器的函数值的逻辑•用来保持时序逻辑电路状态的存储单元同步时序设计时序逻辑电路的基本方法:•寄存器传输级模型(RTL):根据时序图把行为描述成寄存器值的转换•状态机:根据状态转换图/表描述状态机的行为描述时序逻辑电路的基本方式:表达式(输出逻辑表达式、存储单元驱动表达式、触发器状态方程);状态转换图/表;时序图状态转换图寄存器传输级结构分析一个时序电路,就是要找出给定时序电路的逻辑功能。具体地说,就是要求找出电路的状态和输出状态在输入变量和时钟信号作用下的变化规律。T型触发器CXQYn=XT=nnnQTQTQ+=+1nnnXQQXQ+=+1输出方程驱动方程触发器特征方程状态方程1111000100100100XnQ1nQ+YnnnXQQXQ+=+1nYXQC=1111000100100100XnQ1nQ+Y•D触发器•触发器应用电路•计数器设计(同步、异步计数)•分频电路设计•电平锁存器寄存器传输级时序模型•时钟信号、获取边沿触发•描述方式:if、waituntil,rising_edge,falling_edge•同步和非同步复位99DD触发器:触发器:边沿触发的存储设备(边沿触发的存储设备(FlipFlip--FlopFlop))entitydffisPort(clk:instd_logic;d:instd_logic;q,qn:outstd_logic);enddff;architectureBehavioralofdffissignaloutp:std_logic;beginqn=notoutp;q=outp;processbeginwaituntilrising_edge(clk);outp=d;endprocess;endBehavioral;同步D触发器¾时序逻辑电路的VHDL描述同步D触发器RTL综合结果图同步D触发器仿真结果图可设计同步电路、延迟电路¾延迟电路entitydelayisport(clk,din:instd_logic;d1,d2,dout:outstd_logic);enddelay;architecturertlofdelayissignalt1,t2,tout:std_logic;beginprocess(clk)beginifrising_edge(clk)thent1=din;t2=t1;tout=t2;endif;endprocess;dout=tout;d2=t2;d1=t1;endrtl;¾微分器电路entitydiffisport(clk,din:instd_logic;d1,d2,up_diff,dn_diff,up_dn_diff:outstd_logic);enddiff;architecturertlofdiffissignalt1,t2:std_logic;beginprocess(clk)beginifrising_edge(clk)thent1=din;t2=t1;endif;endprocess;d2=t2;d1=t1;up_diff=t1andnott2;dn_diff=nott1andt2;up_dn_diff=t1xort2;endrtl;1111000100100100XnQ1nQ+YCXQYn=nnnXQQXQ+=+1输出方程状态方程T触发器entitytestservhdlisPort(C:instd_logic;X:instd_logic;Y:outstd_logic;PRE:instd_logic);endtestservhdl;architectureBehavioraloftestservhdlissignalq,t:std_logic;begint=notX;Y=qandCandX;processbeginifPRE='1'thenq='1';elsifrising_edge(C)thenift='1'thenq=notq;elseq=q;endif;endif;endprocess;endBehavioral;¾同步时序逻辑电路与异步时序逻辑电路根据电路中各级触发器时钟端的连接方式同步时序电路设计异步时序电路设计各触发器的时钟端全部连接到同一个时钟源上,统一受系统时钟的控制,各级触发器的状态变化是同时的。各触发器的时钟信号是分散连接的,因此触发器的状态变化不是同时进行的。1.同步时序电路设计1)同步时序电路原理说明从构成方式上讲,同步时序电路所有操作都是在同一时钟严格的控制下步调一致地完成的。从电路行为上讲,同步电路的时序电路共用同一个时钟,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。在VHDL实现时并不要求同一时钟,而是同源时钟。所谓的同源时钟是指同一个时钟源衍生频率比值为2的幂次方,且初相位相同的时钟。2)同步时序电路的VHDL描述entitysyngateisport(clk:instd_logic;a:instd_logic;b:instd_logic;y:outstd_logic);endsyngate;architecturebehavioralofsyngateisbeginprocess(clk)beginifrising_edge(clk)theny=aandb;endif;endprocess;endBehavioral;同步与门的描述同步复位的描述ifrising_edge(clk)theifrst_n='0'then...else...endif;endif;1、敏感信号只能是时钟信号;2、时钟信号必须是同源的3、时钟只能使用一个跳变沿具有同步复位功能的同步与门的描述entitysyngateisport(clk:instd_logic;a:instd_logic;b:instd_logic;rst_n:instd_logic;y:outstd_logic);endsyngate;architectureBehavioralofsyngateisbeginprocess(clk)beginifrising_edge(clk)thenifrst_n='0'theny='0'elsey=aandb;endif;endif;endprocess;endBehavioral;RTL综合结果图复位信号rst_n通过D触发器的控制端来实现。3)同步时序电路的设计准则单时钟策略、单时钟沿策略尽量在设计中使用单时钟,在单时钟设计中,很容易就将整个设计同步于驱动时钟,使设计得到简化。尽量避免使用混合时钟沿来采样数据或驱动电路。使用混合时钟沿将会使静态时序分析复杂,并导致电路工作频率降低。下。一个process的双时钟边缘描述方法:process(clk)begin...endprocess;二个process的双时钟边缘描述方法:process(clk)beginifrising_edge(clk)then--...endif;endprocess;process(clk)beginiffalling_edge(clk)then--...endif;endprocess;对于可编程逻辑器件,不推荐同时使用同一信号的两个沿。这是因为器件内部的时钟处理电路,只能保证时钟的一个沿具有非常好的指标,而另外一个沿的抖动、偏斜以及过渡时间等指标都不保证,因此同时采用两个沿会造成时钟性能的恶化。推荐首先将原时钟倍频,然后利用单沿对电路进行操作。利用混合时钟先后完成输入数据的下降沿和上升沿采样,并级联输出entitydualedgeisport(input:instd_logic_vector(7downto0);output1:outstd_logic_vector(7downto0);output2:outstd_logic_vector(7downto0);clk:instd_logic);enddualedge;architectureBehavioralofdualedgeissignaldt:std_logic_vector(7downto0);beginoutput1=dt;process(clk)beginifrising_edge(clk)thendt=input;endif;endprocess;process(clk)beginiffalling_edge(clk)thenoutput2=dt;endif;endprocess;endBehavioral;利用混合时钟先后完成输入数据的下降沿和上升沿采样,并级联输出RTL综合结果图下端D触发器的时钟输入端有一个对时钟取反的操作避免使用门控时钟如果一个时钟节点由组合逻辑驱动,那么就形成了门控时钟。门控时钟常用来减少功耗。门控时钟相关的逻辑不是同步电路,即可能带有毛刺,而任何的一点点小毛刺都可以造成D触发器误翻转。门控逻辑会污染时钟质量,产生毛刺,并恶化偏移和抖动等指标。减少功耗的方法是:低核电压FPGA、FPGA休眠技术以及动态部分重构技术等混合时钟边缘采样功能仿真图混合时钟边缘采样时序仿真图避免在子模块内部使用计数器分频产生所需时钟各个模块内部各自分频会导致时钟管理混乱,不仅使得时序分析变得复杂,产生较大的时钟漂移,并且浪费了宝贵的时序裕量,降低了设计可靠性。推荐的方式是由一个专门的子模块来管理系统时钟,产生其他模块所需的各个时钟信号。具有异步复位功能的同步与门的描述entityasyngateisport(clk:instd_logic;a:instd_logic;b:instd_logic;rst_n:instd_logic;y:outstd_logic);endasyngate;architectureBehavioralofasyngateisbeginprocess(clk,rst_n)beginifrst_n='0'theny='0';elsifrising_edge(clk)theny=aandb;endif;endprocess;endBehavioral;RTL综合结果图复位信号rst_n通过D触发器的清零信号来实现。异步复位与门仿真结果图2.异步时序电路设计1)异步时序电路原理说明异步时序电路,顾名思义就是电路的工作节奏不一致,不存在单一的主控时钟,电路状态的改变由外部输入的变化直接引起。主要是用于产生地址译码器、FIFO和异步RAM的读写控制信号脉冲。除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件。由于异步电路没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险。2)异步时序电路的VHDL描述异步复位的描述process(clk,rst_n)beginifrst_n='0'then--resetprocelsifrising_edge(clk)thenendif;endprocess;异步电路不使用时钟信号对系统逻辑进行同步,但仍需要对各子系统进行控制,因此采用预先规定的“开始”和“完成”信号或者状态完成逻辑控制。因此异步电路具有无时钟歪斜问题、低电源消耗等优点。3.异步时序电路与同步时序电路的比较同步电路可以有效避免毛刺的影响,提高设计可靠性;同步电路用计数器或触发器实现延时,可以简化时序分析过程。异步电路