第四章:SerDes核心架构——PMA与PCS层划分、8B/10B编码原理、时钟数据恢复(CDR)概念
各位同学,今天我们来啃一块硬骨头——SerDes的核心架构。说实话,我刚入行那会儿,看到PMA、PCS这些缩写就头大。后来在项目中调了整整两周的CDR,才真正理解这些模块是干什么的。
咱们今天不讲虚的,直接拆解SerDes的三大核心:PMA与PCS的分工、8B/10B编码、以及CDR时钟数据恢复。搞懂这些,你基本就掌握了SerDes的命脉。
4.1 PMA与PCS:SerDes的左右手
SerDes架构分两层:PMA(物理介质适配层)和PCS(物理编码子层)。说白了,PMA负责硬件的脏活累活,PCS负责逻辑的精细活。
PMA层——这是SerDes的"肌肉"。
- 负责并串转换(Serializer/Deserializer)
- 处理时钟数据恢复(CDR)
- 驱动差分信号(如CML、PAM4)
- 做预加重/去加重,补偿信道损耗
PCS层——这是SerDes的"大脑"。
- 做8B/10B编码解码
- 通道绑定(Channel Bonding)
- 弹性缓冲(Elastic Buffer)处理时钟域交叉
- 加扰/去扰,降低EMI
重要分界线:PMA是模拟+高速数字混合电路,PCS是纯数字逻辑。我见过不少团队把PCS的bug当成PMA的问题来调,结果浪费了两周时间。记住:眼图不好找PMA,数据错位找PCS。
4.2 8B/10B编码原理——为什么非要多花25%的带宽?
8B/10B编码,就是把8位数据变成10位传输。你可能会问:这不是浪费带宽吗?没错,确实多花了25%的带宽。但为什么所有高速接口都在用?
原因很简单:DC平衡。串行传输不能有太多连续的0或1,否则接收端没法恢复时钟。8B/10B编码保证0和1的数量差不超过2,这叫"游程长度控制"。
我给大家拆解一下编码逻辑:
// 8B/10B 编码核心思想(简化版)
// 8位数据拆成 5位 + 3位
// 5位 -> 6位编码(3b/4b 表)
// 3位 -> 4位编码(5b/6b 表)
// 组合成 10位码字
// 示例:数据 0x55 (01010101)
// 高5位: 01010 -> 6位码: 101010
// 低3位: 101 -> 4位码: 1011
// 最终10位: 1010101011
// 关键:编码器会跟踪"游程偏差"(Running Disparity, RD)
// 如果当前RD为正,选择负极性码字;反之亦然
// 保证长期DC平衡
我在一个PCIe Gen3项目中遇到过一个问题:8B/10B编码后的码字出现了连续的"K码"(控制字符),结果接收端的弹性缓冲溢出了。查了两天才发现是发送端没处理好K码的插入间隔。嗯,这个坑我帮你们踩过了。
个人经验:8B/10B编码的"游程偏差"计算一定要用状态机实现,别用组合逻辑。我曾经图省事用组合逻辑算RD,结果在温度变化时出现了误码。后来改成时序状态机,问题就解决了。
8B/10B编码还有几个重要特性:
- 游程长度不超过5:连续相同bit最多5个,保证CDR能锁定
- DC平衡:0和1的数量差不超过2,适合交流耦合
- 控制字符:12个K码用于帧对齐、空闲序列等
- 误码检测:无效码字可以直接判定为误码
4.3 时钟数据恢复(CDR)——SerDes的心脏起搏器
CDR是SerDes接收端最关键的模块。它的任务是从数据流中提取时钟,并用这个时钟去采样数据。你想想看,发送端没有单独传时钟过来,接收端怎么知道什么时候该采样?这就是CDR的活。
CDR的三种主流架构:
| 架构类型 | 原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| PLL型 | 用锁相环跟踪数据边沿 | 抖动小,精度高 | 锁定时间长 | PCIe、SATA |
| DLL型 | 用延迟锁定环调整采样相位 | 锁定快,面积小 | 对PVT敏感 | USB、DDR |
| 过采样型 | 用多相时钟过采样,选最佳相位 | 锁定极快,无频率牵引 | 功耗大,面积大 | 早期SerDes |
我个人最常用的是PLL型CDR。为什么?因为它的抖动容忍度最好。在25Gbps以上的速率,过采样型的功耗实在扛不住。
注意:CDR的锁定时间是个关键指标。我曾经在一个项目中,CDR锁定时间需要50us,但协议要求链路训练必须在20us内完成。结果每次上电都训练失败。后来通过调整环路带宽,把锁定时间压到了15us才解决问题。
CDR的工作流程大致如下:
- 频率检测:先粗调VCO频率到数据速率附近
- 相位跟踪:用鉴相器检测数据边沿与采样时钟的相位差
- 环路滤波:滤除高频抖动,生成控制电压
- VCO调整:根据控制电压微调时钟相位
- 数据重定时:用恢复的时钟重新采样数据
这里有个关键点:CDR需要数据有足够的跳变沿。如果数据全是0或全是1,CDR就"失锁"了。这就是为什么8B/10B编码要保证游程长度不超过5——说白了,就是给CDR"喂"足够的跳变沿。
核心总结:
- PMA是物理层,负责模拟信号处理;PCS是逻辑层,负责编码协议
- 8B/10B编码用25%的带宽换DC平衡和时钟恢复
- CDR是接收端的核心,从数据中提取时钟并采样
- 三者配合:PCS编码保证数据特性 → PMA串化发送 → 接收端PMA做CDR恢复 → PCS解码还原数据
好了,这一章的内容就到这儿。下一章我们会深入PMA的模拟电路设计,讲讲差分信号、预加重和均衡器。到时候我会分享一个我在28Gbps项目中调均衡器的血泪史。