时钟如同人体规律跳动的心脏,它的每一个节拍都会有电路信号的变化伴随着。没有了时钟信号,时序电路就停止运转;时钟信号如果不规律,或伴随噪声,就有可能打乱电路运转时序,使设计失去既定的功能和性能。FPGA设计最基本的时钟源通常来自外部晶振,它能提供相对稳定的周期性的波形,FPGA内部也集成PLL等时钟管理模块,能够对基准时钟做分频和倍频。FPGA的时序分析中,数据路径的起始和终结都是时钟沿,时钟周期作为一个标准的时间基准,它的准确性就显得尤为重要。无论是来自外部晶振的时钟信号,还是在FPGA内部经过PLL产生的时钟信号,它们的周期都无法保证绝对的精准,影响时钟周期准确性的因素有很多,比如材料、工艺、温度以及各种噪声等。在FPGA内部集成的PLL,FPGA编译工具在做时序分析时可以直接套用既有的模型给出时钟的偏差参数,作为一部分需要预留的时序余量计算在内。而外部晶振所产生的时钟信号,设计者需要指定相关的时钟偏差参数,以时序约束的方式告知FPGA编译工具。FPGA的基准时钟一般都是由外部晶振输入的,所以这个晶振的偏差参数如何获取和计算,就显得尤为重要。
这里,我们通过SiTime公司的SiT8021系列晶振规格书,来了解一下影响其精度偏差的几个主要参数。如图1所示,我们重点关注时钟精度(Frequency tolerance)、时钟温漂(Frequency versus temperature characteristics)和时钟抖动(jitter)这几个参数。在不同的晶振规格书中,可能这三个参数的叫法会有所差异,但是其表达的含义基本是一致的。
图1 影响时钟精度的主要参数
时钟精度一般是在25℃下测量的时钟相对于标准频率的偏差,单位是ppm(百万分之一),如该规格书中Initial Tolerance一行,就是该系列时钟的精度,即±15ppm。简单的理解,15ppm就意味着每秒会产生15us的偏差。如果我们的时钟频率是25MHz,周期为1/25MHz=40ns,那么每个时钟周期产生的精度偏差值就是40ns*(±15/1000000)=0.6ps。
由于晶振材料和工艺的限制,致使其在不同的温度下精度会有较大的偏差,这种精度偏差我们通常称之为时钟温漂。单位一般也是ppm(百万分之一),如该规格书中Frequency Stability一行,就是该系列时钟的温漂,有±50ppm和±100ppm两种规格。如果我们的时钟频率是25MHz,并且选择了±100ppm的型号,那么每个时钟周期由于温漂所产生的精度偏差值就是40ns*(±100/1000000)= 4ps。
前面两个参数对于一般的FPGA应用来说,时钟的这点偏差还真的是不足挂齿,大可以忽略不计。但是,若我们要使用这颗晶振作为几十Gbit数据传输的基准时钟,那么还是要小心为妙。
最后,我们再来看看在时序分析中,为外部时钟建模时,对时钟偏差影响最大的参数。如图2所示,晶振源固有的噪声和干扰通常会带来时钟信号的周期性的偏差,我们称之为时钟抖动(jitter),其单位一般是ps。如该规格书中RMS Periord Jitter一行,就是该系列时钟的抖动,其最大值是110ps。
图2 时钟抖动模型
虽然时钟抖动一般都是ps级别的,但对于几百MHz的时钟频率而言,时钟抖动的占比还是不容忽视的。所以FPGA时序分析中,也会将时钟抖动作为时钟不确定性(uncertainty)的一部分加以约束。
没有回复内容