ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PCIe 6.x/CXL 3.x重定时器:高速链路训练与信号再生关键解析

PCIe 6.x/CXL 3.x重定时器:高速链路训练与信号再生关键解析 PCIe 6.x / CXL 3.x 重定时器被列入 PCI-SIG 供应商名录表面上是产品资质新闻背后牵着一整套高速信号链路问题PCIe 6.x 为什么必须依赖重定时器CXL 3.x 为什么和 PCIe 6.x 物理层绑定重定时器和传统 redriver 有什么区别系统工程师在选型、原理图设计、调试和量产中应该注意什么。这篇文章围绕这些问题展开适合硬件工程师、FPGA 开发者、系统软件工程师和做高速互连测试的测试工程师阅读。读完后你应该能解释重定时器在高速链路中的实际位置也能在项目里用一套完整的方法判断链路训练、均衡和枚举失败的环节。先说明技术主线这里说的重定时器Retimer不是简单的信号放大器而是位于 PCIe 链路上的一段物理层信号再生器件。PCIe 6.0 将调制方式从 NRZ 切换到了 PAM4并引入 FEC 和 FLIT 编码。CXL 3.x 又在 PCIe 物理层之上增加了更复杂的多主机内存一致性拓扑。两者加在一起让重定时器从“可选项”变成越来越多高速系统里的“必选项”。1. 重定时器为什么在 PCIe 6.x / CXL 3.x 时代成为关键器件1.1 高速信号链路上的距离问题PCIe 的每一次速率翻倍都会让信号完整性变得更加紧张。PCIe 1.0 时代只需要 2.5GT/sNRZ 编码下的信号频率不高普通 FR4 板材上的走线距离约束不明显。到 PCIe 4.0 的 16GT/s信号频率已经接近 8GHz此时铜箔走线的插入损耗、过孔的反射、连接器的不连续阻抗都会明显挤压信号眼图。PCIe 5.0 的 32GT/s 进一步把走线预算缩短很多服务器主板上甚至需要严格控制 PCB 走线长度和过孔数量。到了 PCIe 6.0 的 64GT/s仅靠 PCB 板材和连接器优化已经很难覆盖长链路。这种情况下业界通常有两个选择Redriver 和 Retimer。Redriver 用模拟电路对信号做均衡和放大解决一部分损耗问题但它不恢复时钟噪声也会被同步放大。Retimer 则用 CDR 恢复时钟后重新采样相当于把一段物理链路切成两段使每一段都拥有更干净的信号预算。PCIe 6.x 的 PAM4 信号更脆弱对时钟恢复和均衡能力的要求更高所以重定时器在 6.x 时代的价值比 Gen4/Gen5 时代更明显。1.2 PCIe 6.0 的 PAM4 和 FEC 对链路质量的改变PCIe 6.0 之前所有 PCIe 版本都使用 NRZ 调制每个单位间隔内只有 0 和 1 两种电平接收端只需要判断一个眼图的上下沿。PCIe 6.0 切换到 PAM4 后每个符号携带 2 个比特但同样的电压摆幅里需要区分 4 个电平。也就是说原来一个“大眼”变成了三个“小眼”垂直方向余量明显变小对噪声、串扰、反射和抖动都更敏感。为了弥补 PAM4 抗噪声能力下降的问题PCIe 6.0 引入了前向纠错FEC和基于 256B 的 FLIT 编码。FEC 允许接收端纠正一部分错误但这是以延迟为代价的。重定时器如果只做纯模拟放大就无法配合 PAM4 训练、FEC 和均衡协商。因此 PCIe 6.x 时代的重定时器必须对 PAM4 符号流有足够的理解甚至在内部实现更多数字信号处理能力。这也是为什么不能简单把 PCIe 5.0 的 Retimer 方案套到 6.x 上。1.3 CXL 3.x 让拓扑从“点对点”走向“网络化”CXL 协议基于 PCIe 物理层但它解决的问题远不止“接一个设备”。CXL 1.0/1.1 主要解决加速器和主机之间的内存一致性访问CXL 2.0 引入了交换和内存池化CXL 3.x 进一步支持多主机、复杂交换拓扑和更灵活的内存共享。当系统中出现 CXL Switch主机到内存池之间的距离就不再只是 CPU 到一块内存条的距离而是可能跨越多个板卡、连接器和背板。链路变长之后Re-timer 成为扩展物理距离的必要手段。Retimer 对 CXL 协议本身是透明的它不解析 CXL.io、CXL.cache、CXL.mem 报文只负责把物理信号恢复并重新发送。但要注意CXL 对延迟非常高敏尤其是 CXL.mem 路径上的每一次额外跳变都会增加访问延迟。重定时器在带来信号恢复能力的同时也引入了额外延迟设计时需要综合评估。1.4 PCI-SIG 供应商名录意味着什么“列入 PCI-SIG 供应商名录”不等于“这颗芯片在所有环境下都能直接工作”但它是一个重要的工程信号。PCI-SIG 会围绕 PCIe 规范提供合规性验证和互操作性测试机制产品被列入名录通常说明它已进入 PCIe 6.x / CXL 3.x 相关规范的一致性评估流程至少在链路训练、均衡、误码率和互操作性方面有可追溯的验证路径。从工程师角度这项信息最有价值的地方是选型时可以优先考虑有合规流程的器件并在项目启动时向芯片厂商索取完整的调试手册、参考设计和 PCIe 6.x 一致性测试报告。不要只看“支持 PCIe 6.0”这几个字而是要确认它支持的 lanes 数、PAM4 训练模式、FEC 行为、固件加载方式和寄存器接口。2. Retimer 到底在工作什么从 Redriver 到 Retimer2.1 Redriver 和 Retimer 的分工差异Redriver 和 Retimer 经常被混用但它们本质上是两类器件。Redriver 内部是模拟信号调理链路通常包含连续时间线性均衡器、线性放大器和输出驱动器。它的作用是补偿走线损耗把信号幅度和上升沿重新调整到可以接受的程度。好处是延迟极小、功耗低、成本低缺点是它不能消除随机抖动也不能真正恢复时钟信号中的噪声会跟着一起放大。Retimer 的原理则完全不同。它的接收端先经过模拟前端做均衡然后用 CDR 从输入信号中恢复出时钟再在恢复时钟的驱动下重新采样数据最后在发送端重新驱动输出。由于数据被重新同步过输出信号的抖动和原始输入不再强相关噪声积累被“切断”。这也是 Retimer 能支持更长链路和更高速度的根本原因。表格对比两者对比项RedriverRetimer核心能力模拟均衡与放大时钟恢复、重新采样、重新驱动信号噪声处理噪声随信号一起放大通过重定时去除部分抖动和噪声积累延迟皮秒级到纳秒级较小纳秒级到几十纳秒取决于实现功耗较低较高对协议理解不需要理解协议对 PCIe 物理层训练/均衡有要求通常仍不解析协议报文适用场景短链路、速率较低、预算有限长链路、高速率、PCIe 5.0/6.0、CXL 扩展2.2 Retimer 内部数据流RX EQ、CDR、TX EQ可以把一颗 Retimer 的数据路径理解成三段接收端、时钟恢复端、发送端。接收端通常会配置一组均衡器包括用于补偿信道频率响应的 CTLE以及用于消除符号间干扰的 DFE。PCIe 6.x 的 Retimer 接收端还要处理 PAM4 的 3 组眼图判断和误码监控。时钟恢复是 Retimer 的关键。输入信号经过均衡后CDR 模块会从数据跳变沿中提取时钟并持续跟踪输入信号的频率和相位。恢复时钟的质量直接影响输出眼图和系统误码率。值得注意的是Retimer 需要有可靠的本端参考时钟Refclk否则 CDR 在启动和速率切换时可能无法正确锁定。发送端负责把重新采样的数据以上行方向输出。发送端同样会通过均衡参数对输出信号进行预加重也就是减小低频增益或增强高频分量以预补偿下一段链路损耗。主机 CPU、Retimer、端点三者之间的均衡参数会分别在两段链路上独立协商这比单链路直接连接更复杂。2.3 PCIe 6.x Retimer 的新任务PCIe 6.0 引入了 PAM4 和 FECRetimer 必须理解这些物理层机制。具体来说Retimer 需要参与链路训练状态机中的均衡协商接收发送端的 preset/hint 参数并把自己的 RX EQ 状态反馈给上游。对 PAM4 信号来说三个眼的均衡目标不同需要更多组系数调试复杂度高于 NRZ。FEC 在 PCIe 6.0 里用于纠错但 FEC 的处理位置会影响延迟。有些 Retimer 设计会把 FEC 当作端到端链路层的一部分Retimer 只做透传有些则可能实现更智能的错误监控。选型时需要确认 Retimer 的 FEC 行为以及它在 FLIT 编码下如何处理错误标志。简单说PCIe 6.x Retimer 已经从“物理层再生器”变成需要和链路两端协调训练参数的器件更像一个两端都有 PHY 的交叉点。2.4 Retimer 在拓扑中的透明性很多工程师第一次接触 Retimer 时会问它会不会出现在lspci列表里通常不会。Retimer 不产生 bus number不分配 BDF不解析 TLP也不参与操作系统枚举。它工作在物理层相当于把一段 PCIe 物理链路分割成两段但逻辑上仍然是同一个 PCIe 域。这与 PCIe Switch 形成鲜明对比。Switch 是协议层设备内部由上行端口、下行端口和一个内部总线构成它会把一个物理链路扩展成多个总线枚举后能看到新的桥接设备。NTBNon-Transparent Bridge更复杂它可以让两个不同地址域的主机/设备交换数据需要专门的驱动和地址映射。Retimer 不改变拓扑结构它的存在对协议层完全透明。正因如此Retimer 出问题时最难排查上层看链路是通的但物理层误码可能已经很高。3. 链路训练、均衡与枚举Retimer 如何影响系统可见性3.1 LTSSM 和 PCIe 6.x 链路训练PCIe 链路能否正常工作物理层训练是关键。链路训练状态机LTSSM包括 Detect、Polling、Configuration、L0、L0s、L1、L2、Recovery 等状态。正常工作流程是两端在 Detect 阶段检测接收端是否插入Polling 阶段协商速度和极性Configuration 阶段协商链路宽度然后进入 L0 正常工作。插入 Retimer 后链路被分成两段Host 到 Retimer 是一段Retimer 到 Endpoint 是另一段。两段链路要都能完成训练和均衡整个链路才能跑到目标速率。如果 Retimer 的固件或配置有问题可能出现“Host 与 Retimer 协商成功、Retimer 与 Endpoint 协商失败”这种情况。在 lspci 上看到的最终结果是设备不存在或者只出现在低速率模式下。3.2 Equalization从 Gen3 到 Gen6从 PCIe 3.0 开始PCIe 支持协商式的均衡过程。发送端和接收端通过链路训练中的 TS1/TS2 序列交换均衡参数发送端尝试不同预加重设置接收端根据信号质量做出回应。PCIe 6.0 的 PAM4 均衡更复杂每一组预设不仅要考虑主游标还要考虑多个游标和信号电平。Retimer 会把一条长链路切成两段每段链路的均衡是独立完成的。这样做的好处是主板走线总损耗可以很大但每段链路仍然能保持足够眼图余量。坏处是某个 Retimer 端口的均衡参数若配置不当就会成为隐形瓶颈。常见表现是链路协商成功但速率上不去或者高负载时出现 correctable AER 错误。表格展示各代 PCIe 常见速率和调制方式PCIe 版本速率调制方式典型编码方式Gen12.5GT/sNRZ8b/10bGen25GT/sNRZ8b/10bGen38GT/sNRZ128b/130bGen416GT/sNRZ128b/130bGen532GT/sNRZ128b/130bGen664GT/sPAM4FEC FLIT3.3 枚举顺序中 Retimer 为什么“看不见”系统上电后BIOS/固件先初始化 Root Complex然后开始遍历 PCIe 拓扑。对于每个桥接设备它分配 bus number读取 vendor ID、device ID、class code 等配置空间字段然后配置 BAR 和中断。Retimer 没有配置空间头它处于两段物理链路之间因此不会出现在枚举结果里。这带来一个现象CPU 看到的链路是 Host 到 Endpoint 的整条链路Retimer 的存在只能从链路训练结果中间接推断。比如链路协商速度是否达标、均衡状态是否正常、当前 link width 是否符合预期。所以排错时不要只盯着lspci看设备是否出现还要结合 Retimer 侧的寄存器判断两段链路各自的训练状态。3.4 用 lspci 和 dmesg 检查链路状态在 Linux 环境中查看 PCIe 链路状态最常用的是lspci。以下命令可以看到某端口的链路能力、当前状态和控制设置sudo lspci -vvv -s 01:00.0 | grep -E LnkCap|LnkCtl|LnkSta|DevCap|DevSta输出中比较关键的是 LnkSta 字段它表示当前链路实际运行速度和宽度。例如LnkSta: Speed 16GT/s (downgraded), Width x8 (ok)说明硬件设计上是 32GT/s但实际只协商到 16GT/s。出现 downgraded 时优先怀疑 Retimer 或连接器链路的均衡训练。还可以用dmesg查看内核是否报告 PCIe AER 错误sudo dmesg | grep -iE pcie|aer|link down|correctable|uncorrectable如果日志里有频繁的 correctable AER 错误说明物理层误码已经触发纠错机制。此时要看是 FLIT/FEC 纠错还是链路层重试要结合 Retimer 内部错误计数器一起判断。setpci可以修改配置空间比较危险不建议在生产和调机环境中随意使用。4. 面向 CXL 3.x 的 Retimer延迟、可靠性和内存扩展4.1 CXL 的三种设备类型和协议分层CXL 基于 PCIe 物理层在协议层分成 CXL.io、CXL.cache、CXL.mem 三个子协议。CXL.io 用于设备发现、初始化和 IO 操作行为类似 PCIeCXL.cache 用于缓存一致性请求CXL.mem 用于内存读写和一致性的主从访问。根据设备能力不同CXL 设备被分为三类类型典型设备核心能力Type 1无本地内存的一致性加速器使用 CXL.cache 访问主机内存Type 2带本地内存的加速器如 GPU/AI 芯片同时支持 CXL.cache 和 CXL.mem主机和设备可互相访问对方内存Type 3内存扩展设备、内存池设备以 CXL.mem 为主为系统提供可扩展内存在 CXL 3.x 拓扑中多主机可以通过 CXL Switch 连接多个 Type 3 内存设备形成内存池。链路层级变多物理距离变长Retimer 成为扩展链路长度的重要手段。4.2 为什么 CXL 内存池化更强依赖 Retimer单个 PCIe 点对点链路通常距离有限。CPU 到 GPU 或 NVMe SSD 的主板走线在 Gen5/Gen6 下已经很紧张。CXL 3.x 的内存池化场景中一台服务器可能有多个 CPU、多个 CXL Switch、多个内存池节点。这些设备可能在同一个机箱内也可能跨越背板。背板插槽、连接器、线缆和 PCB 过孔带来的信号衰减都会被放大。Retimer 在 CXL 3.x 拓扑中承担的角色是“物理层中继”。它可以把主机到 CXL Switch 的链路、以及 Switch 到内存池的链路分别拉到更远的位置。设计上等于把一条长链路拆成多段短链路每一段的信号预算都更容易满足。要注意的是Retimer 不会感知 CXL 的内存地址或一致性状态它只负责让物理链路可靠传输 0/1 符号。4.3 延迟和 FEC 对一致性协议的影响CXL.mem 路径上的延迟对系统性能影响很大。CPU 访问远端内存时每增加 10ns 到 20ns 的物理链路延迟都会反映在内存访问延迟上。Retimer 引入的延迟虽然远小于网络协议栈但在高频内存读写场景下仍需要评估。如果一颗 Retimer 工作在前面说的“把链路切成两段”模式下每经过一次 Retimer 就增加一次 CDR 处理时间延迟会比 redriver 高。另一方面PCIe 6.0 的 FEC 能纠正一部分错误但代价是延迟和编码开销。对于 CXL.mem 这种链路层重试敏感的协议希望传输尽量可靠不能把纠错压力都放在主机端。Retimer 如果具备监控误码率并上报状态的能力可以帮助系统提前发现信号劣化避免在内存一致性操作中出现难以定位的随机故障。4.4 CXL 模式与 PCIe 模式的配置差异实际选型时要注意不是所有 PCIe 6.x Retimer 都自动支持 CXL 3.x。虽然 CXL 使用 PCIe 物理层但训练和协商过程中存在 CXL 特定的模式。Retimer 如果只被配置成普通 PCIe 模式可能无法正确参与 CXL 链路训练导致设备被识别为普通 PCIe 设备或者只能以较低速率运行。有的 Retimer 通过硬件 pin strap 设置默认模式有的通过 I2C/SMBus 接收固件配置有的支持在链路同步后动态切换。项目开始前确认以下信息当前 Retimer 型号是否明确支持 CXL 3.x是否支持目标拓扑中的端口方向是否需要额外固件固件如何加载到器件内部 RAM 或外部 Flash。这些细节会直接影响系统稳定性和量产效率。5. 工程落地从选型、测量到排错5.1 选型阶段可以对照的检查项PCIe 6.x / CXL 3.x 项目选型时不能只看“速度越高越好”或“功能越多越好”。Retimer 是物理层器件它的能力边界直接影响主板设计复杂度、成本和调试成本。下面是一张用于选型评审的检查清单检查项需要确认的问题速率支持是否支持 Gen6 64GT/s还是只支持 Gen5 32GT/sLanes 数单芯片支持 x4/x8/x16 中的哪些配置协议支持是否能配置为 CXL 模式是否支持 CXL 3.x功耗与散热最大功耗、热阻、是否适合目标机箱散热方案配置方式pin strap、I2C/SMBus、SPI Flash、固件加载时钟要求需要独立 Refclk 还是支持 SRIS 架构调试能力是否提供内部寄存器、误码计数、链路诊断寄存器的访问方式合规状态是否进入 PCI-SIG 供应商名录是否有互操作性测试记录5.2 实验室验证眼图、BER 和协议分析仪Retimer 调试不能只靠“设备能不能被识别”来判断。一颗 Retimer 如果均衡参数设得保守设备照样能枚举成功但可能在高温或负载突变时出现误码。实验室阶段应该对 Retimer 的输入和输出两段链路分别做测试。可靠的流程是先使用误码仪和示波器测量每一段链路的眼图。对于 PAM4 信号需要观察 3 个不同电平的眼高、眼宽和抖动。再用协议分析仪抓取 LTSSM 状态确认训练过程中发送端和接收端是否通过了所有均衡阶段。实验完成后记录 Retimer 内部寄存器的均衡系数和误码计数作为后续故障分析基线。Linux 下还可以通过 AER 日志做长稳观察sudo cat /sys/kernel/debug/aer/0000:01:00.0该节点可以看到设备累计的 correctable/uncorrectable 错误数量适合做高低温、电压波动和长时间压力测试时的数据采集。5.3 常见链路故障排查路径遇到 Retimer 链路问题先不要急着改走线或换连接器要按照从“基础条件”到“训练结果”的顺序排查。现象可能原因检查方式处理建议设备完全无法发现Retimer 复位未释放、参考时钟无信号、I2C 枚举失败、固件未加载检查 reset、clk、I2C、Flash 状态确保 Retimer 先进入正常配置状态再看链路训练链路速率未达到预期均衡训练失败、Retimer 速率上限配置过低、连接器污染、走线损耗超预算查看 Retimer 两端 LnkSta、均衡状态寄存器分段测量链路损耗检查 Retimer EQ 配置高负载时出现 AER 错误信号余量不足、Retimer 输出驱动偏低、电源噪声统计 AER 计数值读取 Retimer 误码计数调整 TX EQ优化电源滤波使用更优板材CXL 设备能枚举但内存不可用Retimer 未配置为 CXL 模式或 CXL.mem 训练失败查看 Retimer 模式寄存器、CXL 拓扑枚举结果对照芯片手册设置 CXL 模式重新加载固件长稳测试后链路降速/掉卡温度升高导致信号余量下降连接器松动查看温度、误码计数复测眼图改善散热检查连接器增加固件链路恢复机制5.4 生产环境注意事项量产阶段需要把 Retimer 的配置固化下来。常见做法是把初始化参数写入外部 SPI Flash 或 Retimer 内部 eFuse上电后由芯片自动加载。这样避免每块主板都依赖 CPU 侧软件做初始化也能降低固件版本不一致导致的问题。同时生产测试脚本里要加入链路质量检查。除了确认lspci看到目标速率和宽度还要读取 Retimer 内部误码计数检查是否超过阈值。对 CXL 内存设备需要实际做内存带宽读写测试而不是只看设备被枚举。生产环境建议保留 I2C/SMBus 调试接口但出厂时可以通过跳线或覆盖胶限制访问避免误配置。6. 常见误区、最佳实践和扩展方向6.1 三个最常见的理解误区误区一Retimer 是“更好的 Redriver”。Redriver 和 Retimer 虽然都能改善信号但工作方式完全不同。Redriver 是模拟放大Retimer 是时钟恢复加信号再生。选 Retimer 并不是简单地选“更高级的放大器”而是要接受更高的功耗、延迟和配置复杂度。短链路低成本场景用 Retimer 反而浪费。误区二Retimer 对软件透明所以不需要初始化。透明指的是它不占用 PCIe 地址空间不代表它不需要配置。Retimer 通常需要设置链路速率上限、端口方向、CXL/PCIe 模式、均衡参数和固件。CPU 侧驱动看不到它但 BIOS 和板级管理固件必须负责把配置加载进去。大量“设备时好时坏”的问题最后都指向固件没有正确初始化 Retimer。误区三PCIe 5.0 的 Retimer 设计经验可以直接用于 6.x。PCIe 6.0 引入 PAM4 后信号余量、均衡、CDR、FEC 和 FLIT 都与 NRZ 时代不同。5.0 Retimer 的 pin-to-pin 方案即便物理兼容信号能力和调试接口也未必能满足 6.x。至少需要在设计阶段重新做插损预算、眼图仿真和功耗评估。6.2 可复用的工程检查清单开发一个带 PCIe 6.x / CXL 3.x Retimer 的项目时下面这份清单可以作为阶段评审依据原理图阶段确认 Retimer 供电能力、参考时钟来源、复位时序、配置引脚上下拉、I2C 地址和中断引脚。PCB 阶段确认高速差分走线阻抗、对称性、过孔数、连接器位置、电源去耦电容数量。固件阶段确认 Retimer 固件版本、加载方式、默认配置是否包含目标速率和 CXL 模式。调试验收检查两段链路的 LnkSta 是否达到目标速率和宽度确认均衡协商完成。长期压力运行高低温、电压 margin、内存带宽压力测试读取 AER 和 Retimer 误码计数。生产导入将配置固化到 Flash 或 eFuse生产脚本加入链路质量和误码阈值检查。6.3 下一步扩展方向PCIe 物理层速度仍在继续推进后续关注点至少有三个方向。第一PCIe 7.0 或更高版本的物理层调制变化会进一步影响 Retimer 设计和测试方法。第二CXL Switch 与 Retimer 的组合拓扑会越来越常见系统级延迟建模会成为性能优化的关键。第三Retimer 的遥测能力包括误码率上报、信号质量监测和预测性维护会让服务器运维人员提前发现链路劣化而不是等问题显现后才去抓日志。如果只记住一点那就是Retimer 是物理层设备但它直接影响协议层能否正常工作。在 PCIe 6.x / CXL 3.x 项目里硬件工程师和系统软件工程师都要把 Retimer 当作一个需要配置、需要检查、需要监测的器件来对待而不是一根“更粗的导线”。把链路训练检查和 Retimer 寄存器监视做成标准动作很多看似无解的高速不稳定问题会变得可追踪。
返回列表