2. PCIe基础回顾

PCIe 信号训练并不是一个孤立的“调均衡器”动作,它建立在 PCIe 协议分层、链路拓扑、LTSSM 状态机以及速率演进这四块基础之上。理解这些基础,才能明白为什么 Gen1/Gen2 几乎“上电即通”,而 Gen4/Gen5 却需要 TX FIR、RX CTLE/DFE、参考时钟、通道损耗等多方协同。本节把与信号训练强相关的 PCIe 基础串成一条主线。

一、PCIe 协议分层:训练发生在物理层

PCIe 采用经典的三层结构:事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。事务层负责 TLP 的组装与路由,数据链路层负责 DLLP、ACK/NAK 与 CRC 保证可靠传输,物理层负责把包变成差分电信号并完成链路建立。信号训练完全属于物理层职责,具体落在 PHY 的 PCS(物理编码子层)与 PMA(物理媒介附加子层)中。

PCS 负责 8b/10b(Gen1/Gen2)或 128b/130b(Gen3 及以上)编解码、加扰、有序集(Ordered Set)生成与解析;PMA 负责串行/解串(SerDes)、发送均衡、接收均衡、时钟恢复(CDR)。LTSSM 状态机位于 PCS 逻辑中,通过发送和接收 TS1/TS2 有序集来协商速率、位宽、均衡参数。因此调优时看到的“训练失败”,往往要区分是 PCS 层协商失败,还是 PMA 层信号质量不足。

二、链路拓扑:训练对象是 Link 而非 Lane

PCIe 链路以 Lane 为基本单位,以 Link 为逻辑单位。常见拓扑包括 Root Complex 到 Endpoint 的点对点链路、Switch 的上行/下行端口、以及通过 Retimer 扩展的长距离链路。每条 Link 由 1、2、4、8、16 条 Lane 组成,训练时先按最大能力协商,再逐 Lane 完成位锁定、符号锁定和均衡。

拓扑对训练的影响非常直接:经过 Switch 或 Retimer 时,每一段链路独立训练,Retimer 会参与转发 TS1/TS2 并可能修改均衡请求;参考时钟若为独立扩频(SRNS)或公共时钟(Common Clock),会影响 CDR 与抖动预算。因此排查训练问题时,必须先画出“从 RC 到 EP 经过哪些器件、每段链路速率与损耗是多少”。

PCIe 分层、拓扑与 LTSSM 训练关系图 协议分层 事务层 TL TLP 组装 / 路由 数据链路层 DLL DLLP / ACK-NAK / CRC 物理层 PHY PCS:编解码 / 加扰 / 有序集 PMA:SerDes / TX EQ / RX EQ CDR:时钟数据恢复 LTSSM 位于 PCS 链路拓扑 RC Switch EP Link Link Retimer / Redriver 扩展长链路 每段 Link 独立训练,转发 TS1/TS2 Lane 宽度:x1 / x2 / x4 / x8 / x16 先协商宽度,再逐 Lane 位锁定 参考时钟:Common / SRNS LTSSM 关键状态 Detect → Polling Configuration(协商宽度/速率) Recovery(速率切换/均衡) L0(正常工作) L0p / L1 / L2(低功耗) Recovery.Equalization(Gen3+) 速率越高 → 通道损耗与抖动预算越紧 → LTSSM 在 Recovery 中触发 TX/RX 均衡协商 → 训练参数决定链路能否稳定在目标速率

三、LTSSM 状态机:训练流程的“总调度”

LTSSM(Link Training and Status State Machine)是物理层的核心状态机,决定链路从复位到工作的全过程。与信号训练最相关的状态包括:

  • Detect:检测对端是否存在接收端,判断链路是否可建立。
  • Polling:通过 TS1/TS2 有序集完成位锁定、符号锁定,确认双方支持速率。
  • Configuration:协商 Link Number、Lane Number 和链路宽度,确定 x1/x4/x8/x16。
  • Recovery:速率切换、重新训练、错误恢复;Gen3 及以上在此进入 Equalization 子状态。
  • L0:链路正常工作,TLP/DLLP 开始传输。

Gen3 及以上在 Recovery.Equalization 中分 Phase 0~Phase 3:Phase 0 交换双方均衡能力;Phase 1 协商 TX 预设(Preset)与 RX 预设提示;Phase 2 发送者调整 TX FIR,接收者评估;Phase 3 确认最终参数并进入 L0。若任一 Phase 超时或误码率不达标,链路会降速或反复重训。

四、速率演进与信号训练的关系

PCIe 每代速率翻倍,但通道损耗随频率上升而急剧增加,导致“速率越高,训练越难”。下表对比各代关键差异:

代际 单 Lane 速率 编码 均衡机制 训练重点
Gen1 2.5 GT/s 8b/10b 无 位锁定、符号锁定
Gen2 5.0 GT/s 8b/10b 无(可选 TX 去加重) 速率协商、去加重
Gen3 8.0 GT/s 128b/130b TX FIR + RX CTLE/DFE Equalization Phase 0-3
Gen4 16.0 GT/s 128b/130b 增强 TX FIR + RX DFE Preset 协商、通道损耗补偿
Gen5 32.0 GT/s 128b/130b TX FIR + RX CTLE/DFE + 前向纠错 抖动、串扰、FEC 与均衡联合优化

五、案例与误区:从“训练失败”定位到基础问题

典型场景:某 Gen4 x8 链路在 Configuration 阶段只能协商到 x4,且反复进入 Recovery。排查发现:

lspci -vvv | grep -i "LnkCap\|LnkSta"
LnkCap: Port #0, Speed 16GT/s, Width x8
LnkSta: Speed 16GT/s, Width x4 (downgraded)

dmesg | grep -i pcie
pcieport 0000:00:01.0: AER: Corrected error received
pcieport 0000:00:01.0: PCIe Bus Error: severity=Corrected, type=Physical Layer

进一步检查发现:其中 4 条 Lane 的 AC 耦合电容容值不一致,且参考时钟走线过长导致抖动超标。更换电容并优化时钟后,链路稳定在 x8。

常见误区:

  • 只关注 TX 均衡,忽略 RX CTLE/DFE 与参考时钟质量。
  • 把 LTSSM 反复 Recovery 简单归因于“信号差”,而未检查 Preset 协商是否匹配。
  • 忽略 Retimer 对 TS1/TS2 的转发与修改,导致均衡参数在两端不一致。
  • 在 Gen4/Gen5 中仍沿用 Gen3 的通道损耗预算,未重新评估插损与串扰。

复盘要点:信号训练问题应沿着“协议分层 → 链路拓扑 → LTSSM 状态 → 速率与均衡参数”这条链路逐层定位。先确认物理层是否完成位锁定与符号锁定,再确认 Configuration 是否协商到目标宽度,最后检查 Recovery.Equalization 中的 Preset 与均衡参数是否收敛。只有把基础打牢,后续的 TX FIR、RX CTLE/DFE 调优才有明确方向。