锁相环(PLL)基础与结构归纳总结
咱们搞CDR,绕不开锁相环。说白了,CDR的核心就是一个高性能的PLL。很多刚接触的同学会把PLL想得很玄乎,其实它就是一套闭环控制系统。目标只有一个:让输出信号的相位,死死地咬住输入信号的相位。
我个人习惯,把PLL拆成三块来看——检测、处理、输出。搞清楚这三块,PLL的门就摸到了。
PLL的核心构成
一个基本的PLL,包含下面几个关键模块。我最早在书上看到这些框图时,觉得挺简单。直到我在项目中调试一个10Gbps的CDR,才发现每个模块都有坑。
- 鉴相器(PD):比一比输入和反馈的相位差。谁领先,谁落后,差多少。
- 电荷泵(CP):把鉴相器输出的“谁领先”信号,转成实际电流。
- 环路滤波器(LF):把电荷泵的脉冲电流,平滑成一个稳定的控制电压。
- 压控振荡器(VCO):根据控制电压,调整输出频率。电压高,频率高;电压低,频率低。
- 分频器(Divider):把VCO的高频输出分频,送回鉴相器做比较。CDR里有时不需要这个,或者用特殊的分频结构。
鉴相器:从“谁快谁慢”说起
鉴相器是PLL的眼睛。眼睛不好使,后面再好也白搭。
常用的鉴相器有好几种,各有各的脾气:
| 类型 | 检测范围 | 优缺点 | 典型应用场景 |
|---|---|---|---|
| 异或门鉴相器 | 0 ~ 180° | 线性好,电路简单;但只能在占空比50%的信号上用,且对谐波敏感 | 低速时钟恢复 |
| 鉴频鉴相器(PFD) | -360° ~ +360° | 既能鉴相又能鉴频,捕获范围大;但有死区问题 | 最常用的结构,频率锁定必备 |
| Hogge鉴相器 | 0 ~ 1UI | 适合高速数据,无频率牵引;但增益随数据密度变化 | 高速CDR的经典选择 |
| Alexander鉴相器 | 0 ~ 1UI | 数据边沿触发,无需参考时钟;但有一个次要的锁定点 | 突发模式CDR |
说到PFD,有件事我一直记得。有一次在实验室,一个PLL怎么都锁不上,折腾了两天。后来发现是PFD的死区问题。输出相位差很小的时候,PFD根本检测不到。解决办法是在复位路径上加一个延迟,让PFD在零相位差时也能产生一个很窄的脉冲。
电荷泵与环路滤波器:充放电的艺术
电荷泵和环路滤波器,这两个家伙是绑在一起看的。电荷泵输出的是电流脉冲,环路滤波器把它转成电压。
电荷泵最关键的两个指标:
- 充放电电流匹配:上拉和下拉电流必须相等。不相等,会产生相位偏移。
- 开关速度:开关时间要远小于一个UI,否则会产生非理想效应。
环路滤波器的形式,直接影响PLL的动态响应。常见的二阶无源滤波器,包含一个电容和一个电阻串联,再并联一个电容。R和C的值,决定了PLL的带宽和相位裕度。
# 二阶环路滤波器传递函数近似
# F(s) = (1 + sRC) / (sC1(1 + sRC2))
# 其中 C1 是主导电容,C2 是高频滤波电容
# 这个公式我每次跑仿真前都会再默写一遍
压控振荡器(VCO):PLL的心脏
VCO把电压变成频率,是PLL里最核心、也最难做的模块。它的性能,直接决定了PLL的抖动和相位噪声。
我见过不少同学,在设计VCO时一味追求高频,结果忽略了相位噪声。你想想看,一个PLL的带内相位噪声,主要取决于参考时钟、PFD和CP的噪声。但带外相位噪声,基本由VCO决定。
常见的VCO类型:
- LC VCO:相位噪声低,适合高频;但片上电感占面积大,调谐范围有限。
- 环形VCO:面积小,调谐范围宽,多相输出方便;但相位噪声差一些。
- 注入锁定VCO:用于时钟分配,锁定后相位噪声极低;但锁定范围窄。
归纳总结:PLL是如何工作的?
咱们过一遍完整的锁定过程。假设PLL刚开始,VCO的自由振荡频率是f0,输入参考是fref:
- PFD比较fref和分频后的反馈信号fdiv,发现频率不同。PFD输出Up和Down脉冲。
- 电荷泵根据Up/Down,往环路滤波器充放电。
- 环路滤波器电压Vctrl平滑变化,驱动VCO频率向fref靠近。
- 当频率拉近到一定程度,进入相位锁定阶段。
- 最终,反馈信号的相位和输入参考的相位,锁定在一个固定的相位差上(通常很小)。
这个过程,我习惯把它画成一个闭环的图,一眼就能看明白。下面这张图,是我自己总结的PLL信号流。
这张图把信号流和关键节点都串起来了。PFD是起点,也是终点——它比较的是输入和反馈。VCO是执行者,它负责产生输出。
- 频率必须相等(对于整数分频PLL,f_vco = N * f_ref)
- 相位差稳定在一个固定值(不是零,但很小)
- 环路增益足够,保证能捕获并跟踪
其实,PLL的设计就是在这几个模块之间做权衡。带宽大,锁定快,但噪声大。带宽小,噪声小,但锁定慢,且对VCO漂移反应迟钝。你想想看,是不是这个道理?
我在调一个10G CDR时,就吃过带宽的亏。一开始我追求极低的抖动,把带宽设得很窄。结果发现,只要温度一变,或者电源有点波动,PLL就失锁了。后来我适当放宽了带宽,虽然抖动增加了一点点,但系统稳定多了。工程嘛,就是个取舍。