Timing Analyze

2015-03-19 20:43:00
admin
原创
1212

关于高速信号的时序分析,主要针对两种最常见的同步时序系统:共同时钟同步系统与源同步系统。

 

共同时钟同步原理及时序分析

所谓共同时钟,就是在数据传输过程中,驱动端和接受端共享一个时钟,而这个时钟是由外部的一个器件提供,并且是同一个缓冲器输出的同相位时钟信号。如图1所示:


 1:共同时钟拓扑结构

OSC提供时钟输入,CLK_BUFFER则分兵分两路把时钟信号分别输出为CLK_ACLK_B到驱动端和接收端,暂时不考虑时钟ABBuffer内部的Skew与在PCB板上由于走线长度不统一(当然也包括时钟信号接收端的负载不同)所造成的总的Skew,即我们认为时钟AB在理想状态下同时到达了TRANSRECEIVE。当CLK_B到达TRANS后,在第一个时钟的上升沿,TRANS会将数据Dt锁存到Qt等待输出,直到Qt输出电平达到有效参考电平Vmeas(通常是高电平的一半左右),这段时间我们就称之为驱动端数据信号的Tco。

Qt输出数据信号,通过总线传输到RECEIVEDr,在CLK_A的第二个时钟上升沿到来之前把数据送至芯片组内部。不难看出,如果要使得系统正常工作,必须在一个时钟周期内让数据信号从驱动端发送到接收端,即理论上图1中的QtDr的斜线通道的传输延时要小于一个时钟周期。如果传输延时大于一个时钟周期,则接收端的第二个CLK信号的上升沿到来时,正确的数据还在传输过程中,就会导致由于数据信号建立时间不足而导致错误的发生。这就是接收端的数据对建立时间的要求。

上述分析得出结果就是数据信号要提前CLK_A的第二个上升沿到来,那么要提前多少呢?这就要满足接收端的setup time。这就要求传输线尽可能地短,但是太短的传输线又带来另一个问题,就是如果数据信号提前CLK_A的第二个上升沿太多的时间,那么时钟的上升沿对数据信号进行锁存的时候,数据信号没有足够的hold on time来保证被正确地采样,同样也会导致数据出错。

综上所述,共同时钟的时序要求就是:数据信号传输线不能太长或者太重,太长导致数据来得太慢,接收端没有足够的数据建立时间;当然数据信号传输线也不能太短,太短导致数据信号提前接收端时钟的第二个上升沿太多,没有足够的数据保持时间。这就是共同时钟的一个最重要的时序要求。

在实际的计算中,我们还会考虑到CLK_BUFFER内部的时钟固定偏斜,即CLK_ACLK_BTco之间的差值,时钟抖动Jitter,还需要控制时钟信号ABPCB板上的传输延时要尽可能相等,要对他们做等长,并且走线要一致。

Tcycle:时钟的周期
Tco_clkb:时钟BCLK_BUFFER内部从CLK_IN开始到CLK_B输出有效延时
Tflt_clkb:时钟BPCB板上的飞行时间,即从CLK_BUFFER输出有效电平到TRANS接收到的CLK信号达到有效电平
Tco_dataTRANS中数据从CLK_B输入TRANS开始到寄存器输出数据到达有效电平的延时
Tflt_data:数据信号在PCB板上的飞行时间,从TRANS输出有效电平开始到RECEIVE接收到数据信号的延时
Tco_clka: 时钟ACLK_BUFFER内部从CLK_IN开始到CLK_A输出有效延时
Tflt_clka:时钟APCB板上的飞行时间,即从CLK_BUFFER输出有效电平到RECEIVE接收到的CLK信号达到有效电平
Jitter:接收端RECEIVE的时钟抖动
Tsetup:数据的建立时间
Tsetup margin:建立时间裕量
Thold:数据的保持时间
Thold margin:保持时间裕量

 

 

 

 

2:共同时钟数据建立时序分析

 

第一个输入时钟开始到数据接收的总延时为
Tdata_delayTco_clkb+Tflt_clkb+Tco_data+Tflt_data
接收时钟CLK_A下一个时钟周期的总的延时为
Tclk_delayTcycle+Tco_clka+Tflt_clka
再加上建立时间、建立裕量与抖动的时间可以得出如下计算公式
Tdata_delay+Tsetup+Tsetup margin+Tjitter=Tclk_delay

因为要保证Tsetup margin>0
所以得出:
Tclk_delay-Tdata_delay+Tsetup+Tjitter>0
代入Tdata_delayTclk_delay的关系式

Tcycle+Tco_clka+Tflt_clka-(Tco_clkb+Tflt_clkb+Tco_data+Tflt_data+Tsetup+Tjitter)>0

为了保证最恶劣的结果都能满足条件,我们把上式中前面的两个参数Tco_clkaTflt_clka取最小值,把式中括号内的参数Tco_clkbTflt_clkbTco_dataTflt_data都取最大值,Jitter取正值。得到如下的关系式:

