Xilinx大学合作计划指定教材——Verilog HDL 程序设计与实践
第2节 同步时序电路和异步时序电路
更新于2009-03-13 13:43:05

        触发器是构成时序逻辑电路的基本元件,根据电路中各级触发器时钟端的连接方式,可以将时序逻辑电路分为同步时序电路和异步时序电路。在同步时序电路中,各触发器的时钟端全部连接到同一个时钟源上,统一受系统时钟的控制,因此各级触发器的状态变化是同时的。在异步时序逻辑电路中,各触发器的时钟信号是分散连接的,因此触发器的状态变化不是同时进行的。
8.2.1 同步时序电路设计
        1.同步时序电路原理说明
        从构成方式上讲,同步时序电路所有操作都是在同一时钟严格的控制下步调一致地完成的。从电路行为上讲,同步电路的时序电路共用同一个时钟,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。例如,基本的D触发器就是同步电路,当时钟上升沿到来时,寄存器把D端的电平传到Q输出端;在上升沿没有到来时,即使D端数据发生变化,也不会立即将变化后的数据传到输出端Q,需要等到下一个时钟上升沿。换句话说,同步时序电路中只有一个时钟信号。
        2.同步电路的Verilog HDL描述
        同步逻辑是时钟之间存在固定因果关系的逻辑,所有时序逻辑都在同源时钟的控制下运行。注意,在Verilog HDL实现时并不要求同一时钟,而是同源时钟。所谓的同源时钟是指同一个时钟源衍生频率比值为2的幂次方,且初相位相同的时钟。例如,clk信号和其同初相的2分频时钟、4分频就是同源时钟。
        (1)典型的同步描述
        在Verilog HDL设计中,同步时序电路要求在程序中所有always块的posedge/negedge关键字后,只能出现同一个信号名称(包括同源的信号),并且只能使用一个信号跳变沿。下面给出一个同步时序电路的描述实例。
        【例8-9】通过Verilog HDL给出一个同步的与门。

       

        上述程序比较简单,这里就不给出其仿真结果。
        (2)同步复位的描述
        同步复位,顾名思义,就是指复位信号只有在时钟上升沿为有效电平时,才能达到复位的效果。否则,无法完成对系统的复位工作。同步复位的Verilog 描述模板如下:

       

        下面给出一个同步复位的应用实例。
        【例8-10】给例8-9 的同步与门添加一个同步复位功能。

       

        在ISE 中的综合结果如图8-25 所示,可以看出,复位信号rst_n 通过D 触发器的控制端来实现。

        上述程序在ISE 中的仿真结果如图8-26 所示,复位信号并不是立即变高后与门逻辑就开始工作,而要等到时钟信号clk 的上升沿采样到rst_n 信号变高后,与门逻辑才会对clk 上升沿采样到的输入进行与运算。

        3.同步电路的准则
        (1)单时钟策略、单时钟沿策略
        尽量在设计中使用单时钟,在单时钟设计中,很容易就将整个设计同步于驱动时钟,使设计得到简化。尽量避免使用混合时钟沿来采样数据或驱动电路。使用混合时钟沿将会使静态时序分析复杂,并导致电路工作频率降低。下面给出混合时钟沿采样数据而降低系统工作时钟的实例。在时序设计中,有时会因为数据采样或调整数据相位等需求,需要同时使用时钟的上升沿和下降沿对寄存器完成操作,设计人员很可能会想到下列两类写法,这两类做法在语法上是正确的,也可被综合,但在设计中不建议出现类似代码。

       

        上述两种方式都会使得在时钟上升沿和下降沿都对寄存器操作,其功能等同于使用了原来时钟的2 倍频单信号沿来驱动电路。但对于可编程逻辑器件,不推荐同时使用同一信号的两个沿。这是因为可编程逻辑器件内部的时钟处理电路,只能保证时钟的一个沿具有非常好的指标,而另外一个沿的抖动、偏斜以及过渡时间等指标都不保证,因此同时采用两个沿会造成时钟性能的恶化。因此在可编程逻辑的设计中,在这种情况下,推荐首先将原时钟倍频,然后利用单沿对电路进行操作。
        此外,即使在ASIC 设计中,同时利用上升沿和下降沿,意味着时序延迟折半,不利用后端做电路的时钟树综合的工作,并且也会对自动测试向量产生带来不利影响[6]。下面给出一个混合时钟沿采样的实例。
        【例8-11】利用混合时钟先后完成输入数据的下降沿和上升沿采样,并级联输出。

       

        程序在ISE 中综合后的RTL 级结构图如图8-27所示,比较两个D 触发器就会发现:左端D 触发器的时钟输入端有一个对时钟取反的操作。

        上述程序在ISE Simulator 中的功能仿真结果如图8-28 所示,可以看出其达到了设计目标。这说明,混合时钟沿电路并不影响功能仿真结果。

        如前所述,混合电路影响的是电路的时序性能,所以其对于电路的真实影响需要通过时序仿真得到。本例添加了50MHz 的时序约束,然后对设计进行了时序仿真,结果如图8-29所示。可以看出,信号d1 对数据采样错误,存在顺序颠倒的现象,意味着电路时序性能很差,无法正常工作在给定的时钟频率。

        (2)避免使用门控时钟
        如果一个时钟节点由组合逻辑驱动,那么就形成了门控时钟,如图8-30 所示。门控时钟常用来减少功耗,但其相关的逻辑不是同步电路,即可能带有毛刺,而任何的一点点小毛刺都可以造成D 触发器误翻转;此外,门控逻辑会污染时钟质量,产生毛刺,并恶化偏移和抖动等指标。所以门控时钟对设计可靠性有很大影响,应尽可能避免。不要为了节省功耗去使用门控时钟,最近发展起来的用于减少功耗的方法是:低核电压FPGA、FPGA 休眠技术以及动态部分重构技术等,有兴趣的读者可以深入阅读参考文献[7]。

        (3)不要在子模块内部使用计数器分频产生所需时钟
        各个模块内部各自分频会导致时钟管理混乱,不仅使得时序分析变得复杂,产生较大的时钟漂移,并且浪费了宝贵的时序裕量,降低了设计可靠性。推荐的方式是由一个专门的子模块来管理系统时钟,产生其他模块所需的各个时钟信号。

