时序约束条件
下面来具体讨论一下系统时序需要满足的一些基本条件。我们仍然以下图的结构为例,并可以据此画出相应的时序分析示意图。
在上面的时序图中,存在两个时序环,我们称实线的环为建立时间环,而虚线的环我们称之为保持时间环。可以看到,这两个环都不是闭合的,缺口的大小就代表了时序裕量的多少,因此设计者总希望尽可能增大这个缺口。同时还要注意到,每个环上的箭头方向不是一致的,而是朝着正反两个方向,因为整个系统时序是以时钟上升沿为基准的,所以我们时序环的起点为系统时钟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的情况下,我们将不得不放弃使用这种普通时钟系统设计。
那么应该怎么解决普通时钟系统的瓶颈呢?且听下回分解。
更多有趣的话题请看链接:
FPGA知识汇集-FPGA项目开发包含那些任务?
FPGA知识汇集--FPGA结构(1)
FPGA的应用
FPGA知识汇集-在命令行模式下使用Xilinx工具
FPGA知识汇集-ISE的这些有用的工具您知道吗?
FPGA知识汇集-FPGA设计开发需要熟悉哪些EDA工具呢?
FPGA知识汇集-值得收藏的FPGA代码命名规范?
FPGA 知识汇集--Linux下ISE的环境变量设置
FPGA知识汇集-值得收藏的Verilog代码风格1
FPGA知识汇集-值得收藏的Verilog代码风格2
FPGA知识汇集-编写可综合代码(RTL)需要注意的规则总结
FPGA知识汇集-Verilog和VHDL的混合使用
FPGA知识汇集-关于Xilinx 工具报告
FPGA知识汇集-例化与推译
硬件仿真加速器与原型验证平台
FPGA知识汇集-ASIC向FPGA的移植
FPGA知识汇集-时钟系统的移植
FPGA知识汇集-FPGA的低功耗设计方法总结
FPGA知识汇集-了解FPGA比特流结构
FPGA知识汇集-串行 RapidIO: 高性能嵌入式互连技术
FPGA知识汇集-FPGA时序基础理论