1. 抖动基础

做高速设计这些年,抖动一直是个绕不开的话题。记得第一次接触10Gbps以上的信号时,眼图上的那些模糊边缘让我头疼了好几个星期。后来才明白,所有这些问题,归根结底都是抖动在作怪。

抖动,说白了就是数字信号的边沿位置偏离了理想时间点。你想象一下,一个理想的时钟信号,它的上升沿本来应该每个周期都准时到达。但现实中,信号会受到各种干扰,边沿总会提前或推迟那么一点点。嗯,就是这个“一点点”,决定了你的系统到底能跑多快。

1.1 抖动的本质

从工程角度看,抖动就是信号时序的不确定性。我们通常用单位间隔(UI)或者皮秒(ps)来度量。一个有趣的类比是:UI就像一条马路,抖动就像车轮压在了马路的不同位置上。

我习惯把抖动拆成两个维度来看:一是抖动的幅度有多大,二是抖动的频率有多快。这两个维度直接决定了你的误码率(BER)。

经验之谈: 设计高速系统时,我建议先把总抖动的预算控制在0.3 UI以内。超过这个值,眼图闭合会非常快,BER基本上就没法看了。

1.2 抖动的分类

抖动的分类方式有很多,但最实用的方法是按概率密度函数(PDF)来区分。为什么?因为不同类型的抖动,处理手段完全不一样。

我们先看一张分类图,理清它们之间的关系。

抖动知识体系结构图 抖动 (Jitter) 按来源分类 按统计特性分类 热噪声 (Thermal) 1/f 噪声 ISI (码间串扰) 周期抖动 (PJ) 随机抖动 (RJ) 确定性抖动 (DJ) SJ (正弦抖动) DDJ (数据相关抖动) BUJ (有界) 分类的意义:RJ 是高斯分布,无界;DJ 是有界、可预测的。处理方式完全不同。 抖动预算分配时,RJ 用均方根表示,DJ 用峰峰值表示。两者叠加要用卷积概率密度。

1.3 核心分类详解

抖动类型 全称 特性 典型来源
RJ 随机抖动 高斯分布,无界,均方根值 热噪声、散粒噪声
DJ 确定性抖动 有界,可预测,峰峰值 电源噪声、串扰、阻抗不匹配
SJ 正弦抖动 周期性,单一或组合频率 开关电源纹波、PLL杂散
DDJ 数据相关抖动 依赖于数据码型 通道带宽不足、ISI

这里有个关键点:RJ 是高斯分布的,理论上没有边界。你想想看,一个随机过程,随着数据量增大,它的峰值可以无限大。这就是为什么系统误码率永远不会降到零。而 DJ 是有界的,你总能测到它的最大幅度。

避坑指南: 我犯过一个低级错误——把DJ当作RJ来处理。当时用均方根值去估算DJ的影响,结果预算严重不足,BER死活达不到要求。后来才意识到,DJ必须用峰峰值来叠加,不能用均方根。

具体来说:总抖动的估算公式应该是 Tj = Dj(pk-pk) + 2*Q(BER)*Rj(rms),其中Q(BER)是跟目标误码率相关的系数。对于BER=1e-12,Q≈7.0。这个公式我后面会详细展开。

1.4 时域表示

时域看抖动,最直观的就是眼图和直方图。我个人的习惯是:眼图的水平张开度直接反映了系统的时序裕量。如果眼图开口小于0.2 UI,基本上系统就没戏了。

抖动的时域测量通常有两种角度:

  • 周期抖动(Period Jitter): 测量每个时钟周期的实际长度与理想值的偏差。这是最基础的测量。
  • 周期间抖动(Cycle-to-Cycle Jitter): 相邻两个周期长度的差值。PLL设计时最关心这个指标。
  • 长期抖动(Long-Term Jitter): 经过多个周期后累积的相位偏移。对同步系统影响最大。

举个例子,假设一个100MHz的时钟,理想周期是10ns。如果测到某个周期是10.05ns,那周期抖动就是50ps。但如果连续两个周期分别是10.05ns和9.98ns,周期间抖动就是70ps。

1.5 频域表示

频域看抖动,核心工具是相位噪声。你想想看,一个理想的时钟信号,频域上应该是一条干净的谱线。但因为相位调制,谱线两边会出现边带。

相位噪声与抖动的转换关系如下:

// 相位噪声积分到抖动的计算公式
// L(f) 为单边带相位噪声,单位 dBc/Hz
// f1 到 f2 为积分带宽

Rj_rms = (1 / (2 * π * f0)) * sqrt(2 * ∫[f1→f2] 10^(L(f)/10) df)

// 其中 f0 为载波频率
// 积分结果单位:秒 (s)

我见过不少工程师直接在时域做抖动分解,但说实话,频域的相位噪声测量更干净。特别在低频率偏移部分,时域直方图很难分辨出RJ和DJ,但频谱上很容易看出有没有固定的杂散。

实战建议: 当你在处理PLL或时钟恢复电路时,我强烈建议先用频谱仪看相位噪声曲线。如果发现有明显的毛刺(spur),那基本就是周期性抖动SJ在作祟。这时候要追查电源或布局问题,而不是在链路预算上瞎折腾。

频域还有一个好处,就是可以看到抖动的频率分布。同一个RJ数值,如果分布在低频段,可能会被时钟数据恢复电路(CDR)跟踪掉;如果分布在高频段,就完全没法处理。你看,光看时域的均方根值,这个信息你是拿不到的。

1.6 几个必知的核心观点

  • RJ和DJ的叠加不是简单的加法: 总抖动 = DJ(pk-pk) + α * RJ(rms),其中α取决于目标BER。这个我前面提过。
  • DDJ是通道的眼睛: 如果你的通道带宽不够,DDJ会迅速增大。我见过不少工程师,花了大量成本在优化DSP算法,结果发现根本问题出在PCB通道上。
  • SJ的频率很关键: 低频率的SJ(比如几十kHz到几MHz)可以被CDR跟踪。高频SJ(几十MHz以上)就是死结,只能从源头上抑制。
切记: 不要过度依赖“单点测量”。抖动是一个统计量,需要长时间、大量数据才能准确。一次捕捉到的最大值,很可能只是一个孤立事件,不代表系统的真实抖动下限。我遇到过有人用10万个采样点测试RJ,结果跟100万个点差了30%——这就是统计样本不够的后果。