摘要很多 FPGA 初学者第一次接触 SERDES都会把它理解成“并串转换器”或者“串并转换器”。这个理解不能算错但太窄了。在真实 FPGA 项目里SERDES 更应该被理解成一条完整的高速收发链路。它不只是把并行数据变成串行数据也负责高速信号收发、时钟恢复、均衡、编码解码、字节对齐、通道绑定、调试和动态配置等一整套工作。如果只把 SERDES 当普通 IO 使用很容易出现一种典型现象仿真看起来没问题IP 配置也没报错但板子上链路就是起不来或者眼图不够好、CDR 不锁定、协议层一直报错、lane 对齐失败。这篇文章从 FPGA 工程视角出发梳理 SERDES 到底是什么、解决什么问题、内部链路怎么走以及 PMA 和 PCS 这两个最容易混淆的核心概念。一、SERDES 到底是什么SERDES 是 Serializer / Deserializer 的缩写字面意思是“串行器 / 解串器”。从名字看它好像只做两件事TX 方向把并行数据变成串行数据RX 方向把串行数据恢复成并行数据。但在 FPGA 高速接口里SERDES 远不止这点功能。更准确地说SERDES 是 FPGA 内部用于高速串行通信的 transceiver也就是高速收发器。它通常包含PMAPCS参考时钟PLLCDR均衡器串化器 / 解串器编码 / 解码字对齐 / lane 对齐缓冲和速率匹配复位控制动态重配置接口调试接口与 FPGA fabric 的并行数据接口。所以SERDES 不应该只被看成“一个转换器”而应该被看成“高速链路的物理层发动机”。普通 GPIO 更像乡村小路速度低、规则简单、问题直观。SERDES 更像高速公路速度快、车道多、收费站多、限速规则多任何一个环节没配置好车都跑不起来。二、SERDES 解决了什么问题SERDES 解决的核心问题是如何用更少的引脚、更少的走线传输更高的数据带宽。假设系统里有一条 64bit 并行总线如果想跑到很高频率会遇到一堆麻烦需要大量 FPGA 引脚PCB 走线非常密多根线之间很难做到严格等长时钟和数据同步压力很大并行总线频率越高EMI 越难控制板级布局布线成本上升接口扩展性变差。SERDES 的思路是反过来不要铺一大片并行线而是把数据打包成高速串行比特流通过一对或几对差分线传出去。例如一条 lane 可以理解为一条高速差分通道并行数据 -- 编码/扰码 -- 串化 -- 差分通道 -- 时钟恢复 -- 解串 -- 对齐/解码 -- 并行数据这样做的好处很明显引脚数量减少PCB 走线减少差分信号抗干扰能力更强更适合跨芯片、跨板卡、跨连接器传输带宽更容易继续往上扩展。所以在 FPGA 项目中只要你碰到下面这些接口大概率就绕不开 SERDESPCIeEthernetJESD204B / JESD204CSATA / SASAuroraInterlakenCPRI / eCPRI高速 ADC / DAC 接口板间高速互连光模块接口。这些协议看起来名字不同但底层都离不开高速串行链路。三、用一条 lane 看 SERDES 内部结构理解 SERDES最简单的方法是抓住一条 lane。一条 lane 可以粗略理解为一组 TX/RX 高速收发通道通常包括一对发送差分线和一对接收差分线。实际工程中多个 lane 还可以组合成 x2、x4、x8、x16 这样的多通道链路。1. RX 方向先把高速串行信号“救回来”RX 方向的大致路径是高速差分输入 ↓ 输入终端 / 接收 buffer ↓ CTLE / DFE 均衡 ↓ CDR 时钟数据恢复 ↓ Deserializer 解串 ↓ 字节对齐 / 字对齐 ↓ 解码 / 去扰码 / 速率匹配 ↓ 送入 FPGA fabric这里最关键的是 CDR。高速串行链路通常不会单独传一根数据时钟线而是把时钟信息“藏”在数据跳变里。接收端需要通过 CDR也就是 Clock Data Recovery从数据流中恢复采样时钟。这也是为什么高速协议经常要使用编码或扰码。如果数据长时间不跳变比如一直是 0 或一直是 1接收端就很难恢复时钟。编码和扰码的作用之一就是让数据流保持足够多的跳变帮助接收端稳定锁定。均衡也很重要。高速信号经过 PCB、连接器、线缆或背板后高频分量会被衰减波形会变钝码间干扰会变严重。CTLE、DFE 这类均衡模块就是在接收端尽量把被通道“揉皱”的波形恢复回来。可以把 RX 想象成收快递差分输入是快递车到门口均衡是把被压坏的箱子尽量整理好CDR 是找回正确的节奏解串是把一长串包裹重新拆成一排排数据对齐和解码是确认每个包裹的边界和内容fabric 接口才是最终交给业务逻辑处理。2. TX 方向把 fabric 数据变成能跑高速通道的比特流TX 方向的大致路径是FPGA fabric 并行数据 ↓ 编码 / 加扰 / Gearbox / Buffer ↓ Serializer 串化 ↓ TX Driver ↓ 高速差分输出TX 看起来比 RX 简单一些但也不是“直接串起来发出去”这么粗暴。发送端通常要处理这些问题数据位宽转换编码比如 8b/10b、64b/66b加扰避免数据模式过于单一gearbox解决协议位宽和物理位宽不匹配TX swingpre-emphasis / de-emphasis输出极性lane 绑定TX PLL 和参考时钟配置。如果 RX 像收快递TX 就像发快递业务逻辑给你的是一堆原始货物SERDES 不能直接扔上高速路。它要先打包、贴标签、排队、装车然后再按高速链路能接受的方式发出去。四、PMA 和 PCS理解 SERDES 的关键分界线学习 SERDES 时最容易混淆的两个词就是 PMA 和 PCS。可以先记住一句话PMA 管“比特怎么在物理通道上跑”PCS 管“这些比特怎么变成协议能理解的数据”。1. PMA更靠近物理世界PMA 是 Physical Medium Attachment可以理解为更靠近模拟电路和位级链路的一层。它通常负责TX/RX 模拟前端终端匹配PLLCDR串化器解串器CTLEDFE发送端预加重接收端均衡loopback眼图监测PMA direct 模式与物理差分管脚相关的配置。PMA 关心的是这个高速比特流能不能在真实通道上稳定传过去所以PMA 层的问题通常表现为CDR 不锁RX loss of signalBER 高眼图差链路偶发错误温度、电压、板间差异导致不稳定同一套逻辑在一块板上能跑换一块板就不稳。这些问题往往不是 RTL 仿真能直接看出来的而是需要结合参考时钟、PCB、SI、PLL、均衡参数和调试工具一起看。2. PCS更靠近数字协议PCS 是 Physical Coding Sublayer可以理解为 PMA 和上层协议之间的数字整理层。它通常负责8b/10b 编码 / 解码64b/66b 编码 / 解码scramble / descrambleblock alignmentword alignmentcomma detectionrate match FIFOchannel bondinglane alignmentgearboxerror detection协议辅助逻辑。PCS 关心的是这些比特能不能被正确分组、对齐、解释并交给上层协议PCS 层的问题通常表现为PMA 已经锁定但协议层 link 不起来comma 找不到block lock 失败lane 顺序错多 lane deskew 失败8b/10b disparity error64b/66b block errorFIFO underflow / overflow上层 MAC 或协议 IP 一直报错。这也是很多新手容易踩坑的地方CDR 锁了不代表协议通了PMA 通了不代表 PCS 通了PCS 通了也不代表上层应用一定对。链路是分层的调试也必须分层。五、为什么“链路通了”不等于“协议通了”在高速接口调试中经常听到几句话“PLL lock 了。”“CDR lock 了。”“RX 有数据了。”“PRBS 能过。”“但是协议就是起不来。”这其实很正常。因为这些状态对应的是不同层次。1. PLL lock说明参考时钟和 PLL 配置大概率没有明显问题但它只能证明“时钟系统初步工作”。它不能证明数据能正确收发。2. CDR lock说明 RX 端大概率已经能从串行输入中恢复时钟。但 CDR lock 只能说明“比特流节奏可能对了”不能说明字节边界一定对也不能说明协议帧一定对。3. PRBS 通过PRBS 测试通常用于验证物理链路质量例如误码率。它很适合判断 PMA 层是否健康但它不代表实际协议已经配置正确。4. Block lock / align done这类状态更接近 PCS 层说明接收端已经能识别数据块边界或 lane 对齐关系。但即便 PCS 状态正常上层协议仍可能因为复位顺序、配置寄存器、训练状态机、速率协商等问题失败。所以调试 SERDES 时不要只问一句“链路通没通”而应该问PLL 锁了吗 CDR 锁了吗 PMA loopback 能过吗 PRBS 能过吗 字对齐完成了吗 PCS block lock 了吗 多 lane 对齐了吗 协议训练完成了吗 上层数据路径正常吗这套问题比一句“为什么不通”更有价值。六、SERDES 与普通 IO 的最大区别普通 IO 的问题很多时候是逻辑问题。SERDES 的问题经常是系统问题。它同时牵涉FPGA 器件选型transceiver lane 分配参考时钟频率和抖动PLL 类型和资源IP 参数reset sequencePCB 走线差分阻抗AC coupling连接器和线缆电源噪声均衡参数协议层训练调试工具。也就是说SERDES 不是一个“RTL 模块”而是一个跨越芯片、板级、时钟、电源、协议和软件配置的完整系统。这也是为什么很多 FPGA 高速接口问题不能只靠看 Verilog 解决。你可能需要同时看RTLIP 配置XDC / SDC 约束device handbookboard schematicPCB layoutIBIS-AMI 或 SI 报告transceiver debug log协议 IP 状态寄存器示波器眼图误码率测试结果。调 SERDES 很像查案。RTL 只是现场之一不是整个案发过程。七、初学 SERDES 应该先抓住哪些主线如果刚开始接触 SERDES不建议一上来就陷进上千页 user guide 里。可以先抓住五条主线。1. 先分清 PMA 和 PCS这是第一优先级。看到问题时先判断这是物理位级问题还是数字编码 / 对齐 / 协议问题如果 CDR 都不锁先别急着查 MAC。如果 PRBS 能过但协议不通就要重点看 PCS 和上层协议状态。2. 先单 lane再多 lane多 lane 问题更复杂因为会多出 lane bonding、deskew、lane polarity、lane reversal、通道顺序等问题。新手调试时能单 lane 验证就先单 lane 验证。3. 先 loopback再外部链路常见调试顺序可以是内部 PCS loopback ↓ 内部 PMA loopback ↓ 近端板级 loopback ↓ 远端外部链路 ↓ 真实协议互通这样可以逐步缩小问题范围。4. 先 PRBS再协议PRBS 是判断高速物理链路质量的好工具。如果 PRBS 都过不了说明物理层大概率还有问题。这时直接调协议容易越调越乱。5. 先看复位和时钟SERDES IP 很多问题不是数据路径错而是复位和时钟顺序错。例如refclk 没稳定就释放 resetTX PLL 未锁就启动发送RX CDR 未锁就开始对齐reset 信号跨时钟域处理不规范IP 要求的 reset sequence 没按文档做。高速接口里复位不是“拉一下就完事”。很多时候复位顺序本身就是协议的一部分。八、一个简单记忆模型可以把 SERDES 链路想象成一条高速物流系统。层次类比负责内容PMA高速公路和车辆信号、电气、时钟恢复、均衡、串并转换PCS分拣中心编码、解码、对齐、分组、lane 整理Protocol IP业务系统PCIe、Ethernet、JESD204 等协议行为User Logic用户应用真正的数据处理逻辑如果高速公路塌了分拣中心再聪明也没用。如果分拣规则错了车能到站也分不出正确包裹。如果业务系统配置错了底层全绿上层照样不工作。这就是 SERDES 调试的基本逻辑一层一层确认不要跨层猜 bug。九、总结SERDES 不是简单的并串转换器而是 FPGA 高速通信中的完整收发链路。它解决的是高速数据传输中的引脚数量、走线复杂度、同步压力、功耗和 EMI 等问题。它背后支撑的是 PCIe、Ethernet、JESD204、SATA、Aurora、Interlaken 等一系列高速接口。理解 SERDES重点不是背多少寄存器而是先建立分层认知PMA 更靠近物理通道关注信号、电气、PLL、CDR、均衡和串并转换PCS 更靠近数字协议关注编码、解码、对齐、gearbox、FIFO 和 lane 整理PMA 通了不代表 PCS 通PCS 通了不代表协议通协议通了才轮到用户逻辑稳定传数据。如果只记一句话可以记这个SERDES 是 FPGA 里的高速公路系统PMA 负责让比特跑起来PCS 负责让比特排好队协议层负责让数据真正说得通。对 FPGA 工程师来说学 SERDES 的目标不是“会点 IP 配置”而是能在链路不通时判断问题在哪一层。这才是从“能用 SERDES”到“能调 SERDES”的分水岭。