高速收发器基础:SerDes原理、PMA与PCS层、时钟与数据恢复(CDR)机制
做FPGA设计的朋友,迟早都会碰到高速收发器。我第一次接触这东西是在一个10G光口项目上,当时看着那些SerDes、PMA、PCS术语,说实话有点懵。后来踩了不少坑,才慢慢摸清楚门道。今天我就把这些基础内容掰开揉碎了讲给你听。
SerDes到底是个啥?
SerDes,全称Serializer/Deserializer,说白了就是串化器和解串器。为什么需要它?你想想看,FPGA内部总线动不动就32位、64位宽,但板级走线就那么几根。要是每个bit都单独走一根线,那PCB上全是密密麻麻的走线,根本没法搞。
SerDes干的事情很简单:
- 发送端:把并行数据转成串行数据,通过一对差分线发出去
- 接收端:把串行数据转回并行数据,交给内部逻辑处理
我习惯把SerDes比作「快递分拣」。并行数据就像一堆包裹同时到站,串化器把它们排成一列逐个发出。接收端再按顺序重新装车。这个比喻虽然糙,但道理是一样的。
核心要点:SerDes的本质就是「并行→串行→并行」的转换,目的是减少IO数量、提高传输速率。
PMA层:物理介质适配
PMA(Physical Media Attachment)是SerDes的物理层,负责处理最底层的模拟信号。我刚开始做项目时,总觉得PMA就是个黑盒子,后来发现理解它很重要。
PMA主要干这几件事:
- 串化/解串:这是基本功,前面讲过了
- 时钟生成:用PLL产生高速时钟,我见过不少因为PLL配置不对导致链路不通的案例
- 预加重/均衡:补偿信号在传输过程中的衰减,这个后面细说
- 差分驱动/接收:处理CML、LVPECL等电平标准
这里有个坑我要提醒你。PMA的供电非常敏感,我曾经在一个项目里因为电源纹波太大,导致误码率居高不下。排查了整整两天才发现是电源问题。所以做高速设计时,PMA的电源一定要单独处理,别跟数字逻辑混在一起。
PCS层:物理编码子层
PCS(Physical Coding Sublayer)在PMA之上,负责数据的编码和解码。为什么需要编码?因为单纯的串行数据流里,接收端需要知道「哪里是数据的边界」。
常见的编码方式:
| 编码方式 | 效率 | 特点 |
|---|---|---|
| 8B/10B | 80% | 保证DC平衡,有足够的跳变沿 |
| 64B/66B | 97% | 效率高,但实现复杂 |
| 128B/130B | 98.5% | PCIe Gen3/4使用 |
我个人习惯用8B/10B编码做原型验证,因为它实现简单,调试方便。但量产项目如果对带宽有要求,我会换成64B/66B。
PCS还负责:
- 对齐标记插入/检测:多通道场景下对齐数据
- 扰码/解扰:避免长串的0或1导致CDR失锁
- 通道绑定:把多个SerDes通道绑定成一个逻辑通道
CDR机制:时钟与数据恢复
CDR(Clock and Data Recovery)是高速收发器最核心的技术之一。为什么需要CDR?因为高速串行信号里没有独立的时钟线,时钟信息是嵌在数据流里的。接收端必须从数据里「提取」出时钟。
CDR的工作原理:
- 接收到的数据流经过鉴相器,检测数据跳变沿
- 鉴相器输出误差信号给环路滤波器
- 环路滤波器控制VCO(压控振荡器)调整频率和相位
- VCO输出恢复时钟,采样数据
嗯,这里要注意。CDR本质上是一个锁相环(PLL),但它锁的是数据,不是参考时钟。我见过不少新手把CDR和普通PLL搞混,结果调试时走了弯路。
实战技巧:调试CDR时,先检查参考时钟是否稳定。我曾经遇到一个案例,CDR频繁失锁,最后发现是参考时钟的抖动超标。换了个低抖动的晶振,问题就解决了。
CDR的三种常见架构
不同的应用场景,CDR架构也不同:
- 基于PLL的CDR:最经典的结构,适合连续数据流,比如光纤通信
- 基于相位插值的CDR:用数字方式调整采样相位,适合突发模式,比如USB
- 基于过采样的CDR:用多倍时钟采样,然后选最优相位,实现简单但功耗大
我做10G光口项目时用的是基于PLL的CDR,因为数据是连续的,而且对抖动要求高。后来做SATA接口时换成了相位插值型,因为SATA有电源管理,会进入省电模式,PLL型CDR在这种场景下表现不好。
CDR的锁定过程
CDR锁定分两步:
- 频率锁定:先让VCO频率接近数据速率,这个靠参考时钟引导
- 相位锁定:然后精细调整相位,让采样点对准数据眼图中心
为什么要有参考时钟?因为CDR的捕获范围有限,一般只有几百ppm。没有参考时钟引导,CDR可能锁到错误的频率上。我记得有一次调试,参考时钟频率设错了,CDR锁了半天都锁不住,后来一查才发现是时钟树配置出了问题。
重要提醒:CDR锁定需要数据流中有足够的跳变沿。如果数据全是0或全是1,CDR会失锁。这就是为什么需要8B/10B编码或扰码的原因——保证数据有足够的跳变。
眼图与误码率
评估CDR性能,最直观的就是看眼图。眼图是用示波器把多个bit的波形叠加在一起显示的图形。眼图张开越大,说明信号质量越好,CDR越容易正确采样。
影响眼图的因素:
- ISI(码间干扰):信号经过传输线后,前后bit互相干扰
- 抖动:时钟和数据边沿的不确定性
- 噪声:电源噪声、串扰等
我习惯在调试时先看眼图,如果眼图闭合严重,那CDR再牛也白搭。这时候需要调整预加重或均衡参数。Xilinx的IBERT工具就很好用,可以实时看眼图和误码率。
预加重与均衡
信号在PCB上传输,高频分量衰减比低频严重。这就导致bit序列中的孤立跳变(比如010)幅度变小,而连续相同bit(比如000)幅度不变。结果就是眼图闭合。
解决办法:
- 发送端预加重:在发送时增强高频分量,让跳变沿更陡
- 接收端均衡:在接收时补偿高频衰减,恢复信号形状
常见的均衡技术:
- CTLE(连续时间线性均衡):模拟滤波器,提升高频增益
- DFE(判决反馈均衡):数字方式,消除后标干扰
我做过一个项目,板子走线有15cm长,信号衰减很严重。一开始CTLE参数没调好,误码率10的负6次方。后来花了一下午调CTLE的增益和零点频率,误码率降到了10的负12次方以下。所以说,均衡参数一定要仔细调,别偷懒。
SVG框架图:高速收发器核心结构
这张图展示了高速收发器的完整数据流。发送时,FPGA并行数据经过PCS编码、PMA串化,最后变成差分信号输出。接收时反过来,差分信号经过PMA解串和CDR恢复时钟,再经过PCS解码,还原成并行数据给FPGA。
CDR是接收路径的核心,它从数据里提取时钟,保证采样点对准眼图中心。我调试时习惯先确认CDR是否锁定,再看误码率。如果CDR没锁住,后面全是白费功夫。
好了,高速收发器的基础就讲到这里。这些概念虽然看起来多,但核心就是串并转换、编码解码、时钟恢复这三件事。搞清楚了这些,后面学GTX、GTH这些具体收发器就轻松多了。
个人建议:初学者可以先拿Xilinx的IBERT例程跑一遍,看看眼图、调调均衡参数。实践出真知,光看书是学不会高速设计的。
可可精品资料库