1第7章高速电路的时序分析电路中,数据的传输一般都是在时钟对数据信号进行有序的收发控制下进行的。芯片只能按规定的时序发送和接收数据,过长的信号延迟或信号延时匹配不当都会影响芯片的建立和保持时间,导致芯片无法正确收发数据,从而使系统不能正常工作。随着系统时钟频率的不断提高和信号边沿不断变陡,系统对时序有更高的要求,一方面留给数据传输的有效读写窗口越来越小,另一方面,传输延时要考虑的因素增多,要想在很短的时间限制里,让数据信号从驱动端完整地传送到接收端,就必须进行精确的时序计算和分析。由于高速系统对时序的要求越来越严格,要保证好的时序,就必须有好的时钟器件;这其中包括时钟发生器和时钟缓冲器。首先要求时钟发生器提供低抖动、高质量的时钟信号,在设计时序系统时,要求选择合适的时钟缓冲器进行设计,从而保证尽量大的时序余量。时钟器件是电路板上的重要器件之一,它决定着经过电路板的信号的节奏和精度,它在电子产品中无所不在,形状、尺寸和种类也多种多样,如高速、低速、低功率、低歪斜、多输出、单输出、单电压、多电压、零延迟、可编程等等。在讨论时钟器件的同时,本章还讨论了时钟设计中要考虑的一个关键因素——时钟抖动。时钟抖动是时钟脉冲的输出跃迁与其理想位置的偏差。本章最后探讨了抖动的产生、影响、测量方法以及解决方案。7.1时序系统按照不同的时钟策略将信号的传输方式分为以下几类:1.异步方式;信号靠握手传输。2.外时钟同步方式;两块芯片均使用外部时钟。3.内时钟同步方式;两块通讯芯片中,一块芯片给另一块芯片提供时钟。4.源同步方式;时钟、数据输出时固定相位同时传输。5.时钟数据恢复方式;从信号中同时提取数据与时钟。本章将主要介绍高速数字互连设计中两种常用的同步时序系统(共同时钟同步和源时钟同步),并分析其工作原理,然后来讨论影响时序的因素,给出其解决方案。7.1.1公共时钟同步的时序分析7.1.1.1公共时钟同步原理公共时钟同步,是指在数据的传输过程中,总线上的驱动端和接收端共享同一个时钟源,2在同一个时钟缓冲器(clockbuffer)发出同相时钟作用下完成数据的正确的发送和接收。图7-1所示为一个典型的公共时钟同步数据收发工作示意图。在该例子中,驱动端(处理器)向接收端(芯片组)传送数据,我们可以将整个数据传送的过程考虑为三个步骤:1.核心处理器提供数据;2.在第一个系统时钟的上升沿到达时,处理器将数据Dp锁存至Qp输出;3.Qp沿传输线传送到接收端触发器的Dc,并在第二个时钟上升沿到达时,将数据传送到芯片组内部。图7-1公共时钟同步数据收发工作示意图一般来说,标准普通时钟系统的时钟信号到各个模块是同步的,即图7—1中的Tflightclka和Tflightclkb延时相同。通过分析不难看出,整个数据从发送到接收的过程需要经历连续的两个时钟沿,也就是说,如果要使系统能正常工作,就必须在一个时钟周期内让信号从发送端传输到接收端。如果信号的传输延迟大于一个时钟周期,那么当接收端的第二个时钟沿触发时,就会造成数据的错误读取,因为正确的数据还在传输的过程中,这就是建立时间不足带来的时序问题。目前普通时序系统的频率无法得到进一步提升的原因就在于此,频率越高,时钟周期越短,允许在传输线上的延时也就越小,200-300MHz已经几乎成为普通时序系统的频率极限。图7-1中,时钟发生器产生输出信号clk_in到达时钟缓冲器,经时钟缓冲器分配缓冲后发出两路同相时钟,一路是clkb,用于driver的数据输出;另一路是clka,用于采样锁存由driver发往receiver的数据。时钟clkb经Tflt_clkb一段飞行时间(flighttime)后到达diver,diver内部数据由clkb锁存经过Tco_data时间后出现在driver的输出端口上,输出的数据然后再经过一段飞行时间Tflt_data到达receiver的输入端口;在receiver的输入端口上,利用clockbuffer产生的另一个时钟clka(经过的延时就是clka时钟飞行时间,即Tflt_clka)采样锁存这批来自driver的数据,从而完成commonclock一个时钟周期的数据传送过程。以上过程表明,到达receiver的数据是利用时钟下一个周期的上升沿采样的,据此可得到数据传送所应满足的两个必要条件:1)receiver输入端的数据一般都有所要求的建立时间Tsetup,它表示数据有效必须先于3时钟有效的最小时间值,数据信号到达输入端的时间应该足够早于时钟信号,由此可得出建立时间所满足的不等式;2)为了成功地将数据锁存到器件内部,数据信号必须在接收芯片的输入端保持足够长时间有效以确保信号正确无误地被时钟采样锁存,这段时间称为保持时间,clka的延时必须小于数据的无效时间。系统时序的基本要求就是:在下一个时钟周期到达之前,前一个数据要能稳定的被读取。图7-1中,时钟是同时到达driver和receiver的,也就是说驱动端时钟触发新的数据发送的同时,接受器正好读取前一个数据。如果接收器的下一个时钟脉冲来了,但新的数据还没有传到,就会出现时序紊乱,这就是建立时间不够的情况,所以数据线长不能太长(而且负载不能太重),这就是目前正常时序系统设计中最关键的制约因素之一;同时,数据不能来的太快,因为数据必须稳定存在一定的时间才能被正确接收,如果过早的传输到接收端,等时钟触发的之后,数据稳定存在的时间不足以让器件读取,这就是保持时间不够的问题。所以数据信号传输延时不能过大也不能过小,这就是时序设计要求。7.1.1.2公共时钟同步系统实例图7-2存储器控制器和同步SRAM这是一个采用普通时钟同步的系统。该图示出了一个与SRAM相连的存储器控制器。这两个器件从相同的时钟脉冲源接收时钟信号。7.1.1.3时序参数的确定对于时序问题的分析,我们首先要清楚地理解相关的一些时序参数的具体含义,比如Tco,缓冲延时,传播延迟,最大/小飞行时间,建立时间,保持时间,建立时间裕量,保持时间裕量,时钟抖动,时钟偏斜等等,如果对这些参数的概念理解不深刻,就很容易造成时序设计上的失误。首先要阐明的是Tco和缓冲延时(bufferdelay)的区别。从定义上来说,Tco是指时钟触发开始到有效数据输出的器件内部所有延时的总和;而缓冲延时是指信号经过缓冲器达到有效的电压输出所需要的时间。可以看出,Tco除了包含缓冲延时,还包括逻辑延时。通常,确定Tco的方法是在缓冲输出的末端直接相连一个测量负载,最常见的是50欧姆的电阻或4者30pF的电容,然后测量负载上的信号电压达到一定电平的时间,这个电平称为测量电压(Vms),一般是信号高电平的一半。如Tco和缓冲延时的确定如下图7-3所示:图7-3Tco和缓冲延时的确定信号从缓冲器出来之后,就要经过传输线到接收终端,信号在传输线上的传输的延时我们称为传播延迟(propagationdelay),它只和信号的传播速度和线长有关。然而我们在大多数时序设计里面,最关键的却不是传播延迟这个参数,而是飞行时间(FlightTime)参数,包括最大飞行时间(MaxFlightTime)和最小飞行时间(MinFlightTime)。传输线延传迟表示的是信号在传输线上的绝对延迟,而飞行时间表示参考波形与接收器实际波形之差。这个差别是微弱的,但它们是计算方法截然不同,因为飞向时间需要仿真参考负载来计算。图7-4(a)标准飞行时间计算飞行时间是指驱动器分别驱动一个参考负载和驱动一个实际系统接收器时,在接收端信号幅度上升到阈值电压时所用的时间之差。图7-4(a)描述了飞行时间的定义。飞行时间是在Vil,Vthreshold和Vih处估算的。须注意的是,飞行时间的最差状况值,有时是最大值,有时是最小值。例如,在同步时钟信号的setup余量计算式中用的最差状况飞行时间是其最大值,而在hold余量计算式中用的是最小值。关于飞行时间的一个通常易犯的错误是:在驱动器的Vil和接收器的Vih之间测量飞行时5间(或反之测量Vih与Vil之间的飞行时间)。其原因是它把信号通过阈值范围的时间都当作延迟时间了。其实这个延迟时间已经在时序等式的Tco中考虑进去了。图7-4(b)最大飞行时间和最小飞行时间在较轻的负载(如单负载)情况下,驱动端的上升沿几乎和接收端的信号的上升沿平行,所以这时候平均飞行时间和传播延迟相差不大;但如果在重负载(如多负载)的情况下,接收信号的上升沿明显变缓,这时候平均飞行时间就会远远大于信号的传播延迟。这里说的平均飞行时间是指Buffer波形的Vms到接收端波形Vms之间的延时,这个参数只能用于时序的估算,准确的时序分析一定要通过仿真测量最大/最小飞行时间来计算。上面只是对信号上升沿的分析,对于下降沿来说,同样存在着最大/最小飞行时间的参数,如下图。在时序计算时我们实际取的最大飞行时间是在上升沿和下降沿中取最长的那个飞行时间,而最小飞行时间则是取上升和下降沿中最短的那个飞行时间。图7-5下降沿的飞行时间参数也有些时候,人们对信号的最大/最小飞行时间还有其它称谓,比如在Cadence软件中,就将最大飞行时间称为最终稳定延时(FinalSettleDelay),而将最小飞行时间称为最早开关延时(FirstSwitchDelay),如下图7-6:6图7-6Cadence软件里对时序参数的确定信号经过传输线到达接收端之后,就牵涉到建立时间和保持时间这两个时序参数,它们是接收器本身的特性,表征了时钟边沿触发时数据需要在锁存器的输入端持续的时间。通俗地说,时钟信号来的时候,要求数据必须已经存在一段时间,这就是器件需要的建立时间(SetupTime);而时钟边沿触发之后,数据还必须要继续保持一段时间,以便能稳定的读取,这就是器件需要的保持时间(HoldTime)。如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。见图7-7,其中还考虑了时钟误差的因素。图7-7建立和保持时间及其裕量定义许多设计者的目标是正的建立时间裕量大约等于一个门电路的延时。按照这个经验规则分配建立时间裕量时,采用低速逻辑电路系列要比快速逻辑电路系列分配得要多一些。这样就可以在一个很宽的设计范围内,保持建立时间裕量与延时有一个固定的百分比。但是,必须确定可以接受的建立时间裕量是多少。7建立时间裕量取决于逻辑路径的延时和时钟周期。延时太长或者时钟周期太短,都可能导致建立时间裕量失效。图7-1中时钟信号CLKC和CLKP之间的不同延时,也会导致建立时间裕量的失效,下一节将对此进行详细解释。(换位)为什么要建立和保持时间参数?每个器件的建立和保持时间参数,一般都可以在相应的数据手册查到,对于设计者来说最大的目的是提高时序的裕量,这样即使信号完整性上出现一点问题,或者外界环境发生一定的变化,系统仍然能正常工作,这就是一个设计优良的系统应该体现出的超强的稳定性。建立时间裕量可以防止由于信号串扰、逻辑延时计算中的错误、后期布线中的小变更造成的对电路的影响。系统时序设计中对时钟信号的要求是非常严格的,因为我们所有的时序计算都是以恒定的时钟信号为基准。但实际中时钟信号往往不可能总是那么完美,会出现抖动(Jitter)和偏斜(Skew)问题。所谓抖动,就是指两个时钟周期之间存在的差值,这个误差是在时钟发生器内部产生的,和晶振或者PLL内部电路有关,布线对其没有影响,如图7-8所示。除此之外,还有一种由于周期内信号的占空比发生变化而引起的抖动,称之为半周期抖动。总的来说,抖动(Jitter)可以认为在时钟信号本身在传输过程中的一些偶然和不定的变化之总和。图7-8时钟抖动示意图时钟偏斜(skew)是指两个相同的系统时钟之间的偏斜。它表现的形式是多种多样的,既包含了时钟驱动器的多个输出之间的偏斜(也叫做内部偏斜),也包含了由于PCB走线误差造成的接收端和驱动端时钟信号之间的偏斜(也叫做外部偏斜),比如在图7-1中所示,clka和clkb之间的差异,clkc和clkp之间的差异均为时钟偏斜,这些偏斜量在时序计算