一、抖动测试基础:高速数字系统的隐形杀手

各位工程师朋友,咱们今天聊聊抖动。说白了,抖动就是信号边沿偏离理想位置的那点偏差。嗯,听起来好像不是什么大事?但你可能想不到,在高速数字系统里,这恰恰是导致系统误码、丢数据的头号元凶。

我刚开始做信号完整性测试那会儿,对抖动也不太在意。总觉得只要信号走通、芯片能跑,抖一点怕什么。直到有一次调试一块8Gbps的SerDes接口,眼图死活睁不开——后来一测,抖动的贡献占了整个时序预算的60%。从那以后,我再也不敢小看抖动了。

1.1 什么是抖动?

先看个最直白的定义:抖动是数字信号边沿在其理想位置上的短期偏离。注意“短期”这个词,它排除了频率漂移这种长期变化。通常我们把抖动定义在10Hz以上的相位波动。

你看这组波形就明白了:

抖动 vs 确定性偏差

理想信号边沿在T0位置到达
实际信号边沿可能早到或晚到ΔT
这个ΔT就是抖动值,通常用ps或UI(单位间隔)来表示

在高速系统里,一个UI可能只有100ps甚至更窄。假设抖动是20ps pk-pk,那留给数据有效采样窗口就只剩80ps了。你想想看,这压力多大。

1.2 抖动对高速数字系统的影响

抖动的危害,我习惯从三个层面来理解:

  • 对时序裕量的侵蚀:抖动直接吃掉建立时间和保持时间预算。100ps的UI,30ps抖动,裕量就直接打了七折。
  • 对误码率(BER)的提升:抖动越大,接收端采样到错误数据的概率就越高。从10⁻¹²误码率升到10⁻⁹,可能只是增加了几ps的抖动。
  • 对眼图闭合的加速:眼图的水平和垂直张开度都会随抖动增大而缩小。眼图闭合到一定程度,通信就断了。

我在项目中遇到过最典型的一个坑——DDR3接口跑1066MT/s时,经过背板后眼图完全闭合。排查好久才发现是电源纹波耦合到PLL上,引入了周期抖动。换了一颗去耦电容,眼图立马打开。嗯,这里要注意,抖动往往不是单一来源。

避坑指南: 我曾经调试过一个12Gbps的链路,抖动测试结果很漂亮(总抖动只有0.15UI pk-pk),但实际工作时偶尔丢包。后来用BERT做长时间误码率测试才发现,那个0.15UI是随机抖动占大头,而系统对随机抖动的容忍度其实很低。所以,只看总抖动不分析成分,容易踩坑。

1.3 抖动的分类

抖动的分类方法有很多。我最常用的是按照成因和统计特性来分。说白了,就是看它是随机的还是有规律的。

1.3.1 随机抖动 (RJ)

随机抖动是白噪声过程,来自热噪声、散粒噪声、1/f噪声这些物理本质。它的特点是:

  • 无限带宽(理论上)
  • 高斯分布
  • 无界(测量时间越长,看到的峰值越大)
  • 无法完全消除,只能通过电路设计来抑制

RJ通常用均方根值(RMS)表示。我习惯用一个经验公式:对于高斯分布,峰峰值约等于RMS乘以14(对应10⁻¹²误码率)。这个倍数关系面试经常考,哈哈。

1.3.2 确定性抖动 (DJ)

确定性抖动有明确的根因,通常是有界的。它又分好几种子类:

子类型 根源 特征
周期抖动 (PJ) 电源纹波、PLL噪声、开关噪声 频率固定的周期成分
占空比失真 (DCD) 接收端阈值偏移、上升/下降时间不对称 脉宽不均匀,50%占空比偏离
码间干扰 (ISI) 通道带宽不足、反射、损耗 与数据图案相关,不同码型抖动不同
有界无关抖动 (BUJ) 串扰、邻近信号耦合 幅度有界,时间不相关

DCD 是我在调试中高频遇见的。记得有一次测试SATA接口,发现DCD贡献了总抖动的35%。追查下去,是驱动器输出级的PMOS和NMOS尺寸不匹配,导致上升时间比下降时间慢了约15ps。换了匹配的驱动芯片,问题就解决了。

ISI 则跟通道直接相关。你想想看,一根30英寸的PCB走线,在10Gbps下损耗可能达到6~8dB。数据流中连续的“1”和“0”会让通道充放电,导致下一比特的起始电平不同——这就是ISI的根因。我在背板设计中就吃过这个亏,后来用CTLE均衡才压制住。

1.3.3 周期抖动 (PJ)

PJ有时被归在DJ里,有时单独拎出来。它是指抖动值随某个固定频率周期变化。典型的来源:

  • 开关电源的开关频率(几百kHz ~ 几MHz)
  • 时钟PLL的参考杂散
  • 板上数字信号的谐波(比如DDR时钟的2次、3次谐波)

PJ有一个很有意思的特性:如果PJ频率刚好等于数据率的分频结果,会跟数据模式产生固定相位关系,很难通过均衡消除。我在一个10Gbps项目里遇到过,PJ来自相邻20MHz的DC-DC转换器,频率差刚好跟数据率没对齐,结果在眼图上看到频闪效应,非常头疼。

技巧分享: 识别PJ很简单,用频谱仪看时钟信号的相位噪声谱。那些突起的尖峰,对应频率就是PJ的频率。我一般还会用BERT的抖动分解功能,直接量化PJ幅度。

1.3.4 其他分类视角

除了上面按成因分,还有几种常见分类维度:

  1. 按时间尺度:长期抖动 vs 短期抖动(<10⁵ UI)
  2. 按测量方式:时间间隔误差(TIE)、周期抖动、周期-周期抖动
  3. 按数据相关性:数据相关抖动(DDJ) vs 数据无关抖动

我个人习惯在测试报告里同时列出:总抖动TJ@BER=10⁻¹²、RJrms、DJpk-pk,以及PJ的频率和幅度。这样无论做设计还是做验证,都能快速定位问题。

抖动分类与构成关系 总抖动 (TJ) 随机抖动 (RJ) 确定性抖动 (DJ) 热 / 散粒 / 1/f 周期抖动 (PJ) 占空比失真 (DCD) 码间干扰 (ISI) 有界无关干扰 (BUJ) 注意:周期抖动 (PJ) 有时独立列出,有时归在确定性抖动 (DJ) 内 实际测试中,RJ + DJ 并不严格等于 TJ,因为两者有相互作用 准确计算需使用双狄拉克法或BERT的菊水分解

1.4 小结:抖动的测试意义

理解了抖动的分类,你就能更有的放矢地做测试。我的经验是:

  • 先测总抖动TJ,知道系统还有多少冗余
  • 如果TJ超标,再进行抖动分解,看RJ和DJ各自贡献度
  • 如果DJ占主导,进一步定位是PJ、DCD还是ISI,针对性优化

举个例子:有一次测一块PCle Gen4板卡,TJ@10⁻¹²已经到0.35UI,远超0.2UI的spec。抖动分解后发现,RJ只有0.05UI RMS,但DJ高达0.25UI pk-pk。进一步分析DJ频谱,发现0.5MHz处有个明显的峰——刚好是板上DC-DC的开关频率。换了低纹波的电源模块后,DJ降到0.08UI,系统顺利通过验证。