高速收发器基础: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的工作原理:

  1. 接收到的数据流经过鉴相器,检测数据跳变沿
  2. 鉴相器输出误差信号给环路滤波器
  3. 环路滤波器控制VCO(压控振荡器)调整频率和相位
  4. VCO输出恢复时钟,采样数据

嗯,这里要注意。CDR本质上是一个锁相环(PLL),但它锁的是数据,不是参考时钟。我见过不少新手把CDR和普通PLL搞混,结果调试时走了弯路。

实战技巧:调试CDR时,先检查参考时钟是否稳定。我曾经遇到一个案例,CDR频繁失锁,最后发现是参考时钟的抖动超标。换了个低抖动的晶振,问题就解决了。

CDR的三种常见架构

不同的应用场景,CDR架构也不同:

  • 基于PLL的CDR:最经典的结构,适合连续数据流,比如光纤通信
  • 基于相位插值的CDR:用数字方式调整采样相位,适合突发模式,比如USB
  • 基于过采样的CDR:用多倍时钟采样,然后选最优相位,实现简单但功耗大

我做10G光口项目时用的是基于PLL的CDR,因为数据是连续的,而且对抖动要求高。后来做SATA接口时换成了相位插值型,因为SATA有电源管理,会进入省电模式,PLL型CDR在这种场景下表现不好。

CDR的锁定过程

CDR锁定分两步:

  1. 频率锁定:先让VCO频率接近数据速率,这个靠参考时钟引导
  2. 相位锁定:然后精细调整相位,让采样点对准数据眼图中心

为什么要有参考时钟?因为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内部结构 鉴相器 → 环路滤波器 → VCO → 恢复时钟 → 数据采样 图例: FPGA接口 PCS层 PMA层 物理接口 CDR

这张图展示了高速收发器的完整数据流。发送时,FPGA并行数据经过PCS编码、PMA串化,最后变成差分信号输出。接收时反过来,差分信号经过PMA解串和CDR恢复时钟,再经过PCS解码,还原成并行数据给FPGA。

CDR是接收路径的核心,它从数据里提取时钟,保证采样点对准眼图中心。我调试时习惯先确认CDR是否锁定,再看误码率。如果CDR没锁住,后面全是白费功夫。

好了,高速收发器的基础就讲到这里。这些概念虽然看起来多,但核心就是串并转换、编码解码、时钟恢复这三件事。搞清楚了这些,后面学GTX、GTH这些具体收发器就轻松多了。

个人建议:初学者可以先拿Xilinx的IBERT例程跑一遍,看看眼图、调调均衡参数。实践出真知,光看书是学不会高速设计的。

可可精品资料库