FPGA知识汇集-FPGA系统时序理论-FPGA常见问题社区-FPGA CPLD-ChipDebug

FPGA知识汇集-FPGA系统时序理论

 时序约束条件

图片[1]-FPGA知识汇集-FPGA系统时序理论-FPGA常见问题社区-FPGA CPLD-ChipDebug
下面来具体讨论一下系统时序需要满足的一些基本条件。我们仍然以下图的结构为例,并可以据此画出相应的时序分析示意图。
图片[2]-FPGA知识汇集-FPGA系统时序理论-FPGA常见问题社区-FPGA CPLD-ChipDebug
图片[3]-FPGA知识汇集-FPGA系统时序理论-FPGA常见问题社区-FPGA CPLD-ChipDebug
在上面的时序图中,存在两个时序环,我们称实线的环为建立时间环,而虚线的环我们称之为保持时间环。可以看到,这两个环都不是闭合的,缺口的大小就代表了时序裕量的多少,因此设计者总希望尽可能增大这个缺口。同时还要注意到,每个环上的箭头方向不是一致的,而是朝着正反两个方向,因为整个系统时序是以时钟上升沿为基准的,所以我们时序环的起点为系统时钟clk in的上升沿,而所有箭头最终指向接收端的控制时钟CLKC的边沿。
先来分析建立时间环:
缺口的左边的半个时序环代表了从第一个系统时钟上升沿开始,直到数据传输至接收端的总的延时,我们计为数据延时,以Tdata_tot表示:
        Tdata_tot=Tco_clkb+Tflt_clkb +Tco_data +Tflt_data
上式中:Tco_clkb是系统时钟信号CLKB在时钟驱动器的内部延迟;Tflt_ clkb 是CLKB从时钟驱动器输出后到达发送端(CPU)触发器的飞行时间;Tco_data是数据在发送端的内部延迟;Tflt_data是数据从发送端输出到接收端的飞行时间。
从CLKC时钟边沿的右边半个时序环代表了系统时钟到达接收端的总的沿时,我们计为时钟延时,以Tclk_tot表示:
Tclk_tot =Tcycle +Tco_clka +Tflt_clka – Tjitter
其中,Tcycle是时钟信号周期;Tco_clka 是系统时钟信号CLKA(第二个上升沿)在时钟驱动器的内部延迟;Tflt_clka是时钟信号从时钟驱动器输出到达接收端触发器的飞行时间;Tjitter是时钟的抖动误差。
    因此我们可以根据建立时间裕量的定义,得到:
    Tsetup_margin = Tclk_tot – Tdata tot – Tsetup
    将前面的相应等式带入可得:
    Tsetup_magrin = Tcycle + Tco_clka + Tflt_clka – Tjitter – Tco_clkb – Tflt_clkb – Tco_data – Tflt_data – Tsetup
    我们定义时钟驱动器(PLL)的两个时钟输出之间的偏移为Tclock_Skew ,两根CLOCK走线之间的时钟偏移为TPCB_Skew ,即:
    Tclock_Skew = Tco_clkb – Tco_clka;
    TPCB_Skew = Tflt_clkb – Tflt_clka
    这样就可以得到建立时间裕量的标准计算公式:
    Tsetup_magrin =Tcycle – TPCB_skew –Tclock_skew –Tjitter – Tco_ data -Tflt_data-Tsetup  (1.6.1)
    再来看保持时间环:
    对照上图,我们可以同样的进行分析:
        Tdata_delay = Tco_clkb + Tflt_clkb + Tco_data + Tflt_data
       Tclock delay = Tco_clka + Tflt_clka
    于是可以得出保持时间裕量的计算公式:
    Thold margin = Tdata_delay – Tclock_dalay – Thold_time
    即: Thold margin = Tco_data + Tflt_data + Tclock_skew + Tpcb_skew – Thold   (1.6.2)
    可以看到,式1.6.2中不包含时钟抖动Jitter的参数。这是因为Jitter是指时钟周期间(Cycle to Cycle)的误差,而保持时间的计算和时钟周期无关。
    对于任何时钟控制系统,如果要能保证正常工作,就必须使建立时间余量和保持时间裕量都至少大于零,即Tsetup marin >0;Thold margin >0,将公式1.6.1和1.6.2分别带入就可以得到普通时钟系统的时序约束条件不等式:
    TPCB_skew +Tclock_skew +Tjitter + Tco_data + Tflt_data+Tsetup< Tcycle    (1.6.3)
    Tco_data + Tflt_data + Tclock_skew + Tpcb_skew > Thold     (1.6.4)
需要注意的是:
1. 数据在发送端的内部延时Tco_data可以从芯片的datasheet查到,这个值是一个范围,在式1.6.3中取最大值,在式1.6.4中取最小值。
2.数据在传输线上的飞行时间Tflt_data在实际计算中应该取最大/最小飞行时间参数,在式1.6.3中取最大飞行时间,在式1.6.4中取最小飞行时间。
3. 时钟的偏移TPCB_skew和Tclock_skew也是一个变化的不确定参数,一般为+/-N ps,同样,在建立时间约束条件1.6.3中取+Nps,而在保持时间约束条件1.6.4中取-Nps。
    从上面的分析可以看到,对于PCB设计工程师来说,保证足够稳定的系统时序最有效的途径就是尽量减小PCB skew和信号传输的飞行时间,而其它的参数都只和芯片本身的性能有关。实际中经常采取的措施就是严格控制时钟和数据的走线长度,调整合理的拓补结构,并尽可能减少信号完整性带来的影响。然而,即便我们已经考虑的很周全,普通时钟系统的本身的设计瓶颈始终是无法打破的,也就是建立时间的约束,我们在尽可能减少由PCB布线引起的信号延迟之外,器件本身的特性如Tco、Jitter、TSetup等等将成为最主要的制约因素,尽管我们可以通过提高工艺水平和电路设计技术来不断提高数字器件的性能,但得到的效果也仅仅是在一定范围之内提升了系统的主频,在频率超过300MHz的情况下,我们将不得不放弃使用这种普通时钟系统设计。
    那么应该怎么解决普通时钟系统的瓶颈呢?且听下回分解。

请登录后发表评论

    没有回复内容