2. Gen3链路训练核心机制:Gen3特有的均衡(Equalization)过程、相位1/2/3详解、Preset与Coefficient概念

Gen3(PCIe 3.0)将信号速率提升至 8 GT/s,采用 128b/130b 编码。在此速率下,信号经过PCB走线、连接器、过孔等传输介质后,会产生严重的码间干扰(ISI)和信号衰减。为了在接收端正确恢复数据,Gen3 引入了 链路均衡(Equalization) 机制,这是 Gen3 链路训练区别于 Gen1/Gen2 的核心所在。

核心要点: Gen3 均衡不是一次性完成的,而是通过 三个相位(Phase 1/2/3) 的握手协商,动态调整发送端的去加重(De-emphasis)和接收端的连续时间线性均衡器(CTLE)与判决反馈均衡器(DFE),最终找到最优的传输参数组合。

2.1 均衡(Equalization)的必要性

在 8 GT/s 速率下,信号的眼图在未均衡时几乎闭合。均衡的作用是通过补偿信道的高频损耗,打开眼图,降低误码率(BER)。Gen3 均衡分为两部分:

  • 发送端均衡(Tx Equalization): 通过调整发送信号的幅度和去加重程度,预补偿信道的高频衰减。由 Preset 和 Coefficient 控制。
  • 接收端均衡(Rx Equalization): 接收端通过 CTLE 和 DFE 对收到的信号进行再均衡,消除 ISI。接收端会向发送端反馈请求,要求调整发送参数。
调试提示: 在驱动调试中,如果链路训练卡在 Gen3 均衡阶段(通常表现为 LTSSM 状态在 Recovery 或 Equalization 相位循环),首要怀疑对象是 Preset 选择不当 或 接收端 DFE 收敛失败。
Gen3 均衡系统架构 Gen3 均衡系统架构 发送端 (Tx) Preset / Coefficient 去加重 (De-emphasis) FFE 滤波器 传输信道 PCB 走线 / 连接器 / 过孔 接收端 (Rx) CTLE + DFE 眼图监视器 反馈请求 反馈路径 (Coefficient 更新请求) 说明:发送端通过 FFE 预加重,接收端通过 CTLE+DFE 后均衡。接收端根据眼图监视结果,通过反馈路径请求发送端调整 Preset/Coefficient。

2.2 均衡的三个相位(Phase 1/2/3)详解

Gen3 均衡过程在 LTSSM 的 Recovery 状态或 Equalization 状态下进行,分为三个连续的相位。每个相位都有明确的目标和握手协议。

相位 名称 目标 关键动作 持续时间
Phase 1 Preset 交换 交换发送端 Preset 能力 Upstream/Downstream 各自发送支持的 Preset 列表;选择共同支持的 Preset ~ 几微秒
Phase 2 Tx 均衡 调整发送端 Coefficient 接收端发送 Coefficient 请求(C-1, C0, C+1);发送端调整后发送训练序列(TS1/TS2) ~ 几十微秒
Phase 3 Rx 均衡 接收端 DFE 收敛 接收端调整 CTLE/DFE;发送端发送特定数据模式协助收敛 ~ 几百微秒
常见调试陷阱: Phase 2 和 Phase 3 之间没有明确的硬件分隔标志。驱动开发者需要根据 LTSSM 状态寄存器的 Equalization Phase 字段(通常位于 PCIe 扩展能力结构中的 Link Control 2 寄存器)来判断当前所处的相位。误判相位会导致 Coefficient 更新时序错误。
Gen3 均衡三相位流程 Gen3 均衡三相位流程 Phase 1: Preset 交换 交换 Preset 能力 选择共同 Preset Phase 2: Tx 均衡 接收端请求 Coefficient 发送端调整 FFE 抽头 Phase 3: Rx 均衡 CTLE/DFE 收敛 眼图监视器验证 各相位关键寄存器与信号 • Phase 1: Link Control 2 寄存器 Preset 字段 • Phase 2: Coefficient 更新通过 TS1/TS2 有序集 中的 Coefficient 字段传递 • Phase 3: DFE 收敛状态在 Receiver Capability 结构中的 DFE Status 位指示 调试要点: 1. Phase 1 失败:Preset 不兼容 2. Phase 2 失败:Coefficient 更新超时 3. Phase 3 失败:DFE 无法收敛 4. 任何相位失败都会导致链路降速至 Gen2

2.3 Preset 与 Coefficient 概念

Preset 和 Coefficient 是 Gen3 均衡中控制发送端信号质量的两个核心参数。它们共同决定了发送端 FFE(Feed-Forward Equalizer)滤波器的抽头系数。

2.3.1 Preset(预置)

