CDR 系统架构:PLL 与 DLL 在 CDR 中的对比
好,咱们直接进入正题。很多入门工程师拿到 CDR 设计任务,第一反应就是:用 PLL 还是 DLL?其实这两个家伙都能从数据里恢复时钟,但骨子里的脾气完全不同。我个人习惯先看应用场景再做选择——你想想看,5Gbps 和 25Gbps 的要求能一样吗?
PLL 型 CDR:经典但挑剔
锁相环大家都熟,一个典型的电荷泵 PLL 由鉴频鉴相器(PFD)、电荷泵(CP)、环路滤波器(LF)和压控振荡器(VCO)构成。在 CDR 里,PFD 换成 Hogge 鉴相器或 Alexander 鉴相器,专门检测数据边沿与本地时钟的相位差。
核心优势:
- 内置 VCO 能直接产生高频时钟,不需要外部时钟源倍频
- 锁定后输出时钟的抖动经环路滤波,高频噪声被抑制得不错
- 适用于连续数据流(如 8B/10B 编码后的数据)
但 PLL 有个坑——环路带宽选择。我记得早期做 10Gbps 项目时,总想把环路带宽做宽来加快锁定,结果抖动容忍度(Jitter Tolerance)死活不过标。后来发现带宽太宽会把数据里的高频抖动传到 VCO 控制电压上,输出时钟反而更差。
避坑指南:我曾经在 28nm 工艺下设计一款 25Gbps CDR,PLL 带宽选到 10MHz,锁定时钟到 align 阶段老是丢锁。最后把带宽降到 2MHz,锁定时间虽然慢了 2μs,但抖动容忍度从 0.15UI 提升到 0.45UI。记住,CDR 不是越快越好,而是要在锁定时间和抖动容忍度之间找平衡。
DLL 型 CDR:简单但受限
延迟锁定环的结构更简单——它只有 鉴相器(PD)、环路滤波器和压控延迟线(VCDL),没有 VCO。DLL 不产生时钟,它只对输入的参考时钟或数据边沿做相位调整。什么意思呢?“它把输入时钟延迟若干个 Tap,然后拼出一个与数据边沿对齐的采样时钟。”
| 对比维度 | PLL 型 CDR | DLL 型 CDR |
|---|---|---|
| 时钟源 | 内部 VCO 产生 | 依靠外部时钟或数据自身边沿 |
| 锁定范围 | 宽(可跟踪频率漂移) | 窄(只移相位,不调频) |
| 抖动累积 | 环路滤波可抑制高频抖动 | 无累积,但输入抖动直接传递到输出 |
| 面积与功耗 | 大(VCO + 大量电容) | 小(延迟链更省面积) |
| 锁定时间 | 长(需频率锁定 + 相位锁定) | 短(仅相位锁定) |
DLL 最大的好处是无相位噪声累积。你想想,VCO 会把自己的相位噪声叠加上去,而 DLL 的延迟链只是把输入信号延迟,不产生新的噪声。但代价就是,它没法补偿频率偏移。一旦发送端和接收端的参考时钟有 200ppm 的偏差,DLL 就抓瞎了——它最多只能移一个周期内的相位,频率差累积起来它根本兜不住。
一个实用场景:如果你用源同步时钟(比如 DDR 内存接口),发送端同时传数据和时钟,双方频率完全一致,只有相位差需要调整——这种情况 DDL 是绝配。我做过一款 16Gbps 的源同步 SerDes,DLL 只用了 5 个门延时,锁定时间小于 1μs,而且功耗才 PLL 方案的三分之一。
什么时候必须用 PLL?
说白了,只要数据不是和时钟一起送过来的(比如以太网、光纤通信),就必须用 PLL。为什么?因为接收端根本没有时钟源,只能从数据里恢复出时钟频率,再对相位进行锁定。PLL 的 VCO 可以“猜测”出频率,然后通过反馈不断修正这个猜测。
另外,抖动容忍度这个东西,PLL 天生占优。DLL 对输入抖动的传递函数几乎是全通,而 PLL 是一个低通特性。高频抖动被环路滤掉,不会影响采样时钟。当然,低频抖动还是得过——那就是 CDR 的带宽设计问题了。
混合架构:两全其美的思路
现在很多高速 CDR 采用 PLL + DLL 混合架构。先用 PLL 做频率锁定(粗调),再用 DLL 做精细的相位对齐(细调)。这样既利用了 PLL 的频率跟踪能力,又利用了 DLL 的快速相位调整和低噪声特性。
设计选型清单(我常用的判断步骤)
- 先看有无参考时钟:有参考时钟且频率固定 → 可以考虑纯 DLL;无参考时钟 → 必须 PLL。
- 再看数据速率和协议:PCIe Gen4/5 要求 ±300ppm 频率容差,只能用 PLL;而 JESD204B 的确定性延迟需求,往往需要 DLL 辅助。
- 然后评估面积预算:芯片面积吃紧时,DLL 比 PLL 省 40% 以上。我记得在 7nm 方案中,一个 28Gbps 的 DLL CDR 核心面积只有 0.012mm²。
- 最后算抖动预算:如果系统总抖动预算 < 0.2UI,我会优先推荐 PLL,因为它的高频噪声抑制更好。DLL 虽然无噪声累积,但输入抖动会直接跑到采样时钟上。
一个小技巧:当你不确定选哪个时,可以先用行为级仿真跑一下极端情况。我习惯在 Verilog-A 里搭一个简单的 PLL 模型和一个 DLL 模型,看看在 1MHz 正弦抖动注入下,哪种架构的 BER 更低。往往仿真十分钟就能帮你省下几个月的改版时间。
嗯,到这里你应该对两种架构有个清晰的判断了。PLL 和 DLL 不是谁替代谁的关系,而是各有所长。做 CDR 设计这么多年,我最大的体会就是:不要为了“省面积”而强行用 DLL,也不要为了“性能好”而无脑上 PLL。结合你的协议需求、面积预算和抖动指标,再做决定。