CDR 基础概念:时钟与数据恢复简介

做高速串行通信的人都知道,没有 CDR,基本上就玩不转。什么是 CDR?说白了就是「时钟与数据恢复」(Clock and Data Recovery)。它的任务很简单——从一路没有任何独立时钟伴随的数据流里,把时钟信息抠出来,再拿这个时钟去正确采样数据。

我记得刚入行那年,调一个 10Gbps 的串行链路,示波器上眼图明明张得挺大,但误码率就是死活下不去。后来才发现,接收端的采样时钟和发送端差了几个 ppm,跑了几个小时就累积出比特滑码。那次之后我才真正明白:CDR 不是锦上添花,而是生存必备。

为什么需要 CDR?

传统并行总线有专门的时钟线,接收端直接用这个时钟采样就行了。但到了高速串行时代,比如 PCIe、SATA、以太网,时钟线和数据线分开走会引入严重的 skew 问题。所以大家干脆不传时钟了——把时钟信息嵌入数据边沿里,接收端自己想办法恢复。

你想想看,如果没有 CDR,接收端就只能用本地晶振瞎猜什么时候采样。但数据速率可能会有 ±100ppm 的频率偏移,再加上码间串扰和随机抖动,猜一个错一个。CDR 的核心价值就在于:它用反馈环路把本地时钟的频率和相位死死地锁在输入数据上。

小提示:很多人以为 CDR 只是「恢复时钟」,其实它的最终目的是让数据采样点的相位误差最小化。时钟只是一个工具,数据才是主角。

基本概念:时钟恢复 vs. 数据恢复

这两个词经常被混用,但侧重点不同:

  • 时钟恢复(Clock Recovery):从数据跳变沿提取出参考时钟,并锁定其频率和相位。
  • 数据恢复(Data Recovery):利用恢复出来的时钟,对输入数据进行判决和重定时(Retiming),输出干净的并行数据。

实际 CDR 芯片里这两部分是耦合成一个环路的。我曾经见过一个方案,硬是把它们拆成两个独立 PLL,结果因为环路增益不匹配,锁定了但采样点总是在眼图边缘——那种坑,踩一次就够了。

CDR 面临的核心挑战

挑战 来源 影响
频率偏移 发送端与接收端参考时钟的 ppm 差异 长期累积导致比特滑码或失锁
抖动 电路噪声、串扰、电源扰动 采样相位误差增大,误码率上升
数据无跳变 长连续相同位(CID) 相位检测器无法获取边沿信息,环路漂移
带宽与锁定速度的矛盾 环路滤波器设计取舍 带宽窄则抖动小但锁定慢;带宽宽则锁定快但易受抖动干扰
注意避坑:很多新手在设计 CDR 环路带宽时只盯着锁定时间,结果把带宽设得很大。实际流片后一测,输入稍微有点抖动,环路边沿就被噪声牵着跑,比特误码率直接飙到 10⁻⁴。我曾因为这个问题回炉改过一次版,教训深刻。

典型 CDR 架构:一图看懂

下面这张图展示了我个人最喜欢用的「相位跟踪型」CDR 抽象框架,几乎所有 PLL 型和相位插值型 CDR 都能映射到这个图上。

CDR 典型架构框图 输入数据 相位检测器 环路滤波器 VCO 重定时器 恢复数据 反馈环路由 PD → LF → VCO → PD 构成,实现相位跟踪 重定时器利用 VCO 输出的恢复时钟对输入数据再采样

CDR 的三种主流实现方式

  1. PLL 型 CDR:利用锁相环中的鉴相器直接比较数据边沿与 VCO 相位。优点是抖动抑制好,缺点是对长串相同位敏感。
  2. 相位插值型 CDR:先用一个 PLL 产生多相时钟,再通过数字控制的相位插值器调整采样相位。灵活性高,适合多速率场合。
  3. 过采样型 CDR:用高频时钟对数据流过采样(通常是 3x~8x),然后从采样结果中找出最佳判决点。结构简单,但功耗和面积较大。

我个人倾向在 28Gbps 以下用相位插值型,因为数字校准好做,环路带宽可编程;到了 56Gbps 以上,PLL 型的抖动表现更稳,但设计门槛高不少。

核心要点:不管哪种架构,CDR 的底层都是一个反馈控制系统。理解它的传递函数、相位裕度和带宽概念,才是设计好 CDR 的关键——这也是我们接下来几章的重点。

从数据边沿到时钟:鉴相器原理速览

鉴相器(Phase Detector)是 CDR 环路的眼睛。常见的有:

  • Hogge 型鉴相器:输出与相位误差成正比的脉冲宽度,适合模拟环路。
  • Bang-bang 鉴相器:只给出「超前/滞后」二值信号,结构简单,但容易引入极限环。
  • Alexander 型鉴相器:用三个采样点(一个数据点+两个边沿点)做判决,是数字 CDR 的主流。

我曾经在一个 5Gbps 的 SerDes 项目中选了 bang-bang 鉴相器,以为能省面积。结果环路带宽设计不当,锁定后时钟抖动的峰峰值比眼图高度还大——最后被迫换成 Alexander 型,重新流片。教训就是:不要为了省逻辑而牺牲环路噪声性能。

本章小结