Preset 是一组预定义的 FFE 抽头系数组合,由 PCIe 规范定义。发送端和接收端在 Phase 1 中交换各自支持的 Preset 列表,并选择一个双方都支持的 Preset 作为初始均衡参数。Preset 提供了快速启动均衡的基准点。

  • 定义: Preset 是 8 种预定义的 FFE 系数组合(Preset 0 ~ Preset 7),每种 Preset 对应一组固定的 C-1、C0、C+1 值。
  • 作用: 作为均衡的起点,避免从零开始搜索,加快训练速度。
  • 选择规则: 接收端根据自身能力和信道特性,从发送端支持的 Preset 列表中选择一个。通常选择去加重程度适中的 Preset(如 Preset 4 或 Preset 5)。
Preset 编号 C-1 (Pre-cursor) C0 (Main cursor) C+1 (Post-cursor) 去加重程度
0 0.00 1.00 0.00 无
1 0.00 0.85 0.15 轻度
2 0.00 0.70 0.30 中度
3 0.00 0.55 0.45 重度
4 0.05 0.80 0.15 轻度 + 预加重
5 0.05 0.65 0.30 中度 + 预加重
6 0.10 0.70 0.20 中度 + 预加重
7 0.15 0.60 0.25 重度 + 预加重
调试技巧: 如果链路在 Gen3 均衡时反复失败,可以尝试在驱动初始化阶段强制指定一个 Preset(例如 Preset 4),跳过 Phase 1 的协商过程,直接进入 Phase 2。这有助于隔离问题是由 Preset 协商失败还是后续 Coefficient 调整失败引起的。

2.3.2 Coefficient(系数)

Coefficient 是 FFE 滤波器的三个抽头系数:C-1(预光标)、C0(主光标)、C+1(后光标)。在 Phase 2 中,接收端通过发送训练序列(TS1/TS2)中的 Coefficient 字段,向发送端请求调整这些系数。

  • C-1 (Pre-cursor): 控制前一个比特对当前比特的影响。正值表示预加重,用于补偿高频衰减。
  • C0 (Main cursor): 当前比特的幅度。通常最大,是信号的主要分量。
  • C+1 (Post-cursor): 控制后一个比特对当前比特的影响。正值表示去加重,用于减小 ISI。

Coefficient 的调整遵循以下规则:

  1. 接收端通过 TS1 有序集中的 Coefficient 字段发送请求(Request)。
  2. 发送端收到请求后,在下一个 TS2 有序集中回复当前实际使用的 Coefficient 值(Current)。
  3. 如果接收端对调整后的结果满意,则发送 Preset Done 或 Coefficient Done 标志,结束 Phase 2。
驱动实现注意: 在驱动代码中,Coefficient 的更新不是通过 MMIO 寄存器直接写入的,而是通过 发送特定格式的 TS1/TS2 有序集 来完成的。驱动开发者需要操作 LTSSM 的控制寄存器,使其进入 Recovery 状态,并在该状态下发送带有 Coefficient 请求的 TS1 序列。这是 Gen3 驱动开发中最容易出错的地方之一。
Coefficient 更新握手流程 Coefficient 更新握手流程 接收端 (Rx) 发送 TS1 (Request) 发送端 (Tx) 回复 TS2 (Current) TS1: Coefficient Request (C-1, C0, C+1) TS2: Coefficient Current (C-1, C0, C+1) 说明:Coefficient 更新是一个闭环过程。接收端通过 TS1 发送请求,发送端通过 TS2 回复当前值。 如果接收端对当前值不满意,会继续发送新的 TS1 请求,直到达到最优值或超时。 超时条件:如果接收端在 24ms 内未收到满意的 TS2 回复,链路训练失败,降速至 Gen2。

2.4 均衡失败与降速机制

如果 Gen3 均衡在任何一个相位失败(例如 Phase 2 中 Coefficient 无法收敛,或 Phase 3 中 DFE 无法锁定),链路不会无限重试。PCIe 规范定义了明确的降速策略:

  1. 重试次数限制: 每个相位都有最大重试次数(通常为 24 次)。超过次数后,该相位被视为失败。
  2. 降速至 Gen2: 一旦 Gen3 均衡失败,LTSSM 会回退到 Recovery 状态,然后尝试以 Gen2 速率(5 GT/s)重新训练。此时链路将工作在 Gen2 速率,不再尝试 Gen3。
  3. 驱动通知: 驱动可以通过检查 Link Status 寄存器中的 Link Speed 字段(若为 0x02 表示 Gen2)以及 Equalization Complete 位(若为 0 表示未完成)来检测均衡失败。
调试建议: 当遇到链路降速至 Gen2 时,不要立即怀疑硬件损坏。首先检查 PCB 走线长度是否超过 Gen3 的推荐长度(通常 < 15 英寸),以及连接器是否接触良好。其次,在驱动中打印出 Phase 1 协商的 Preset 值和 Phase 2 最终的 Coefficient 值,与规范中的推荐值进行对比,往往能快速定位问题。