第五讲基本时序逻辑电路设计2010 年12 月基本时序逻辑电路设计¾时序逻辑电路的基本知识¾时序逻辑电路的VHDL描述¾同步时序逻辑电路和异步时序逻辑电路描述时序逻辑电路的基本方式:表达式(输出逻辑表达式、存储单元驱动表达式、触发器状态方程);状态转换图/表;时序图设计时序逻辑电路的基本方法:•寄存器传输级模型(RTL):根据时序图把行为描述成寄存器值的转换•状态机:根据状态转换图/表描述状态机的行为状态转换图寄存器传输级结构分析一个时序电路,就是要找出给定时序电路的逻辑功能。
具体地说,就是要求找出电路的状态和输出状态在输入变量和时钟信号作用下的变化规律。
T型触发器1nQ+Y1111000100100100X n Q 1n Q +Y寄存器传输级时序模型•D触发器•触发器应用电路•计数器设计(同步、异步计数)•分频电路设计•电平锁存器同步D触发器RTL综合结果图同步D触发器仿真结果图可设计同步电路、延迟电路¾延迟电路entity delay isport( clk,din: in std_logic; d1,d2,dout:out std_logic);end delay;architecture rtl of delay issignal t1,t2,tout:std_logic;beginprocess(clk)beginif rising_edge(clk) thent1<=din; t2<=t1; tout<=t2;end if;end process;dout<=tout; d2<=t2; d1<=t1;end rtl;¾微分器电路entity diff isport( clk,din: in std_logic; d1,d2,up_diff,dn_diff,up_dn_diff:out std_logic); end diff;architecture rtl of diff issignal t1,t2:std_logic;beginprocess(clk)beginif rising_edge(clk) then t1<=din; t2<=t1; end if;end process;d2<=t2; d1<=t1;up_diff<=t1 and not t2;dn_diff<=not t1 and t2;up_dn_diff<=t1 xor t2;end rtl;1nQ+Yentity testservhdl isPort ( C : in std_logic;X : in std_logic;Y : out std_logic;PRE : in std_logic);end testservhdl;architecture Behavioral of testservhdl is signal q,t:std_logic;begint<=not X;Y<=q and C and X;processbeginif PRE='1' then q<='1';elsif rising_edge(C) thenif t='1' then q<=not q;else q<=q;end if;end if;end process;end Behavioral;1.同步时序电路设计1)同步时序电路原理说明从构成方式上讲,同步时序电路所有操作都是在同一时钟严格的控制下步调一致地完成的。
从电路行为上讲,同步电路的时序电路共用同一个时钟,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。
在VHDL实现时并不要求同一时钟,而是同源时钟。
所谓的同源时钟是指同一个时钟源衍生频率比值为2的幂次方,且初相位相同的时钟。
具有同步复位功能的同步与门的描述entity syngate isport ( clk: in std_logic;a : in std_logic;b : in std_logic;rst_n:in std_logic;y : out std_logic);end syngate;architecture Behavioral of syngate is beginprocess(clk)beginif rising_edge(clk) thenif rst_n='0' then y<='0'else y<=a and b;end if;end if;end process;end Behavioral;复位信号rst_n通过D 触发器的控制端来实现。
3)同步时序电路的设计准则单时钟策略、单时钟沿策略尽量在设计中使用单时钟,在单时钟设计中,很容易就将整个设计同步于驱动时钟,使设计得到简化。
尽量避免使用混合时钟沿来采样数据或驱动电路。
使用混合时钟沿将会使静态时序分析复杂,并导致电路工作频率降低。
下。
一个process 的双时钟边缘描述方法:process(clk)begin...end process;二个process 的双时钟边缘描述方法:process(clk)beginif rising_edge(clk) then--...end if;end process;process(clk)beginif falling_edge(clk) then--...end if;end process;对于可编程逻辑器件,不推荐同时使用同一信号的两个沿。
这是因为器件内部的时钟处理电路,只能保证时钟的一个沿具有非常好的指标,而另外一个沿的抖动、偏斜以及过渡时间等指标都不保证,因此同时采用两个沿会造成时钟性能的恶化。
推荐首先将原时钟倍频,然后利用单沿对电路进行操作。
利用混合时钟先后完成输入数据的下降沿和上升沿采样,并级联输出entity dualedge isport ( input : in std_logic_vector(7 downto0);output1 : out std_logic_vector(7 downto0);output2 : out std_logic_vector(7 downto0);clk: in std_logic);end dualedge;architecture Behavioral of dualedge issignal dt:std_logic_vector(7 downto0);beginoutput1<=dt;process(clk)beginif rising_edge(clk) then dt<=input;end if;end process;process(clk)beginif falling_edge(clk) then output2<=dt;end if;end process;end Behavioral;下端D 触发器的时钟输入端避免使用门控时钟如果一个时钟节点由组合逻辑驱动,那么就形成了门控时钟。
门控时钟常用来减少功耗。
门控时钟相关的逻辑不是同步电路,即可能带有毛刺,而任何的一点点小毛刺都可以造成D 触发器误翻转。
门控逻辑会污染时钟质量,产生毛刺,并恶化偏移和抖动等指标。
减少功耗的方法是:低核电压FPGA、FPGA 休眠技术以及动态部分重构技术等混合时钟边缘采样功能仿真图混合时钟边缘采样时序仿真图避免在子模块内部使用计数器分频产生所需时钟各个模块内部各自分频会导致时钟管理混乱,不仅使得时序分析变得复杂,产生较大的时钟漂移,并且浪费了宝贵的时序裕量,降低了设计可靠性。
推荐的方式是由一个专门的子模块来管理系统时钟,产生其他模块所需的各个时钟信号。
具有异步复位功能的同步与门的描述entity asyngate isport ( clk: in std_logic;a : in std_logic;b : in std_logic;rst_n:in std_logic;y : out std_logic);end asyngate;architecture Behavioral of asyngate is beginprocess(clk,rst_n)beginif rst_n='0' then y<='0';elsif rising_edge(clk) theny<=a and b;end if;end process;end Behavioral;复位信号rst_n通过D 触发器的清零信号来实现。
异步复位与门仿真结果图2.异步时序电路设计1)异步时序电路原理说明异步时序电路,顾名思义就是电路的工作节奏不一致,不存在单一的主控时钟,电路状态的改变由外部输入的变化直接引起。
主要是用于产生地址译码器、FIFO和异步RAM的读写控制信号脉冲。
除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件。
由于异步电路没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。
也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险。
2)异步时序电路的VHDL描述异步复位的描述process(clk,rst_n)beginif rst_n='0' then--reset procelsif rising_edge(clk) then end if;end process;异步电路不使用时钟信号对系统逻辑进行同步,但仍需要对各子系统进行控制,因此采用预先规定的“开始”和“完成”信号或者状态完成逻辑控制。
因此异步电路具有无时钟歪斜问题、低电源消耗等优点。
3.异步时序电路与同步时序电路的比较同步电路可以有效避免毛刺的影响,提高设计可靠性;同步电路用计数器或触发器实现延时,可以简化时序分析过程。
异步电路的延时靠门延时来实现,比较难预测;同步电路所有动作都在时钟控制下,可以减少工作环境对设计的影响。
异步电路受工作温度、电压等影响,器件时延变化较大,异步电路时序将变得更加苛刻,会导致芯片无法正常工作。
同步电路只要求时钟和数据沿相对稳定,时序要求较为宽松,因此对环境的依赖性较小。
同步电路的时钟信号必须要分布到电路上的每一个触发器。
过高的信号翻转率使得设计功耗远大于异步电路功耗。
同步电路最大的可能时钟周期是由电路中最慢的逻辑路径决定的,也就是关键路径。
从资源使用方面考虑,虽然在ASIC设计中同步电路比异步电路占用的面积大,但是在FPGA中,是以逻辑单元衡量电路面积的,所以同步设计和异步设计相比,也不会浪费太多资源,加上目前的FPGA门数都比较大,在不是万不得已之际,不要使用异步设计。