接收端时序架构:CDR工作原理,相位插值器,时钟恢复环路的锁定过程

好,我们开始讲接收端时序架构。我知道有些工程师一听到CDR就头大,觉得这东西太玄乎。其实说白了,CDR就是接收端的“时间翻译官”——它把串行数据里的时钟信息挖出来,用这个时钟去正确采样每一个bit。没有CDR,你的高速链路根本没法工作。

我在一个25Gbps的项目里就吃过亏。当时的CDR锁定时间太长,导致上电后前几百微秒的数据全丢了。后来花了两周调环路带宽才搞定。所以这一章的内容,你看着简单,实际调试时全是坑。

CDR工作原理

CDR的全称是Clock and Data Recovery,它要干三件事:
1. 从数据流中检测出时钟的边沿信息。
2. 产生一个与数据相位对齐的本地时钟。
3. 用这个时钟去采样数据,保证采样点在眼图中心。

最常见的结构是PLL-based CDR。它里面有个相位检测器(PD),比较数据边沿和本地时钟边沿的相位差,然后把误差信号送给环路滤波器,再去调VCO的频率。嗯,用反馈让本地时钟“追”上数据。

还有一种叫bang-bang CDR,用的是一比特相位检测器,只能输出超前或滞后两个状态。我早期做10Gbps设计时就用的这种,它简单,但抖动大。后来在25Gbps上转成了线性CDR,效果好了不少。

CDR类型相位检测精度抖动性能典型应用
线性CDR连续(模拟)低25Gbps+
Bang-bang CDR二进制(超前/滞后)较高≤ 10Gbps
混合CDR多比特量化中等16-28Gbps

你看这个表格,高速场景下线性CDR更吃香。但线性CDR的相位检测器需要精确的模拟电路,设计难度也高。这里有个经验:如果你们项目是第一次做高速SerDes,先别急着上混合CDR,一步一步来。

核心要点:CDR的反馈环路决定了它能跟踪的最大频率偏移和抖动。带宽越宽,锁定越快,但滤除高频抖动能力越差。带宽越窄,输出时钟越干净,但跟不上数据速率的变化。

相位插值器

相位插值器(Phase Interpolator, PI)是CDR里执行“微调”的单元。VCO产生多相时钟(比如0°、90°、180°、270°),PI根据环路控制码(比如6bit或8bit),在相邻两相之间插出一个精确的中间相位。

举个例子,你想得到45°的时钟,就把0°和90°按50%:50%权重混合。混合时用电流舵结构,每个相位支路的电流大小决定了权重。

我记得第一次调PI的时候,发现输出相位有非线性。查了半天,原来是电流源匹配不好。后来换成了温度计码控制的电流舵,线性度从0.5 LSB改善到了0.1 LSB。你想想看,这点非线性在锁定时会直接转化为确定性抖动(DJ),最后影响误码率。

目前主流PI的分辨率在5~8bit之间。8bit对应360°/256 ≈ 1.4°步进,基本够用。但遇到高频抖动时,步进太大会造成相位量化噪声。所以我一般建议用6bit以上,配合环路滤波器一起优化。

避坑指南:我曾经因为PI工作频率不够,导致在28Gbps时相位步进失真。后来发现是PI的输入缓冲带宽不足。设计时一定要留出至少20%的余量。

时钟恢复环路的锁定过程

锁定过程分三个阶段:

  1. 频率捕获:CDR先把自己的VCO频率拉到接近数据速率。这通常靠外部参考时钟或频率检测器完成。频率误差必须小于环路能纠正的范围,一般要求±1000ppm以内。
  2. 相位追逐:频率锁定后,相位检测器开始工作。PI一步一挪地调整本地时钟相位,直到数据边沿与采样时钟边沿对齐。这个阶段环路是非线性的,因为相位误差可能很大。
  3. 相位锁定:相位误差进入环路线性范围(比如< 0.1UI),环路进入稳态。此时只要数据速率不变化,PI基本稳定。但实际数据有码型效应和抖动,所以PI还是会不断微调。

整个过程快慢取决于环路带宽和初始频率差。我见过一个设计,锁定时间花了5μs,这对PCIe Gen4来说太慢了(要求<1μs)。后来我们把环路带宽提高了一倍,同时增加了频率检测器的精度,1.5μs就锁住了。

注意:锁定过程中,如果数据流长时间没有跳变(比如连续10个0),相位检测器会失去误差信息,导致PI漂移。这就是为什么SerDes要求数据经过编码(如8b/10b或64b/66b)保证足够多的跳变。没有跳变,CDR就会“失锁”。

锁定过程的SVG流程图

CDR锁定过程状态图 初始未锁定 频率捕获中 相位追逐中 相位锁定 失锁检测 失锁→重锁 关键注意事项 • 频率捕获阶段需 < 1000ppm • 相位追逐期间PI步进≤1.4°

这张图把CDR从初始到锁定的完整状态流转画出来了。注意从“相位追逐中”到“相位锁定”之间,环路必须满足锁定判断条件,比如连续N个UI内相位误差小于门限。我通常设N=64,太小容易误锁,太大锁定时间过长。

实际调试中的关键参数

好的,下面我把几个最关键的参数列出来,你在测试锁定裕量时一定要关注:

  • 锁定时间:从初始上电到宣告锁定的时间。不同协议有要求(PCIe Gen5要求<1μs,Ethernet 400G要求<5μs)。
  • 锁定抖动容忍:在锁定状态下,CDR能承受的最大输入抖动。这个跟环路带宽直接相关。
  • 频率跟踪范围:CDR能锁定的数据速率变化范围。通常≥±200ppm,但取决于参考时钟精度。
  • 锁定后的相位误差:稳态相位偏差,一般< 0.05 UI。如果大于0.1 UI,眼图会明显闭合。

个人经验:我习惯在测试板上用PRBS31码型测锁定时间。因为PRBS31有长游程(31个连0),能暴露CDR在低跳变密度下的性能。如果锁定时间比PRBS7下长很多,说明环路的频率检测器或PI控制算法有问题。