Tcycle+Tco_clka_min+Tflt_clka_min-(Tco_clkb_max+Tflt_clkb_max+Tco_data_max+Tflt_data_max+Tsetup+Tjitter)>0

化简得到:

Tcycle+[Tco_clka_min+Tflt_clka_min-(Tco_clkb_max+Tflt_clkb_max]-Tco_data_max+Tflt_data_max+Tsetup+Tjitter)>0

而上式中的Tco_clka_min+Tflt_clka_min-(Tco_clkb_max+Tflt_clkb_max)=Tskew,即为CLK_A和CLK_B的总偏斜。总偏斜分为器件内部固定偏斜与PCB走线造成的偏斜两部分。
器件内部的固定偏斜为Tco_clka_min-Tco_clkb_max,这个参数是固定的
PCB走线造成的偏斜为Tflt_clka_min-Tflt_clkb_max,这个参数是可调的,单从建立时间来说,我们希望这个值越大越好。

上式中的后面的参数还有一个参数Tflt_data_max是可调的,但从建立时间来说,我们希望这个值越小越好,即Data的走线越短越好,接收端的负载越轻越好。

下面再来分析一下保持时间的时序要求

 

 

图3:共同时钟数据保持时序分析

 

 

 

 

同样,得出两组方程式
CLK_A的延时为:

Tclka_delay=Tco_clka+Tflt_clka     注意这里的方程式与建立时间的不同,少了一个Tcycle,因为在数据接收端的参考时钟是第二个上升沿

数据延时为:

Tdata_delay:Tco_clkb+Tflt_clkb+Tco_data+Tflt_data

 

 

保持时间、保持时间裕量、抖动的关系式为:

Tdata_delay=Tclka_delay+Thold+Thold margin+Tjitter

同样要保证Thold margin>0
所以得出如下的关系式:
Tdata_delay-(Tclka_delay+Thold+Tjitter)>0
代入上述方程得到:
Tco_clkb+Tflt_clkb+Tco_data+Tflt_data-(Tco_clka+Tflt_clka+Thold+Tjitter)>0

为了满足最坏的条件,上式中前面的参数Tco_clkb、Tflt_clkb、Tco_data、Tflt_data全部取最小值,而后面的参数Tco_clka和Tflt_clka要取最大值,得到如下的关系:
Tco_clkb_min+Tflt_clkb_min+Tco_data_min+Tflt_data_min-(Tco_clka_max+Tflt_clka_max+Thold+Tjitter)>0

化简得到:
Tco_clkb_min+Tflt_clkb_min-(Tco_clka_max+Tflt_clka_max)+Tco_data_min+Tflt_data_min-(Thold+Tjitter)>0

上式中Tco_clkb_min-Tco_clka_max为CLK_BUFFER内部的时钟偏斜,是固定的。

Tflt_clkb_min-Tflt_clka_max是PCB板上布线所产生的时钟偏斜,我们希望这个结果越大越好

同时希望Tflt_data_min越大越好,负载越重越好。与建立时序分析时正好相反。

综合建立时序与保持时序,得出如下两组关系式:
Tcycle+[Tco_clka_min+Tflt_clka_min-(Tco_clkb_max+Tflt_clkb_max)]-(Tco_data_max+Tflt_data_max+Tsetup+Tjitter)>0

Tco_clkb_min+Tflt_clkb_min-(Tco_clka_max+Tflt_clka_max)+Tco_data_min+Tflt_data_min-(Thold+Tjitter)>0

 

 

其中有几个数据是可调的,即(Tflt_clka_min-Tflt_clkb_max)、(Tflt_clkb_min-Tflt_clka_max)、Tflt_data_max、Tflt_data_min,如果保证时钟走线延时相等,则(Tflt_clka_min-Tflt_clkb_max)=0、(Tflt_clkb_min-Tflt_clka_max)=0,要使得上述两组不等式同时成立,必须保证Tflt_data值在一定的区间内。若这种情况下方程式无解,则必须要考虑调整CLK_A和CLK_B的飞行时间。

 

 

 

共同时钟向源同步时钟的演变及时序分析

 

 

 

 

接下来对共同时钟做进一步的改进,从正常的共同时钟系统来看,我们希望CLK_BUFFER出来的两根CLK信号到驱动端和接收端的飞行时间尽可能相等,因为这样有助于我们进行时序计算,从而进行走线约束。但是发现,当数据信号长度被约束在一个时钟周期的延时里,如果数据信号的走线一定,要想提高系统时钟的频率,那么势必降低了系统的时钟裕量,从而要求数据信号走线延时降低。当达到一定的条件时候,再上升系统时钟频率,建立时序与保持时序的不等式的结果将是无解。那么出现这种情况怎么办呢?上述分析也提到了,要考虑调整CLK_A和CLK_B的飞行时间,来满足裕量。
从建立裕量不等式来看,我们希望(Tflt_clka_min-Tflt_clkb_max)值越大越容易满足要求,而从保持时序不等式来看,又希望(Tflt_clkb_min-Tflt_clka_max)值越大越好。这是一对矛盾的表达式,那么我们是否有其他的方法来同时满足接收端得建立时序要求和保持时序的要求?我们可以暂时控制其中一个表达式,让其最大化满足建立时序和保持时序其中一个要求,然后再想办法满足另一个时序。取Tflt_clkb为0,这时,建立裕量可以最大化满足,而保持裕量却被最大化消减了,甚至保持裕量会出现负值。

 

 

 

 

 

