PCIe CDR(Clock Data Recovery-时钟数据恢复)解析
一、CDR核心定位
PCIe属于无随路时钟的高速串行SerDes总线:链路里只有差分数据线,没有单独走线传输发送端时钟;收发双方仅各自本地持有100MHz REFCLK参考晶振,CDR就是接收端的专用硬件电路,直接从收到的串行数据跳变边沿里,实时提取、锁定发送端的时钟相位与频率,实现收发精准同步,是PCIe物理层最核心的模块之一。
对比HDMI ACR:HDMI有独立TMDS时钟线+N/CTS参数算时钟;CDR完全不靠专线时钟、不靠明文参数,纯从数据码流本身恢复时钟。
二、PCIe CDR的前置基础:本地REFCLK的作用
很多人会误解“CDR不需要时钟”,纠正关键点:
- 收发两端各自板上有100MHz差分REFCLK(HCSL电平),这个时钟只在本地芯片内部使用,不会通过PCIe线缆/走线传给对端;
- 发送端:用REFCLK输入PLL倍频出高速串行速率(Gen3:100MHz×80=8GT/s),生成串行数据流;
- 接收端:本地REFCLK给CDR电路提供工作基准频率,CDR在此基准上微调相位/频率,跟踪发送端真实时钟,不是凭空产生时钟。
三、CDR内部核心组成(硬件电路模块)
典型PCIe SerDes CDR由5部分闭环构成:
1. 边沿检测模块
持续采样 incoming 差分串行数据,捕捉数据0/1跳变的边沿时刻,提取相位误差信息;
2. 相位检测器(PD)
对比「本地振荡时钟相位」和「数据边沿相位」,输出差值电压:
- 本地时钟超前数据边沿 → 输出负误差;
- 本地时钟滞后数据边沿 → 输出正误差;
3. 环路滤波器(LF,低通滤波)
滤除信号里的高频噪声、随机抖动,输出平滑的控制电压给下一级,避免环路频繁误调整;
4. 压控振荡器(VCO)
根据滤波后的电压微调自身输出时钟的相位和频率,输出和发送端时钟实时对齐的恢复时钟;
5. 相位插值器/分频器
把VCO高频时钟分频到数据采样频率,输出给接收端采样器,用最优相位去抓取每一位数据(眼图中心采样,误码率最低)。
整体是闭环负反馈系统:不断对比相位→修正本地时钟→对齐发送端时钟,持续动态锁定。
四、CDR工作的前提条件:编码约束(PCIe 8b/10b、128b/130b)
CDR不能识别长时间无跳变的直流电平,所以PCIe编码专门做了约束:
- Gen1/Gen2用8b/10b编码:每10bit码流强制保证足够多0/1跳变,不会出现连续很多位0或1,给CDR提供充足边沿用于锁定;
- Gen3及以上用128b/130b编码:同样做跳变密度约束;
若码流长时间无跳变,CDR丢失边沿参考,环路失锁,链路直接报错恢复训练。
五、三种PCIe时钟架构下CDR的不同工作模式
1. CC公共时钟架构(独显最常用)
RC主机、EP显卡共用同源100MHz REFCLK,两端基准频率几乎一致;
CDR只做微小相位跟踪补偿,几乎不用大范围调整频率,环路压力最小、稳定性最好,这也是标准PC独显只兼容CC模式的核心原因。
2. SRNS独立参考无扩频
两端各自独立晶振,总频差最大600ppm;
CDR既要跟踪相位,还要持续小幅微调频率抵消晶振频差,同时依靠发送端插入/删除SKP有序集缓冲微小速率差,辅助CDR稳定锁定。
3. SRIS独立参考独立扩频(Gen4+)
两端REFCLK各自开SSC扩频(±0.5%速率波动),频差波动范围极大;
要求CDR环路带宽适配扩频速率,快速动态跟踪频率波动,仅高端嵌入式/线缆场景使用,消费级显卡不兼容。
六、CDR的两大核心能力(解决实际传输痛点)
1. 补偿传输链路抖动
PCIe走线、接插件、AC耦合电容都会引入随机抖动、周期性抖动,CDR实时跟随数据边沿偏移,始终在眼图最中心采样,大幅降低误码率;
2. 抵消收发两端晶振频差
即使两端REFCLK有ppm级频率偏差,CDR通过VCO频率微调长期跟踪对齐;频差超出CDR跟踪范围时,链路进入Recovery恢复状态重训练协商速率。
七、CDR
-
时钟来源
CDR:时钟信息100%嵌入串行数据边沿,无跨链路时钟专线; -
同步机制
CDR:硬件闭环实时动态相位跟踪,持续自适应调整;
; -
服务范围
CDR:PCIe全链路所有数据、配置、控制信号的收发同步基础; -
频差补偿方式
CDR靠环路微调VCO频率+SKP有序集辅助; -
抗抖动特性
CDR天生适配高速链路复杂抖动环境; -
CDR环路带宽是关键参数:带宽太高易被噪声干扰失锁,带宽太低跟踪不上扩频/大抖动,PCIe各代协议严格规定了CDR环路带宽范围;
-
接收端成功恢复的时钟,不仅用于采样数据,也用于本地解码、解扰、协议层时序对齐,是整个PCIe接收通路的时序基准。
CDR如何使用恢复时钟获取串行数据
先纠正一个常见字面误解:
PCIe CDR 并没有从数据流里解析出一个独立的、物理的时钟信号导线。
“恢复时钟(recovered clock)”本质:接收端本地产生、经过CDR环路动态调准相位的采样时钟,直接供给采样触发器去抓取串行数据比特。
整体硬件链路(PI‑CDR,Gen3+)
串行差分数据 Dp/Dn
↓
CTLE模拟均衡,补偿信道损耗
↓
┌─────────────────────────────────────┐
│ DFF(Main) ←─【恢复时钟‑Main相位】◄──┐ ← PI相位插值器输出,这就是recovered clock
│ DFF(Early) ←─【恢复时钟‑Early相位】◄──┤
│ DFF(Late) ←─【恢复时钟‑Late相位】◄──┘
└───────┬─────────────┬───────────────┘
│ │
Main输出比特 Early/Late输出只给鉴相PD
│
解串器 Deserializer(串转并)
│
弹性Buffer → 128b/130b译码
三组时钟来自同一个PI,只是相位互相偏移;只有Main的DFF输出真正业务数据;Early/Late只做相位误差检测,不输出有效数据。
步骤拆解:恢复时钟采集数据完整过程
1. 本地生成原始高频时钟
RX的PLL/VCO,基于板载100MHz参考晶振倍频,生成接近符号速率的多相时钟。
这个原始VCO时钟相位是自由运行的,还没有对齐发送端数据流,不能直接采样数据。
2. CDR环路不断校准采样时钟相位(得到“恢复时钟”)
- Early/Main/Late三个DFF,用当前PI输出时钟同时采样输入串行流;
- PD鉴相器对比三组采样结果,得到相位误差:
Early / On‑Time / Late; - 环路滤波器(P+I)计算PI控制字;
- 相位插值器PI整体旋转整套采样时钟的相位,把Main采样时刻挪向眼图中心(比特UI中间,远离跳变边沿)。
经过环路闭环校准之后,这一套PI输出时钟,就叫做恢复时钟 recovered clock。
⚠️VCO本身振荡相位不变;只是PI改变送给采样DFF的时钟相位。
3. 使用恢复时钟捕获数据比特
D触发器(DFF)规则:时钟上升沿(或下降沿)时刻,锁存D输入端的电平,输出Q。
- 串行数据D端一直在0/1翻转;跳变边沿是不稳定区域,不能采样;
- 眼图中间一段窗口,电平稳定,是安全采样点;
- CDR的目标:让恢复时钟Main沿,精确落在UI的眼图中心;
- Main‑DFF在恢复时钟边沿瞬间,锁存此刻数据线上的电平:得到比特 0 或者 1。
这就是“用恢复时钟获取数据”的物理行为:
不是拿一个提取出来的外部时钟,而是用调好了相位的本地时钟,在正确瞬间对串行数据做锁存采样。
4. 频偏下持续正确采样(SRIS场景重点)
收发晶振存在ppm级频偏:本地VCO和发送端符号速率不完全相等。
物理现象:
输入数据流相对本地VCO时钟会缓慢滑动,Main采样点会慢慢向比特边沿漂移。
- I(积分)通路持续缓慢调整PI相位,抵消这个缓慢滑动;
- 一旦采样窗口靠近边沿,P通路介入快速拉回眼中心;
- 恢复时钟的采样相位动态跟随数据流滑动,保证Main始终踩在眼中间,持续采到正确比特。
形象比喻:
数据流是传送带(发送端速率);本地VCO是电机(接收端固有速率,转速略有差异);
CDR不改变电机转速,但是不停微调采样拍照时刻,让“拍照(Main时钟沿)”始终拍传送带物品的中间,而不是接缝(跳变沿)。
5. 采样之后:时钟域分离,弹性缓冲介入
Main‑DFF输出的比特,属于恢复时钟域(相位跟随输入数据流,平均速率受发送端影响)。
而芯片内部数字逻辑跑在本地参考时钟域(固定来自板载晶振)。
因为SRIS频偏,两个时钟域存在微小速率差,比特会慢慢多出来/缺失。
- CDR只保证每一个比特采样值正确;
- 弹性缓冲Elastic Buffer + SKP有序集:做插入/删除SKP字符,消化速率差,完成跨时钟域,把数据交给上层链路层。
两个极易混淆的误区
误区1:CDR从数据里“提取出一个时钟信号”,再用这个时钟采样
❌错误。
✅真相:没有提取出物理时钟线。全部时钟源头都是RX本地VCO/PLL;CDR只修正采样时钟的相位,寻找最佳采样时刻。“恢复时钟”是逻辑概念,指经过相位闭环校准后的本地采样时钟。
误区2:Bit‑Lock锁定,代表本地VCO频率等于发送端波特率
❌错误,尤其SRIS模式。
✅真相:VCO可以和发送端存在几千ppm频偏;依靠PI持续旋转相位补偿相位累积,Main采样点相对数据保持位置正确,VCO本身频率不需要对齐。
对比2‑sample 和3‑sample对获取数据的影响
- 2‑sample BB‑PD:Main依然负责采样数据;但存在极限环振荡,Main恢复时钟相位来回小幅抖动,眼裕量被消耗;
- 3‑sample BB‑PD:增加Early/Late采样点仅用于鉴相;Main采样数据通路完全不变;只是鉴相器可以输出On‑Time,抑制恢复时钟本身的相位抖动,采样更稳定。
极简时序例子(1UI)
UI边界(跳变沿) UI边界(跳变沿)
↓ ↓
| 眼图中间 |
| Early Main Late |
─────●───────●────────●─────────────
↑
恢复时钟Main边沿在这里触发DFF锁存,读取正确比特
PCIe Scrambling 扰码(加扰/解扰)
PCIe Gen3/Gen4/Gen5/Gen6 强制开启扰码;Gen1/Gen2可选关闭。
注意:PCIe物理层是 128b/130b编码 + 自同步扰码(Self‑synchronous Scrambler),是EMI、DC平衡、保证足够跳变沿给CDR**。
-## 为什么一定要扰码(Scrambling)
如果没有扰码:业务数据很容易出现长连0、长连1(连续很多bit不变)
- 缺少跳变沿 → CDR鉴相器PD拿不到相位误差信息,CDR容易失锁;
- 出现大量连续相同电平,直流不平衡(DC wander),交流耦合AC‑couple通道电容会充放电,基线漂移,眼图变差;
- 重复周期性数据会产生尖锐EMI辐射尖峰,干扰系统。
扰码把原始数据做伪随机打散:
- 打破长0长1,保证频繁电平跳变,喂给CDR足够边沿;
- 改善DC平衡;
- 把频谱摊平,压低EMI尖峰;


5394

被折叠的 条评论
为什么被折叠?



