时钟抖动的分类:周期抖动、相邻周期抖动、长周期抖动
好,我们正式开始聊抖动的分类。很多刚入行的朋友,一听到「抖动」两个字就头大,觉得这是个玄学概念。其实没那么复杂。
抖动的分类方式很多,按时间尺度分的话,我习惯把它们分成三类:周期抖动、相邻周期抖动和长周期抖动。这三种抖动,对应着不同的应用场景和测试需求。
1. 周期抖动(Period Jitter)
周期抖动,说白了就是测量时钟信号每个周期的宽度,然后看这些宽度变化有多大。
怎么测?你拿示波器抓 N 个时钟周期,记录每个周期的 T1、T2……TN。然后算这些 T 的统计分布,标准差就是周期抖动的 RMS 值,峰峰值就是 Tmax - Tmin。
周期抖动对什么影响最大?建立时间/保持时间。你想想看,如果时钟周期忽长忽短,那寄存器采数据的时间点就跟着飘。一旦某个周期短到让数据来不及稳定,setup 就崩了。
举个例子,我在一个 5GHz 的 SerDes 项目里遇到过,PLL 的环路带宽设得太宽,导致周期抖动的峰峰值到了 12ps。这看起来不大对吧?但你算一下,5GHz 时钟周期才 200ps,12ps 的抖动占了 6% 的周期裕量,这谁受得了?最后只能把带宽降下来。
2. 相邻周期抖动(Cycle-to-Cycle Jitter)
相邻周期抖动,关注的是相邻两个周期之间的差值变化。即 ΔT = |Tn - Tn-1|。
这个指标在 DLL(延迟锁相环) 和 高速数据接口 里特别重要。
为什么会这样?因为相邻周期抖动直接反映了时钟的短时稳定性。如果相邻两个周期差了好几个皮秒,那你在做高速串行传输时,接收端的眼图就会闭合得快很多。
核心要点:
- 周期抖动:看值的变化 → 影响 setup/hold
- 相邻周期抖动:看差值的抖动 → 影响高速串行链路的误码率
我记得有一次在调试 PCIe Gen3 接口时,BER 总是不过。示波器一看,周期抖动的 RMS 值挺正常的,但相邻周期抖动却大得离谱。后面定位到是片上的去耦电容不够,导致电源噪声在每一个时钟周期都有波动。所以,相邻周期抖动对电源噪声特别敏感。
3. 长周期抖动(Long-Term Jitter)
长周期抖动,测量的是经过 N 个完整周期后的总时间偏差。比如你数了 10000 个周期,用这个总时间跟理想的 10000 * T0 相比,偏差就是长周期抖动。
长周期抖动主要跟 PLL 的低频相位噪声有关。因为低频噪声会在时间上不断累积,随着观测周期数增加,抖动会越来越大。
你想想看,如果一个时钟的长期精度差,那在做同步以太网或者数据采集系统时,时间戳的精度就会非常差。我曾经在一个多通道 ADC 采集项目里,要求所有通道同步采样。结果发现相邻两次采样之间的时间偏移越来越大,查了一圈,是 PLL 的噪声整形不好,低频噪声一直在累积。
| 抖动类型 | 测量对象 | 主要影响因素 | 典型应用场景 |
|---|---|---|---|
| 周期抖动 | 单周期宽度 Tn | 高频噪声、PLL 带宽 | 数字逻辑时序收敛 |
| 相邻周期抖动 | 相邻周期差值 |Tn - Tn-1| | 电源噪声、器件工艺 | 高速 SerDes、DLL |
| 长周期抖动 | N 周期总时间偏差 | 低频相位噪声、VCO 噪声 | 同步以太网、数据采集 |
嗯,这里要注意一个很关键的细节:长周期抖动测量的周期数 N 不能随便定。通常要根据你的系统要求来选。我在做 PLL 设计时,习惯把 N 定在 1000 或者 10000,因为绝大多数的应用场景,时间窗口都不会超过这个范围。
三类抖动的内在关系
其实,这三类抖动并不是独立存在的。它们之间的关系可以用一组公式来描述。假设每周期时长为 T[n],相邻周期抖动就是 T[n] - T[n-1],长周期抖动则是 Σ(T[i] - T_ideal)。
所以,长周期抖动 ≈ 相邻周期抖动的积分。一个系统如果相邻周期抖动很大,那么长周期抖动一定会随着观察时间增长而不断发散。
但反过来就不一定了——长周期抖动小,不代表相邻周期抖动也小。因为相邻周期抖动可能正负波动,积分之后可能互相抵消。这也是一些 PLL 在锁定时,周期抖动看起来很好,但相邻周期抖动却不理想的原因。
我个人做时钟树分析时,一般会同时看这三类抖动的仿真结果。如果只给一个指标,很容易被误导。
嗯,以上就是时钟抖动的三个基本分类。周期抖动看的是单个周期的宽度变化,相邻周期抖动看的是连续周期之间的差异,长周期抖动看的是累积时间偏差。每个都有各自的应用场景和优化重点。