1. 抖动的定义与分类:理解时序抖动、周期抖动、相邻周期抖动、抖动,以及随机抖动(RJ)和确定性抖动(DJ)的基本概念
做高速数字设计的朋友,都绕不开一个词——抖动。说白了,抖动就是信号在时间轴上的“晃悠”。一个理想的时钟,它的每个上升沿都应该落在精确的时间点上。但现实中,没这么完美。
我刚开始做SI仿真的那会儿,总以为只要时序裕量留够,抖动就不是大问题。直到有一次调试一块10Gbps的SerDes链路,眼图闭合得像一条细线,怎么调预加重都没用。后来才发现,是电源噪声引起的确定性抖动把时序裕量吃光了。嗯,从那以后,我再也不敢小看抖动分类这件事了。
抖动的基本定义
抖动的标准定义是:数字信号在特定电平阈值上的实际跳变时刻,相对于其理想跳变时刻的偏差。这个偏差的单位是秒或皮秒,通常用峰峰值或均方根值来度量。你想想看,我们传数据,本质上就是靠信号边沿的位置来传递信息。边沿抖了,数据就可能读错。
四大基础抖动概念
理解和测量抖动,首先得过“四种抖动”这一关。我个人的习惯是把它们放在一起对比着记,你会发现它们之间的差异很明显。
| 抖动类型 | 测量对象 | 典型用途 |
|---|---|---|
| 时序抖动 | 每个边沿相对于理想时钟的偏差 | 衡量总体时序质量 |
| 周期抖动 | 每个周期长度的变化 | PLL性能评估 |
| 相邻周期抖动 | 相邻两个周期的长度差 | 高速串行链路抖动预算 |
| 抖动 | 边沿相对于理想参考时间的累计偏差 | 系统同步时序分析 |
时序抖动
最直观的抖动。拿一个理想时钟和被测时钟的边沿做对比,每一次实际边沿比理想边沿超前或滞后的值,就是时序抖动。它的意义在于告诉我们,一个时钟信号的边沿到底“晃”得多厉害。如果用示波器的余辉模式看,抖动的范围就是眼图水平张开的损失部分。
周期抖动
把每个时钟周期的实际长度测出来,看看它们之间的变化。周期抖动的测量不需要理想参考时钟,它只关心周期ΔT = Tn - T理想的分布。这对PLL的设计特别重要——你想想看,如果PLL输出时钟的周期一会儿长一会儿短,那后面的逻辑时序就很难保证。
相邻周期抖动
抓住相邻两个周期的差值,计算方法很简单:JCC = |Tn - Tn-1|。这个指标对DDR接口特别敏感。为什么?因为DDR双沿采样,相邻两个数据眼之间的时间窗口就是由相邻周期抖动来决定的。
我记得有一次项目做DDR3调试,系统跑在1333MT/s时偶尔冒错,定位了好久。最后抓出相邻周期抖动一看,有一组数据对应时钟的相邻周期差达到了80ps,远超预算。说白了,就是时钟这颗晶振的电源纹波出了问题。
抖动
抖动是累计的。它不是看单个边沿的偏差,而是看多个周期下来,边沿相对于理想参考时间的总飘移量。简单讲就是:第一个边沿抖了5ps,第二个边沿抖了-3ps,第三个边沿抖了7ps……那么到第N个边沿时,累计的偏差就是这些值的代数和。
抖动的累积效应在长距离串行链路中很致命。50个UI累计下来,边沿可能偏出半个UI,你会直接收到误码。这个指标在系统同步设计时必须严格约束。
两大抖动成分:RJ与DJ
从统计分析的角度,我习惯把所有抖动拆成两大家族:随机抖动(RJ)和确定性抖动(DJ)。为什么要拆?因为它们的来源不同,应对手段也完全不同。
- 随机抖动(RJ):由热噪声、散粒噪声等随机过程产生。它的概率分布是高斯(正态)分布,理论上无界。你可以减小它,但不可能消除它。RJ的存在给时序裕量带来了一个“拖尾效应”——只要统计时间足够长,总会遇到一个“特别大”的抖动值。
- 确定性抖动(DJ):有稳定规律或固定模式的抖动,它的分布是有界的。常见来源包括:电源噪声、串扰、非理想阻抗匹配、EMI等。这些抖动通常可预测、可测量、可优化。
测量时,RJ常用RMS(均方根值)来表征,DJ常用峰峰值来表征。别搞混了——如果你用峰峰值去描述RJ,那测量结果会随着观测时间的增长而越来越大,因为它理论上无界。
本章知识体系
下面这张图汇总了本章的核心知识点结构,你可以把它当作后续章节的“地图”——每当我们讨论具体分离方法时,都会回到这张图上找对应位置。
一个容易混淆的点
新手经常问:周期抖动的RMS和时序抖动的RMS,哪个大?答案是:周期抖动的RMS通常小于时序抖动的RMS。因为周期抖动看的是周期与周期之间的差异,而时序抖动包含了低频漂移(比如温度变化引起的时钟边沿长周期移动)。低频分量会被周期抖动“差分”掉——你想想看,一个缓慢漂移的时钟,相邻周期几乎不受影响。