首页 / 资讯中心 / 文章详情

PCIe 5.0 Retimer芯片原理、选型与调试实战指南

PCIe 5.0 Retimer芯片原理、选型与调试实战指南 ★ FEATURED ARTICLE
1. 从一张掉卡故障单说起PCIe Retimer到底解决什么问题去年帮一个做AI服务器的朋友排查故障现象很典型一台8卡GPU服务器跑训练任务时偶尔会掉一张卡系统日志里刷出一堆AERAdvanced Error Reporting报错链路速率从Gen5降到Gen1有时候重启能恢复有时候得重新插拔。换过GPU、换过主板、换过线缆问题依旧。最后定位到根因——链路太长信号衰减太严重眼图几乎闭合。解决方案不是换硬件而是在中间加了一颗PCIe Retimer芯片。这个场景在PCIe 5.0时代越来越常见。PCIe 5.0单通道速率是32 GT/s是PCIe 3.0的4倍、PCIe 4.0的2倍。速率翻倍带来的直接后果就是信号在PCB走线和连接器上的衰减急剧恶化。PCIe 3.0时代主板到插槽的走线可以轻松做到十几英寸不用加任何补偿到了PCIe 5.0超过8到10英寸就可能需要信号调理。AI服务器里GPU和CPU之间隔着背板、riser卡、线缆链路总长度动辄20英寸以上没有Retimer基本没法稳定跑Gen5。所以这篇文章想聊清楚一件事PCIe Retimer芯片到底是什么、它和Redriver有什么区别、在什么场景下必须用它、怎么选型、怎么调试、踩过哪些坑。不管你是做服务器硬件设计的、做信号完整性的、还是做系统集成的只要你的项目里涉及PCIe 5.0甚至未来的PCIe 6.0这颗芯片你都绕不开。提示本文讨论的Retimer是数字信号调理芯片不是软件层面的驱动或固件也不涉及任何网络代理相关内容。所有内容围绕PCIe物理层信号完整性展开。2. PCIe Retimer的核心原理它到底在做什么2.1 先搞清楚PCIe信号衰减这件事要理解Retimer得先理解PCIe信号为什么会劣化。PCIe用的是高速差分信号走的是铜线。铜线对高频信号的衰减遵循一个基本规律频率越高衰减越大。PCIe 5.0的Nyquist频率是16 GHz在这个频率下FR4板材的插入损耗大约是每英寸0.5到0.7 dB。一条20英寸的链路光PCB走线就衰减10到14 dB再加上两个连接器各贡献1到2 dB过孔、线缆再贡献几个dB总衰减轻松超过20 dB。PCIe规范对发送端和接收端的信号质量有明确的眼图模板要求。当链路衰减太大接收端看到的眼图就会又小又闭合误码率BER飙升。PCIe 5.0要求BER低于10的负12次方这个要求非常苛刻。信号劣化到一定程度链路训练就失败或者虽然训练成功但运行中频繁出错表现为掉卡、降速、AER报错。传统的解决办法有两种一是缩短走线、换更低损耗的板材比如Megtron 6二是加Redriver。但PCB空间有限板材成本高Redriver在Gen5下又力不从心。Retimer就是在这个背景下成为刚需的。2.2 Retimer和Redriver的本质区别很多人把Retimer和Redriver混为一谈觉得都是信号中继器。实际上两者的工作层次完全不同效果也差很多。Redriver本质是一个模拟放大器它做的事情是把接收到的模拟信号做线性均衡通常是CTLE连续时间线性均衡然后放大再发出去。它不理解PCIe协议不知道包边界在哪里不知道链路状态。它只是把信号整形放大。问题在于Redriver在放大信号的同时也会放大噪声和抖动。Gen5速率下输入信号本身眼图就已经很差了Redriver放大后抖动会累积效果有限。Retimer做的事情完全不同。它内部包含完整的CDRClock Data Recovery时钟数据恢复电路和SerDes串行器/解串器。它的工作流程是接收端先把模拟信号采样、判决、恢复出数字比特流然后用本地干净的时钟重新发送。也就是说Retimer是先听懂再重新说一遍而不是把听到的放大再说一遍。这样一来输入端的抖动和噪声被完全隔离输出端是一个全新的、干净的信号。用一个生活类比Redriver像一个人在嘈杂环境里听到别人说话然后大声重复一遍但可能把噪声也一起喊出去了Retimer像一个人听懂了对方说的话然后用自己清晰的嗓音重新说一遍噪声完全不带。这个区别带来的直接后果是Retimer可以级联一颗不够加两颗Redriver级联会累积抖动。Retimer可以完全重置链路抖动预算Redriver只能部分补偿。当然Retimer的代价是功耗更高、延迟更大、成本更贵。2.3 Retimer内部架构拆解一颗典型的PCIe 5.0 Retimer内部大致包含以下模块接收端均衡器通常包含CTLE和DFE判决反馈均衡器。CTLE负责补偿高频衰减DFE负责消除码间干扰ISI。Gen5下DFE通常需要十几到二十几个tap。CDR时钟数据恢复从接收到的数据流中恢复出时钟这是Retimer的核心。CDR的带宽和抖动容限直接决定Retimer的性能。数字信号处理包括均衡自适应、链路训练参与、SKP有序集处理等。发送端包含FIR均衡器前馈均衡通常有3到4个tap可调用于预加重/去加重补偿发送端到接收端的信道损耗。协议感知逻辑Retimer需要参与PCIe链路训练过程转发TS1/TS2有序集处理电气空闲、恢复等状态。这是Retimer和普通SerDes的关键区别——它必须懂PCIe协议。注意Retimer参与链路训练的方式有两种——一种是透明模式对上层完全透明延迟固定另一种是非透明模式会修改部分训练序列。选型时要确认你的平台支持哪种模式。3. 什么场景必须上Retimer选型判断与关键参数3.1 链路预算计算什么时候需要Retimer不是所有PCIe 5.0链路都需要Retimer。判断依据是链路总损耗是否超过规范允许的预算。PCIe 5.0的发送端和接收端加起来规范允许的信道损耗大约是36 dB在16 GHz下。但这个数字是理想情况实际设计中要留余量。一个实用的估算方法链路组成典型损耗16 GHzPCB走线FR40.5-0.7 dB/inchPCB走线低损耗板材0.3-0.4 dB/inch连接器每对1-2 dB过孔每个0.3-0.5 dB线缆每英寸0.5-1.0 dB封装die2-4 dB把链路各段损耗加起来如果总损耗超过25 dB就应该考虑加Retimer。超过30 dB基本必须加。AI服务器里CPU到GPU的链路经过背板riser线缆总损耗经常在30 dB以上这就是为什么Gen5服务器普遍需要Retimer。3.2 Retimer选型的关键参数清单选Retimer不是看个型号就完事以下参数必须逐项确认协议支持PCIe 5.0还是4.0是否支持CXL未来是否要升级到6.0注意有些Retimer只支持PCIe不支持CXL。通道数x4、x8、x16通常Retimer按lane数卖x16链路需要16 lane的Retimer或者用多颗拼。功耗Gen5 Retimer每lane功耗大约在100-200 mWx16就是1.6-3.2 W。这对服务器散热设计有影响。延迟Retimer会引入额外延迟通常在几纳秒到十几纳秒。对延迟敏感的应用如内存语义的CXL要特别关注。封装BGA封装引脚间距、尺寸要和PCB布局匹配。工作温度服务器内部温度可能到85度以上要确认Retimer的工业级温度范围。是否集成均衡有些Retimer内置了发送端FIR和接收端DFE有些需要外部配置。配置接口I2C、SMBus还是SPI这决定了你怎么初始化和调试它。目前市面上主流的PCIe 5.0 Retimer供应商有几家产品在通道数、功耗、延迟上各有侧重。选型时不要只看参数表一定要拿评估板实测眼图。3.3 Retimer、Redriver、Switch怎么选这三个东西经常被混淆实际用途完全不同器件类型工作层次能否级联延迟成本适用场景Redriver模拟不推荐极低低短链路、Gen3/4Retimer数字协议可以中等高长链路、Gen5Switch协议层可以高很高需要fan-out或切换简单判断如果链路损耗在15-20 dBGen4可以用Redriver如果超过25 dB或者跑Gen5直接上Retimer。如果需要把一条x16拆成两条x8那是Switch的活Retimer做不了。4. 实操Retimer的硬件设计与调试全流程4.1 原理图设计阶段的注意事项Retimer的原理图设计看起来简单——不就是串在链路中间吗但细节很多。首先是AC耦合电容的位置。PCIe要求发送端有AC耦合电容通常是100 nF。当链路中间插入Retimer时电容的位置需要重新规划。一般建议在Retimer的发送端和接收端都放电容具体放哪一侧要看Retimer的规格书要求。放错了会导致共模电压不匹配链路训练直接失败。其次是参考时钟。Retimer需要参考时钟通常是100 MHz差分时钟。这个时钟的来源很关键——如果Retimer和上游设备共用同一个时钟源叫同源时钟如果各自独立叫非共源。PCIe规范对两种模式都有要求但共源模式下抖动更容易控制。实际设计中尽量让Retimer和CPU/GPU共用同一个时钟发生器。还有复位和配置引脚。Retimer通常有PERST#PCIe复位输入需要和链路的复位信号正确连接。配置接口I2C/SMBus要预留上拉电阻和测试点方便调试时读写寄存器。实操心得原理图阶段一定要留出Retimer的I2C调试接口并且把关键寄存器地址整理成表。后期调试时你会发现能读写寄存器是定位问题的唯一手段。4.2 PCB布局布线的关键约束Retimer的PCB布局对信号完整性影响极大。以下是我踩过坑之后总结的硬约束Retimer尽量放在链路中间这样发送端和接收端的损耗均衡两边都有足够的信号幅度。如果偏向一端另一端损耗过大Retimer也救不回来。差分对走线严格等长lane内两根线的长度差控制在5 mil以内lane间skew控制在10 mil以内。Gen5速率下1 mil大约对应0.15 ps的延迟skew太大会直接吃掉眼图余量。阻抗控制差分阻抗85欧姆或100欧姆取决于Retimer的要求。整条链路阻抗要连续过孔要做背钻back drill去掉stub。参考平面完整差分对下方不能有跨分割否则回流路径断裂阻抗突变。电源去耦Retimer的电源引脚要放足够多的去耦电容通常每个电源引脚配一个0.1 uF再加几个大容量的bulk电容。Gen5 Retimer对电源噪声很敏感。4.3 上电初始化与链路训练调试硬件焊好之后第一次上电是最紧张的。调试流程大致如下第一步确认供电正常。用万用表量Retimer的各路电源确认电压在规格范围内。特别注意有些Retimer需要多个电源域1.8V、1.2V、0.9V等顺序有要求。第二步确认参考时钟。用示波器量100 MHz时钟的幅度和频率确认在Retimer的输入要求范围内。第三步通过I2C读取Retimer的ID寄存器。如果能读到正确的ID说明芯片活着I2C通信正常。这一步是分水岭——读不到ID后面都不用谈。第四步配置Retimer的工作模式。根据你的链路拓扑设置均衡参数、发送端FIR、工作速率等。很多Retimer有默认配置但默认配置不一定适合你的链路需要根据实测调整。第五步触发链路训练。拉PERST#释放让CPU和GPU开始链路训练。观察Retimer的状态寄存器看链路是否训练成功、协商到了什么速率和宽度。第六步跑压力测试。用PCIe压力测试工具如厂商提供的测试套件跑长时间误码测试确认BER达标。4.4 眼图测试与均衡调优链路训练成功不代表信号质量好。必须用示波器测眼图确认余量。测试点通常在Retimer的发送端和接收端。眼图测试的关键指标眼高眼图张开的高度越大越好。Gen5要求至少几十mV。眼宽眼图张开的宽度通常用UI的百分比表示。抖动包括随机抖动RJ和确定性抖动DJ总抖动TJ要在规范内。BER轮廓用误码仪测不同相位下的BER画出浴盆曲线。如果眼图不达标调整方向调整发送端FIR的预加重/去加重比例调整接收端CTLE的增益和DFE的tap系数检查PCB走线是否有阻抗不连续确认参考时钟的抖动是否过大这个过程通常需要反复迭代有时候要改PCB有时候只需要改寄存器配置。注意眼图测试需要高带宽示波器至少50 GHz带宽和专用探头设备成本很高。如果自己没有设备可以找供应商或第三方实验室做。5. 常见问题排查掉卡、降速、AER报错怎么定位5.1 掉卡问题的排查思路掉卡是Retimer相关项目里最常见的故障。排查要系统化不能瞎换硬件。先看系统日志。Linux下用lspci看设备是否还在用dmesg看内核报错。重点关注AER报错它会告诉你错误类型Correctable还是Uncorrectable、错误发生在哪个设备、什么类型的错误Bad TLP、Bad DLLP、Replay Timer Timeout等。然后看Retimer的状态寄存器。大多数Retimer会记录链路状态、错误计数、均衡状态等信息。通过I2C读出来能判断问题出在Retimer本身还是链路其他部分。接着分段排查。把链路拆成几段单独测试每一段。比如CPU到Retimer、Retimer到GPU分别测看问题出在哪一段。如果条件允许用误码仪直接测每段的BER。最后才是换件。换Retimer、换线缆、换GPU逐一排除。但换件之前一定要有数据支撑否则就是碰运气。5.2 降速问题的根因分析降速是指链路训练后协商到的速率低于预期比如Gen5降到Gen4甚至Gen1。根因通常有几类信号质量不达标眼图余量不足链路训练时自动降速以保证可靠性。这是最常见的原因。参考时钟问题时钟频率偏差过大或抖动超标导致CDR无法锁定。配置错误Retimer的工作模式或均衡参数配置不当。兼容性问题不同厂商的CPU、GPU、Retimer之间可能存在互操作性问题。排查降速问题先确认是训练时就降速还是运行中降速。训练时降速通常是信号或配置问题运行中降速往往是信号余量在温度变化或电压波动时不够了。5.3 AER报错速查表错误类型可能原因排查方向Bad TLP信号完整性差、CRC错误测眼图、查走线Bad DLLP链路层错误查Retimer配置Replay Timer Timeout延迟过大或丢包查Retimer延迟、链路稳定性Receiver Error接收端信号太差调均衡、查衰减Flow Control Error流控信用丢失查协议层配置Surprise Down链路意外断开查供电、复位、热插拔这张表是我在实际调试中总结的不一定覆盖所有情况但能覆盖大部分常见问题。5.4 热插拔场景的特殊处理PCIe热插拔功能在服务器里越来越常用尤其是NVMe背板。Retimer在热插拔场景下有几个特殊注意点Retimer必须支持热插拔时的电气空闲状态处理不能因为链路断开就锁死。热插拔时PERST#信号的处理要正确Retimer要能正确响应复位。有些Retimer在热插拔后需要重新初始化要确认固件/驱动支持。我遇到过一次热插拔后Retimer不工作的问题最后发现是PERST#的时序不满足Retimer的要求加了一个RC延时电路解决。6. 几个容易被忽略的细节和我的实操体会6.1 Retimer的固件和配置持久化很多Retimer需要在上电后通过I2C加载配置。如果配置没有持久化每次上电都要重新加载系统集成时很麻烦。解决方案有两种一是用带EEPROM的Retimer配置存在EEPROM里自动加载二是在系统固件BIOS/BMC里加入配置代码。我倾向于第一种方案因为独立性强不依赖系统固件。但EEPROM的可靠性要注意曾经遇到过EEPROM数据损坏导致Retimer配置错误的情况。6.2 功耗和散热的实际影响Gen5 Retimer的功耗不容忽视。一颗x16的Retimer功耗可能到3W以上如果服务器里有好几颗总功耗很可观。而且Retimer通常放在链路中间位置可能不在主要风道上散热条件差。实际项目中我给Retimer加了独立的散热片并且在BMC里监控Retimer附近的温度传感器。如果温度超过阈值主动降速保护。6.3 兼容性测试不能省不同厂商的CPU、GPU、Retimer、线缆之间的兼容性问题是实际项目中最头疼的。规格书上都写支持PCIe 5.0但组合在一起就是跑不起来。我的经验是在项目早期就做兼容性矩阵测试把所有可能的组合都测一遍。虽然费时间但比后期出问题再排查成本低得多。测试内容包括链路训练成功率、协商速率、BER、长时间稳定性、热插拔、复位恢复等。6.4 未来PCIe 6.0的挑战PCIe 6.0速率翻倍到64 GT/s调制方式从NRZ变成PAM4。这对Retimer提出了全新要求PAM4信号有三个眼均衡和CDR都更复杂对信噪比的要求更高。目前PCIe 6.0 Retimer还在早期阶段成本高、功耗大。如果你现在做Gen5项目选型时可以关注Retimer是否支持向Gen6升级的路径避免未来重新设计。我个人在实际操作中的体会是Retimer这个器件选型时多花一周做评估调试时能省一个月。尤其是眼图测试和兼容性测试绝对不能省。另外和供应商的FAE保持紧密沟通很重要很多寄存器配置的细节规格书里不会写但FAE知道。最后再分享一个小技巧调试时把Retimer的关键寄存器值定期dump出来存档出问题时对比正常和异常状态的差异往往能快速定位根因。
阅读完成 · 觉得有帮助?
咨询建站