抖动分类详解:随机抖动与确定性抖动的物理机制
抖动这个话题,听起来有点玄。说白了,就是信号跳变的时候,没有老老实实待在它该待的位置上。我在项目里调试高速链路时,最常见的问题就是“眼图闭上了”,十有八九都是抖动闹的。
要做抖动分析,第一步就是分清楚抖动的种类。我个人习惯把抖动分成两大类:随机抖动(RJ)和确定性抖动(DJ)。这两兄弟的物理来源完全不同,处理方式也天差地别。
随机抖动:躲不开的本底噪声
随机抖动这东西,说白了就是老天爷赏的。你无法完全消除它,只能想办法控制它的大小。
它的统计特性决定了它的行为方式:服从高斯分布,也就是说,抖动幅度越大的事件,发生的概率越低,但永远不等于零。这就是为什么说 RJ 是“无界”的——理论上它可能无限大。
物理本质是什么?热噪声(约翰逊-奈奎斯特噪声),还有半导体器件里的散粒噪声(Shot Noise),以及闪烁噪声(Flicker Noise,也叫1/f噪声)。这些东西在每一个电阻、每一个晶体管里永远存在。
我举个例子。你在示波器上看到眼图的水平方向有点“毛”,怎么调驱动电流和均衡器都消不掉,那多半是 RJ 在作祟。
确定性抖动:每个毛刺都有原因
和 RJ 不同,确定性抖动是有“根”的。它有界,而且可以被分离、被定位、被优化。我在项目中做过的抖动调试,十有八九最后都落到 DJ 头上。
DJ 可以拆成几个类型。我来列一下,每一条背后都有我踩过的坑。
| 类型 | 物理机制 | 典型特征 | 常见诱因(我踩过的坑) |
|---|---|---|---|
| DCD | 正负脉冲宽度不一致 | 与数据码型相关 | 驱动器的阈值电压没设对;P/N 管驱动能力不匹配 |
| SJ | 周期性的相位调制 | 在抖动频谱上看到单根谱线 | 开关电源纹波耦合进时钟路径;某个电容选错了 |
| ISI | 前一个 bit 影响了后一个 bit 的判决 | 与传输的码型序列强相关 | PCB 走线损耗大、阻抗不连续、有 Stub |
| PJ | 其他周期性的干扰 | 多个非谐波相关的谱线 | 邻近信号线串扰、EMI 耦合 |
占空比失真
DCD 是最容易测出来的那种 DJ。你把时钟信号或 PRBS 码型接到示波器上,如果看到高电平、低电平的持续时间不一样,那就是 DCD。
物理根源呢?通常是发射器内部的差分对不匹配,或者接收端的阈值电压偏移了。我曾经在一个 25 Gbps 的项目上,怎么调都调不到规范值,最后发现是芯片参考电压有一颗 0.1uF 的电容虚焊了……
正弦抖动
SJ 是带有确定频率的周期抖动。电源完整性(PI)做得不好时,最常出现 SJ。你想想看,开关电源的 1 MHz 纹波渗进了 PLL 的 VCO 控制电压上,时钟输出就会跟着抖。
我记得有一次,在做 PCIe Gen5 一致性测试时,眼图就是过不了。我本来以为是板子设计问题,结果拿频谱分析仪一看时钟路径,一根 1.5 MHz 的谱线特别明显。嗯,是电源模块的噪声。后来加了 LC 滤波就过了。
码间串扰
ISI 是高速设计中绕不开的课题。它的本质是信道特性不够理想。你发的信号经过 PCB 走线、连接器、线缆时,高频分量会被衰减,反射也会造成前后 bit 的能量重叠。
你发一组 “000” 之后再发一个 “1”,和发一组 “111” 之后再发一个 “1”,这个 “1” 的眼睛张开程度是不一样的。这就是 ISI。
抖动的组合:双狄拉克模型
好,RJ 和 DJ 都介绍完了。实际测到的总抖动 TJ,是它们的合成结果。怎么合成?公式是这样的:
TJ(BER) = DJ + 2 × α × RJ(RMS)
其中 α 是 BER(误码率)对应的峰值因子。BER=1e-12 时,α≈7.03(双尾高斯分布)。
为什么会是这个形式?因为 DJ 是有界的,可以看作一个方波分布或双峰分布。它与高斯 RJ 做卷积后,尾部接近高斯分布,所以 TJ 在高 BER 点(比如 1e-12)的估算可以用这个线性关系。
我在第一次做抖动预算时,就吃过这个模型的亏。当时我按照非常保守的 RJ 值做了预算,结果仿真出来的 TJ 远远超标。后来才发现,DJ 的估测我做得太粗糙了。
总结一下这一节的核心:
- RJ 是高斯、无界、不能消除的——来自热噪声和散粒噪声。
- DJ 是有界、可以被分离和优化的——包含 DCD、SJ、ISI 等。
- 两者的合成用双狄拉克模型估算,但要清楚它的使用边界。
搞清楚了这些物理基础,你再看 PCIe 和 Ethernet 规范里那一堆抖动指标,就会发现每条定义背后都有刚才讲的物理含义。嗯,下一步就能真正动手分析抖动了。