8.2.2 异步时序电路设计
        1.异步时序电路原理说明
        异步时序电路,顾名思义就是电路的工作节奏不一致,不存在单一的主控时钟,主要是用于产生地址译码器、FIFO和异步RAM的读写控制信号脉冲。除可以使用带时钟的触发器外,还可以使用不带时钟的触发器和延迟元件作为存储元件;电路状态的改变由外部输入的变化直接引起。由于异步电路没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险。
        2.异步电路的Verilog HDL描述
        异步电路不使用时钟信号对系统逻辑进行同步,但仍需要对各子系统进行控制,因此采用预先规定的“开始”和“完成”信号或者状态完成逻辑控制。因此异步电路具有无时钟歪斜问题、低电源消耗等优点。
        (1)典型的异步描述
        电子抢答器是一种典型的异步时序电路。假设一个电子抢答器具有1个主持人和4个抢答按钮。只有在主持人按下按钮后,才能开始抢答,当最先抢答的选手按下按钮后,其余选手的抢答按钮失效,并将抢答成功的按钮序号显示出来。
        根据设计要求,由于各个按钮不可能同时按下,因此电路内部肯定是异步执行的,例8-12给出了相应的Verilog HDL实现代码。
        【例8-12】利用Verilog HDL语言实现4个抢答按钮的抢答器。

        上述程序的仿真结果如图8-31 所示,可以看出,3 号在主持人按钮后第一个抢答成功,num 正确显示出其序号,达到了设计的目的。

        (2)异步复位的描述
        异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位,其相应的Verilog HDL 描述如下:

       

        下面给出一个实例,将例8-10 所示的同步复位与门电路转化成异步复位与门。
        【例8-13】通过Verilog HDL 语言实现一个异步复位与门。

       

        程序在ISE中综合后的RTL级结构图如图8-32所示,对比图8-25可以发现,异步复位的功能是通过D触发器的清零信号来实现的,从而达到复位信号随时有效的功能。

        上述程序在ISE Simulator中的仿真结果如图8-33所示,复位信号只要有效,与门电路功能立即失效,输出零电平。

8.2.3 异步电路和同步电路的比较
        同步电路在目前数字电路系统中占绝对优势,和异步电路相比具有下列优势:对温度、电压、生产过程等外部参数的适应性更强;可移植性更高;可以消除毛刺和内部歪斜的数据,能将设计频率提升到吉赫兹(GHz)。但是,同步电路也有缺点,因为需要时序器件,因此和异步电路相比,需要更多的逻辑资源,且由于所有动作都在时钟控制下,过高的信号翻转率使得设计功耗远大于异步电路功耗。
        1.同步时序电路的优点
        同步设计主要有以下3个优点。
        (1)可以有效避免毛刺的影响,提高设计可靠性。毛刺是数字电路的天敌,只要有逻辑电路就会有毛刺发生,是永远存在的。因此,优秀的设计都必须从如何避免毛刺对设计的不良影响入手,提高设计稳定性。同步设计是避免毛刺影响的最简单方法。
        (2)可以简化时序分析过程。时序分析是高速数字设计的重要话题,参考文献[8]对其进行了详细讨论。
        (3)可以减少工作环境对设计的影响。异步电路受工作温度、电压等影响,器件时延变化较大,异步电路时序将变得更加苛刻,会导致芯片无法正常工作。同步电路只要求时钟和数据沿相对稳定,时序要求较为宽松,因此对环境的依赖性较小。
        2.同步时序电路的缺点
        同步逻辑也有两个主要的缺点。
        (1)时钟信号必须要分布到电路上的每一个正反器。而时钟通常都是高频率的讯号,这会导致功率的消耗,也就是产生热量。即使每个正反器没有做任何事情,也会消耗少量的能量,因此会导致废热产生。
        (2)最大的可能时钟频率是由电路中最慢的逻辑路径决定的,也就是关键路径。意思就是说每个逻辑的运算,从最简单的到最复杂的,都要在每一个时钟脉冲的周期中完成。一种用来消除这种限制的方法,是将复杂的运算分开成为数个简单的运算,这种技术称为“pipelining”。这种技术在微处理器中的作用显著,可以用来帮助提升现今处理器的时钟频率。
        3.应用小结
        从延迟设计方面考虑,异步电路的延时靠门延时来实现,比较难预测;同步电路使用计数器或触发器实现延时。从资源使用方面考虑,虽然在ASIC设计中同步电路比异步电路占用的面积大,但是在FPGA中,是以逻辑单元衡量电路面积的,所以同步设计和异步设计相比,也不会浪费太多资源,加上目前的FPGA门数都比较大,在不是万不得已之际,不要使用异步设计。
        同步设计时钟信号的质量和稳定性决定了同步时序电路的性能,FPGA内部有专用的时钟资源,如全局时钟布线资源、专用的时钟管理模块DUL、PLL等。目前商用的FPGA都是面向同步的电路设计而优化的,同步时序电路可以很好地避免毛刺,提倡在设计中全部使用同步逻辑电路。特别注意,不同时钟域的接口需要进行同步。
        当然,上述讨论只是一般建议,如果设计本身就具备异步背景,则异步电路肯定是首选。

 

 

网友留言