4. 抖动与时序裕量

4.1 抖动的本质与分类

抖动这东西,说白了就是信号的跳变沿不在它该在的位置上。你想想看,理想情况下时钟边沿应该是整整齐齐的,但实际走线有噪声、有串扰、有电源波动,边沿就晃来晃去。我在项目中遇到过好几次,因为抖动估计少算了一半,结果眼图闭了,链路死活不通。

4.1.1 随机抖动(RJ)

随机抖动主要来自热噪声、散粒噪声这种物理现象。它的分布是高斯型的,没有上界,但概率很小。我习惯用RMS值衡量它。注意啊,RJ会随着测量时间变长而累积,所以给裕量留空间时不能只看短时结果。

4.1.2 确定性抖动(DJ)

确定性抖动是有界、可重复的。常见的有:

  • 占空比失真(DCD):差分对正负边沿不对称造成的。
  • 码间干扰(ISI):因为通道频率响应不理想,前一位影响后一位的跳变。
  • 周期抖动(PJ):开关电源的纹波、时钟倍频的谐波会带进来。
  • 串扰相关抖动:相邻信号线的电磁耦合。

DJ的峰值是可以量化的,不像RJ那样没边。表格对比一下区别更清楚:

特性随机抖动(RJ)确定性抖动(DJ)
来源热噪声、散粒噪声ISI、DCD、PJ、串扰
概率分布高斯有界,双峰/多峰
对BER的影响随观察时间增长固定峰值
工程度量RMS(σRJ)峰峰值(DJpp)
是否可消除不能,只能接受可以通过电路/布局优化

4.1.3 总抖动(TJ)

把RJ和DJ组合起来就是总抖动。但组合方式不是简单相加,因为RJ是概率性的。工程上常用的双狄拉克模型:TJ = DJδδ + α·σRJ,其中α由目标误码率决定(例如BER=1e-12时α≈14)。嗯,这个α值我建议你用工具算一下,不同协议可能有细微差别。

4.2 时序裕量计算方法

裕量就是眼图张开的高度和宽度还剩多少。每次做Read Centering时我都会先算裕量,不然根本不知道该往哪个方向调。

4.2.1 眼图裕量的两种定义

  • 垂直裕量(Vmargin):眼高减去判决门限附近的噪声摆幅。
  • 水平裕量(Hmargin):眼宽减去总抖动峰值,也叫时序余量。

我个人习惯先看水平方向,因为它直接决定采样点能不能稳住。记不记得我之前提到的一个项目?DDR3跑800MT/s,水平裕量只剩15ps,一上温度就到10ps,妥妥的误码。

4.2.2 浴盆曲线(Bathtub Curve)

这是评估时序裕量的标准工具。横轴是采样相位偏移,纵轴是误码率。曲线形状像个浴缸,中间平坦区就是安全区。我建议你至少取10个相位点,每个点累积1e12个bit才能得到1e-12的精度。

// 计算浴盆曲线关键值的伪代码
float DJ_pp = 30.0;  // ps,确定性抖动峰峰值
float sigma_RJ = 2.0; // ps,随机抖动RMS
float BER_target = 1e-12;
float Q = Q_scale(BER_target); // 约7.04
float TJ = DJ_pp + 2 * Q * sigma_RJ; // 双狄拉克模型
float eye_width = UI - TJ; // UI为1个UI,例如333ps @3Gbps
// 水平裕量 = eye_width / 2

4.2.3 工程中的坑

  • 别只测一个点:至少扫5个不同的码型,PRBS7和PRBS31的结果可能差一半。
  • 温度电压交叉:我在项目中就吃过亏,常温下裕量50ps,85℃下直接变20ps。建议你跑三态面。
  • TX和RX的抖动源要分开:有些工具把TX/RX捆绑在一起,容易掩盖问题。
我曾经遇到一个PCIe Gen3链路死活不过,测量眼图张开很好,但一做链路训练就失败。最后发现是参考时钟的PJ被TX放大,而裕量计算公式里只用了RJ的RMS。记得把确定性抖动加进去再算!

4.3 裕量与误码率的关系

裕量和BER是反比关系,而且是非线性的——BER从1e-12降到1e-15,裕量可能只多2-3ps。为什么会这样?因为随机抖动的尾巴是按指数衰减的。

4.3.1 裕量对BER的灵敏度

假设总抖动TJ固定,那么裕量每减少1ps,BER可能上升一个数量级。我习惯用这个公式估算:

ΔBER ≈ 10^( (ΔM / σRJ) * (α/Q) )   // 非精确,仅供趋势参考

你想想看,如果σRJ=2ps,裕量少了5ps,BER就会恶化约10^(2.5) = 316倍。所以链路训练时,稍微差一点就可能误码。

4.3.2 实际项目中的权衡

  • 提高电压能增加垂直裕量,但会加大功耗。DDR4的Vref调整就是这个道理。
  • 减少信道损耗能改善ISI,从而减小DJ。我建议在PCB走线时优先保证高速信号的反射和串扰抑制。
  • 有时候妥协方案更好:比如用DFE均衡,虽然加长了延迟但能腾出更多裕量。
小技巧:在做Read Centering时,先锁定一个较低的目标BER(比如1e-8)来粗调采样相位,再用高BER(1e-12)精调。这样能省不少测试时间。

4.3.3 用一副图说清全貌

下图为整个抖动→裕量→BER的关系框架,方便你理解各要素如何串联:

抖动分类与时序裕量关系图 总抖动 (TJ) 随机抖动 RJ 确定性抖动 DJ 热噪声、散粒噪声 高斯分布 (σRJ) ISI / DCD PJ / 串扰 时序裕量 眼图张开宽度/高度 误码率 (BER) 关键公式 水平裕量 = UI - (DJpp + 2Q·σRJ)

核心记忆点:

  • 抖动=RJ(高斯无边)+ DJ(有界可测)。
  • 裕量=眼图可用区域,浴盆曲线给出BER下的定量结果。
  • 裕量每减少1σRJ,BER恶化约一个数量级。