4. 相位噪声基础:定义、单位与转换
好,我们谈正事。做SerDes参考时钟选型,绕不开的就是相位噪声。
很多新手工程师喜欢直接把相噪指标扔给供应商,问“这个能不能用?”有时候能行,但更多的是踩坑。我个人习惯是,先把这个指标背后的物理意义搞清楚,再去谈选型。
4.1 相位噪声的定义与单位(dBc/Hz)
相位噪声,咱用大白话说,就是时钟信号在频域上的“不干净”程度。
理想情况下,一个完美的正弦波信号,它的频谱应该是一根笔直的谱线。现实中不存在这种东西。实际信号会有一点相位抖动,反映在频谱上,就是在中心频率两边,会出现一些连续的噪声边带。
测量方法很简单:取某个频偏(比如10kHz)处1Hz带宽内的噪声功率,除以总的载波功率。这个比值,就是dBc/Hz。
- dBc:意思是相对于载波功率的分贝数。
- Hz:归一化到1Hz带宽。
举个例子。一个10MHz的晶振,输出功率是10dBm。在10kHz频偏处,测得噪声功率是-80dBm。那这个点的相位噪声就是:(-80) - (10) = -90 dBc/Hz。
我刚开始做这行的时候,老听到有人说“这个晶振相噪-150dBc”,我还以为很高。后来才明白,-150其实是个非常优秀的值。你想想看,差了30dB,对高速SerDes的抖动贡献,那可是天壤之别。
4.2 相噪曲线:三个关键区域
光看一个单点相噪值是不够的。你拿到的相噪曲线,一般长成下面这种样子:从近端(几Hz)到远端(几十MHz),有不同斜率。
我把这条曲线分成三个区域来聊。
4.3 近端噪声(几十Hz ~ 几百kHz)
特点:曲线很陡,斜率接近30dB/decade。
来源:主要是晶体内部的闪烁噪声(1/f噪声),以及电源噪声的调制。
为什么要注意这个区域?因为它会影响时钟的长期抖动。信号抖动得慢,导致在SerDes链路里形成低频噪声,这种噪声很难通过CDR(时钟数据恢复)环路滤除掉。
4.4 中段噪声(几百kHz ~ 几MHz)
特点:斜率变缓,20dB/decade左右。这是PLL频率合成的关键区域。
来源:主要是VCO本身的相位噪声,以及锁相环带宽内的噪声。
为什么会这样?因为SerDes内部的PLL带宽,通常就设在这个频段(比如1MHz ~ 10MHz)。PLL对带内噪声是没有抑制能力的,反而会有增益。所以时钟源在这个频段的相噪,会几乎原封不动地“搬移”到SerDes的输出时钟上,直接决定随机抖动(RJ)的底限。
做参考时钟选型时,我建议重点看这三个点:
| 频偏 | 关注原因 | 典型目标值(12Gbps) |
|---|---|---|
| 1kHz ~ 10kHz | 影响CDR跟踪精度 | ≤ -130 dBc/Hz |
| 100kHz ~ 1MHz | 影响PLL带内抖动 | ≤ -155 dBc/Hz |
| 10MHz 以上 | 被PLL滤除 | ≤ -160 dBc/Hz |
4.5 相位噪声到抖动的转换公式
好了,理论说完了,直接上干货。相噪曲线怎么变成我们手册上看到的抖动值(ps rms)?
转换公式(简化版):
Jitter_rms = (1 / (2 * π * f0)) * √(2 * ∫ L(f) * df)
其中:
- f0:载波频率(单位Hz)
- L(f):在频偏f处的单边带相位噪声(单位dBc/Hz)
- ∫:对积分带宽内的噪声功率做积分
说白了,抖动就是相噪曲线下的面积,再除以2πf0。
实际工程里,我们不用手算积分。直接用工具,比如Keysight的相位噪声测试软件,或者用Matlab。给你的参考时钟做一次相噪测试,导出CSV数据,用下面这段Python代码就能算出来:
import numpy as np
import math
f0 = 156.25e6 # 参考时钟频率:156.25 MHz
freq = np.array([1e3, 10e3, 100e3, 1e6]) # 频偏点
L_dBc = np.array([-130, -150, -155, -160]) # 对应相噪
L_linear = 10**(L_dBc / 10) # dBc -> 线性值
# 梯形法积分
integral = np.trapz(L_linear, freq)
Jitter_rms = (1 / (2 * math.pi * f0)) * math.sqrt(2 * integral)
print(f"RMS Jitter = {Jitter_rms*1e12:.2f} ps")
4.6 避坑指南:为什么相噪很好,系统却跑不起来?
这种情况,我遇到过两次。
第一次,是一个12Gbps SerDes项目。我们用了业界顶级的OCXO,相噪曲线漂亮得没话说,积分抖动只有50fs。结果上电就跑不起来,眼图睁不开。
查了三天才发现,问题出在远端相噪上。那个OCXO在10MHz频偏处的相噪确实好,但在100kHz ~ 1MHz频段有一个突起的“噪声尖峰”。这个尖峰正好落在了SerDes PLL的带宽内。PLL没把它滤掉,反而把它放大,导致抖动急剧恶化。
第二次,是一次PCle Gen4的设计。我们用了普通的参考时钟,相噪也不差。但板级走线没处理好,电源耦合噪声通过参考时钟线串扰进来,在相噪曲线上叠加了很多寄生尖峰。最终抖动从300fs瞬间跳到了800fs。
所以,我的建议是:选参考时钟,不仅要看器件本身,还要看它在板级环境下的相噪表现。你拿到样片后,最好用自己的板子焊上去测一次。不测不知道,一测吓一跳。
嗯,最后总结一下今天讲的几个要点。相位噪声不是玄学,它是SerDes参考时钟最直接的频域表征。懂得看曲线、会算抖动积分、能识别异常尖峰,你才算真正入门了SerDes时钟选型。