2. Serdes架构解析:PCS层与PMA层、发送端与接收端结构、时钟数据恢复(CDR)原理

好,咱们进入正题。Serdes这玩意儿,说白了就是一把高速串行数据的“瑞士军刀”。很多刚接触FPGA高速接口的朋友,一看到Serdes的框图就头大。别急,我带你一层层剥开它。

我个人习惯,把Serdes想象成一个“数据快递系统”。PCS层是分拣中心,负责打包拆包;PMA层是高速公路,负责高速运输。今天咱们就把这两层彻底聊透。

2.1 PCS层:数据的“包装工”与“质检员”

PCS层,全称Physical Coding Sublayer,物理编码子层。它干的事儿,就是给原始数据“穿衣服”。

为什么需要编码? 你想想看,如果直接传一串连续的0或1,接收端根本分不清哪里是数据边界。我在项目中遇到过,第一次调Serdes时,没配好编码,出来的数据全是乱的,跟天书一样。

PCS层主要做这几件事:

  • 8B/10B编码:把8位数据变成10位。保证直流平衡,也提供足够的跳变沿给CDR锁相。
  • 加扰/解扰:防止长连0或长连1。有些协议(比如PCIe)喜欢用加扰,我调试时吃过亏,忘了关加扰,结果眼图死活睁不开。
  • 通道绑定:多路Serdes拼成一条更宽的总线。比如4路25G拼成100G。
  • 对齐与逗号检测:找到数据流的“帧头”。

核心要点:PCS层是数字逻辑实现的,跑在参考时钟域。调试时,先确认PCS层能正确编解码,再往下走。

2.2 PMA层:真正的“速度与激情”

PMA层,Physical Media Attachment,物理介质连接层。这里才是真刀真枪干高速的地方。

PMA层包含:

  • 发送端(TX):串行器、预加重、驱动器
  • 接收端(RX):均衡器、CDR、解串器

我经常跟团队说:PMA层是模拟电路的地盘,数字工程师在这里要“敬畏硬件”。

2.2.1 发送端结构:把并行数据“甩”出去

发送端的工作流程:

  1. 串行器:把PCS层送来的并行数据(比如10位或20位)转成1位高速串行流。
  2. 预加重/去加重:补偿传输线的损耗。高频分量衰减大,发送端就提前“加重”高频。
  3. 输出驱动器:提供足够的摆幅驱动PCB走线。

这里有个坑:预加重的强度不是越大越好。我曾经调一块板子,预加重打得太猛,结果远端过冲严重,眼图反而更差。后来一点点降下来才搞定。

调试技巧:发送端的预加重参数,建议从默认值开始,配合眼图测试微调。别一上来就改到最大。

2.2.2 接收端结构:从噪声中“捞”出数据

接收端比发送端复杂得多。信号经过长走线、连接器、过孔,早就“面目全非”了。

接收端主要模块:

  • 均衡器:CTLE(连续时间线性均衡器)+ DFE(判决反馈均衡器)。CTLE放大高频,DFE消除码间干扰。
  • CDR:时钟数据恢复,从数据流中提取时钟。
  • 解串器:把串行数据转回并行。

我记得有一次,板子跑10G速率,接收端眼图完全闭合。我调了CTLE的增益档位,从0调到15,眼图慢慢睁开了。那一刻,真有种“妙手回春”的感觉。

2.3 时钟数据恢复(CDR):Serdes的“心脏”

CDR是Serdes最核心、也最玄学的部分。它要从数据流里“无中生有”地变出时钟来。

CDR的工作原理:

简单说,CDR就是一个锁相环(PLL),但它锁的不是参考时钟,而是数据流中的跳变沿。

  1. 鉴相器:比较数据跳变沿和本地时钟的相位差。
  2. 环路滤波器:滤除高频噪声,控制环路带宽。
  3. 压控振荡器:调整输出时钟的频率和相位。

CDR有两个关键参数:

参数 说明 我的经验
环路带宽 决定CDR跟踪数据抖动的速度 带宽太宽,容易受噪声干扰;太窄,跟不上数据变化。一般设为数据率的1/1000左右。
锁定时间 从开始到稳定锁定需要多久 我遇到过CDR锁了又掉、掉了又锁的情况,最后发现是环路带宽设得太窄了。

注意:CDR对数据流中的“跳变密度”有要求。如果数据长时间不变(长连0或长连1),CDR会失锁。这就是为什么PCS层要做8B/10B编码或加扰——保证足够的跳变沿。

嗯,这里要特别说一下:CDR的锁定状态机。很多FPGA的Serdes IP核会提供CDR锁定指示信号。但别完全信它!我吃过亏,锁定灯亮了,数据还是错的。后来我习惯用PRBS(伪随机码)自测,跑个几小时不出错,才敢说CDR真的锁好了。

2.4 发送端与接收端的“握手”

Serdes通信不是单方面的事。发送端和接收端需要“对齐”才能正常工作。

典型的握手流程:

  • 电气空闲:初始状态,TX不发送数据。
  • 信号检测:RX检测到信号到来,启动CDR。
  • CDR锁定:RX从数据流中恢复时钟。
  • 码流同步:PCS层找到逗号字符,实现字节对齐。
  • 链路训练:交换训练序列,优化均衡参数。

我调试时最怕的就是“链路训练失败”。有一次,两块板子之间用SMA线直连,训练就是过不去。折腾了半天,发现是SMA线太长,信号衰减太大。换了一根短粗的线,立马好了。

总结一下:Serdes架构其实不复杂。PCS层管逻辑,PMA层管模拟,CDR是连接两者的桥梁。调试时,按“PCS→PMA→CDR→链路”的顺序逐级排查,能省下大量时间。

下一章,咱们聊聊Serdes调试中最头疼的问题——信号完整性。我会分享一些实战中总结的“土办法”,保证你听完就能用。