2. Gen3 速率协商机制:Gen3(8.0 GT/s)与 Gen1/Gen2 的速率协商差异

PCIe 链路训练的核心目标之一是协商出双方支持的最高工作速率。Gen1(2.5 GT/s)和 Gen2(5.0 GT/s)采用相同的协商逻辑,而 Gen3(8.0 GT/s)引入了根本性的变化。理解这些差异是诊断 Gen3 链路训练失败的前提。

2.1 速率协商的基本流程回顾(Gen1/Gen2)

在 Gen1 和 Gen2 中,速率协商通过 Training Set(TS) 有序集完成,遵循“先降后升”原则:

  1. 初始协商:链路两端在复位后以 Gen1 速率(2.5 GT/s)开始发送 TS1/TS2 有序集。
  2. 速率标识:在 TS1 的 Symbol 4 中,通过 Speed Change 位(Bit 0~2)声明本端支持的最高速率。
  3. 升速请求:当链路进入 L0 状态后,若双方均支持更高速率,由 Upstream Port 发起 Speed Change 序列。
  4. 切换执行:发送端调整 Tx PLL,接收端重新锁定 CDR,完成速率切换。
关键点: Gen1/Gen2 的速率切换发生在 L0 状态 之后,且切换过程不改变链路状态机(LTSSM)的当前状态。

2.2 Gen3 速率协商的范式转变

Gen3 将速率协商从“L0 状态后的可选操作”变为“链路训练过程中的强制步骤”。其核心差异在于:

  • 协商时机提前:Gen3 速率协商在 Polling 状态 内完成,而非等到 L0。
  • 使用 Equalization(均衡)序列:Gen3 引入了完整的 Tx/Rx 均衡训练,以补偿 8.0 GT/s 下的信号损耗。
  • 数据速率与编码方式绑定:Gen3 使用 128b/130b 编码,而 Gen1/Gen2 使用 8b/10b 编码。速率协商必须同时完成编码方式的切换。
  • 恢复时钟依赖:Gen3 的 CDR(时钟数据恢复)对信号质量要求更高,均衡训练直接决定了 CDR 能否锁定。
常见误区: 许多工程师认为 Gen3 协商失败是“速率不匹配”,但实际上超过 60% 的 Gen3 训练失败案例根源在于 均衡训练失败 或 CDR 无法锁定,而非速率位协商错误。

2.3 Gen3 速率协商的详细步骤

Gen3 速率协商在 LTSSM 的 Polling.Speed 子状态中执行,具体流程如下表所示:

步骤 子状态 动作 Gen1/Gen2 对比
1 Polling.Active 以 Gen1 速率发送 TS1,携带 Speed Change = 011b(表示支持 Gen3) 相同,但 Gen1/Gen2 仅携带 001b 或 010b
2 Polling.Speed 发送端切换到 Gen3 速率(8.0 GT/s),发送 Modified TS1(EQ TS1) Gen1/Gen2 无此子状态
3 Polling.Equalization 执行 Phase 1~Phase 3 均衡训练,调整 Tx 预加重/去加重、Rx 均衡器系数 Gen1/Gen2 无均衡训练
4 Polling.Speed 均衡完成后,发送 TS2 确认,进入 L0 状态 Gen1/Gen2 直接发送 TS2 进入 L0

2.4 Gen3 均衡训练(Equalization)详解

Gen3 均衡训练分为三个相位,每个相位解决不同的信号完整性问题:

  • Phase 1:发送端(Tx)发送预设的均衡系数组合,接收端(Rx)测量信号质量并反馈 Preset 编号。
  • Phase 2:Rx 请求 Tx 微调 去加重(De-emphasis) 和 摆幅(Swing) 系数,通过 EQ TS1 中的系数更新字段传递。
  • Phase 3:Rx 进行本地均衡器(CTLE/DFE)自适应训练,完成后发送 Equalization Done 标志。
调试提示: 在逻辑分析仪上捕获 EQ TS1 有序集,观察 Preset Number 和 Requested Coefficient 字段是否在合理范围内变化。如果 Rx 持续请求极端系数(如 Preset 7 或 Preset 0),通常指示通道损耗过大或存在阻抗不连续。

2.5 Gen3 速率协商的时钟恢复挑战

Gen3 的 8.0 GT/s 数据速率对 CDR 提出了严苛要求:

  • 抖动容限降低:单位间隔(UI)从 Gen2 的 200 ps 缩短至 125 ps,CDR 的相位捕获窗口缩小。
  • 频率锁定时间:Gen3 要求 CDR 在 20 μs 内完成频率锁定,而 Gen2 允许 100 μs。
  • 数据转换密度:128b/130b 编码的最大连续相同位(Run Length)为 130 位,远大于 8b/10b 的 5 位,导致 CDR 相位更新间隔变长。

下图展示了 Gen3 速率协商过程中 CDR 锁定的关键时序窗口:

Gen3 速率协商与 CDR 锁定时序 Polling.Active Polling.Speed Polling.Equalization L0 CDR: Gen1 锁定 CDR: 重新锁定 Gen3 CDR: 跟踪均衡变化 CDR: 稳定锁定 CDR 锁定窗口:≤ 20 μs 均衡训练期间 CDR 必须保持锁定

2.6 Gen3 与 Gen1/Gen2 协商差异总结

下表从多个维度对比了 Gen3 与 Gen1/Gen2 的速率协商机制:

对比维度 Gen1 / Gen2 Gen3
协商发生状态 L0 状态(链路已建立) Polling 状态(链路建立过程中)
编码方式 8b/10b(20% 开销) 128b/130b(~1.5% 开销)
均衡训练 无(仅固定去加重) Phase 1~3 完整均衡训练
CDR 锁定要求 宽松(100 μs 内锁定) 严格(20 μs 内锁定,且需跟踪均衡变化)
速率切换信号 TS1 中的 Speed Change 位 EQ TS1 有序集 + 均衡系数协商
失败恢复机制 降速至 Gen1 重试 降速至 Gen1 后重新执行均衡训练

2.7 常见 Gen3 速率协商失败模式

基于上述差异,Gen3 速率协商失败通常表现为以下三种模式:

  1. Polling.Speed 超时:发送端切换到 Gen3 速率后,接收端 CDR 无法在 20 μs 内锁定,导致 LTSSM 回退到 Polling.Active 并降速至 Gen1。
  2. 均衡训练失败:Phase 2 或 Phase 3 中,Rx 无法找到有效的均衡系数组合,持续发送 Request Failed 标志,最终超时回退。
  3. 系数协商死锁:Tx 和 Rx 对均衡系数的理解不一致(例如 Preset 编号映射错误),导致双方陷入无限循环的系数请求/拒绝。
调试建议: 当遇到 Gen3 训练失败时,首先检查 Polling.Speed 子状态的停留时间。如果该状态持续时间超过 24 μs(典型超时阈值),则优先排查 CDR 锁定问题;如果 Polling.Equalization 状态反复进出,则优先排查通道损耗和均衡系数配置。