图4:共同时钟拓扑结构-源同步时钟拓扑

 

 

 

 

为了说明源同步时钟是由共同时钟系统演化而来,我们把CLK_BUFFER植入驱动端内部,那样就变成了系统时钟,我们可以不考虑系统时钟的输入,当然图4中的CLK_B将不复存在,而CLK_A变成了驱动端和接收端的内部时钟,这样的系统称之为内时钟系统。我们暂时不考虑内部的时钟偏斜,在驱动端,时钟分成两路,一路触发驱动端的数据信号,而另一路则先经过PLL,再传输到接收端。为什么这里采用PLL呢?理论上,只要我们调整数据信号走线和时钟信号走线也能满足时序要求,但是很明显,使用PLL进行时序控制使得时序裕量更加准确,且调试方便。

 

 

 

 

 

图5:内时钟拓扑

 

 

为了简便分析,不考虑时钟抖动Jitter,这种情况下,时钟Buffer被当作是系统时钟,Tco_clk就不存在了,Tflt_clkb为0后的建立时序裕量不等式为:

Tdelay+Tclk_flt-Tco_data-Tdata_flt-Tsetup>0

Tdelay:驱动端时钟输出延后系统时钟的时间
Tclk_flt:时钟的飞行时间
Tco_data:驱动端时钟开始到数据输出有效的时间
Tdata_flt:数据信号的飞行时间
Tsetup:接收端数据信号的建立时间

 

 

图6:内时钟建立时序图

 

 

 

 

接下来再来分析一下接收端的保持时序裕量,不等式中Tcycle为系统时钟CLK周期
Tcycle+Tco_data+Tdata_flt-Tdelay-Tclk_flt-Thold>0  

 

 

 

 

 

图7:内时钟保持时序图

 

 

 

 

综上两个不等式可以得出约束

Tdelay+Tclk_flt-Tco_data-Tdata_flt-Tsetup>0

Tcycle+Tco_data+Tdata_flt-Tdelay-Tclk_flt-Thold>0

如果Tdelay等于一个时钟周期,则上述不等式可化简为:
Tcycle+Tclk_flt-Tco_data-Tdata_flt-Tsetup>0            (1)

Tco_data+Tdata_flt-Tclk_flt-Thold>0                       (2)

我们都知道源同步系统不关系数据信号的Tco,即上述不等式中的Tco_data,那么我们令下图中,驱动端数据在驱动端时钟发出前有效的时间为Tvb,之后有效的时间为Tva。

 

 

  

 

图8:输出时钟与输出数据关系

 

 

 

根据图6:内时钟建立时序图可以求出

Tvb=Tdelay-Tco_data
=>Tco_data=Tdelay-Tvb=Tcycle-Tvb
带入上述(1)式中
Tcycle+Tclk_flt-(Tcycle-Tvb)-Tdata_flt-Tsetup>0 
=>Tclk_flt+Tvb-Tdata_flt-Tsetup>0              (3)

根据图7:内时钟保持时序图可以求出

Tva=Tcycle+Tco_data-Tdelay
=>Tco_data=Tdelay+Tva-Tcycle
代入上述(2)式中
Tdelay+Tva-Tcycle+Tdata_flt-Tclk_flt-Thold>0  
由于Tcycle=Tdelay
所以Tva+Tdata_flt-Tclk_flt-Thold>0          (4)

对照上述两个不等式组,考虑到最坏的情况,把表达式中正值取最小值,而前面带负号的数取最大值,得到
Tclk_flt_min+Tvb_min-Tdata_flt_max-Tsetup_max>0  

Tva_min+Tdata_flt_min-Tclk_flt_max-Thold_max>0

从源同步时序分析中可以看出,裕量关系式和CLK、DATA的走线长度并没有直接关系,而是与他们之间的差值有关系,并且需要注意的是,一定是接收端先接收到数据信号,并达到一定的时间再接收到CLK信号,从而对数据信号进行锁存。而驱动端的数据信号也需要CLK来触发,所以对CLK信号的处理就显得尤其关键。从DDR开始,时钟设计中加入了选通信号,其也是上述内时钟系统的演化,只不过把内时钟系统里的输出CLK换成Strobe。而CLK与选通信号Strobe之间又是内时钟系统。有了选通信号之后,数据信号就需要参考选通信号了而不是CLK,其基本原理都没有改变。


联系我们
联系人: 陈工
电话: 15327209850
传真: 027-59208669
Email: gchen@ensang.com
QQ: 278181923
微信: 武汉PCB设计
地址: 武汉市洪山区关山大道保利花园17A605室