2. PCIe基础回顾

要理解PCIe均衡参数为什么需要配置、在什么时机配置、配置后由谁生效,必须先回到PCIe协议栈与链路训练的整体框架。均衡并不是一个孤立的寄存器操作,它嵌入在物理层的链路训练流程中,受LTSSM状态机驱动,并通过TS1/TS2有序集与对端协商。本节从分层结构、链路训练、LTSSM状态迁移三个层面,定位均衡所处的准确位置。

一、PCIe协议分层:均衡属于物理层职责

PCIe采用分层协议架构,自上而下分为事务层、数据链路层和物理层。事务层负责TLP的组装与路由,数据链路层负责DLLP、ACK/NAK与CRC校验,物理层负责字节条带、加扰、编码、串并转换以及链路训练。均衡(Equalization)完全属于物理层逻辑子层的职责,它不感知TLP内容,只关心模拟信道对高速信号造成的损耗与码间干扰。

  • 事务层:生成读写请求、配置空间访问、消息事务,与均衡无直接交互。
  • 数据链路层:保证TLP可靠传输,提供流控信用,不参与均衡协商。
  • 物理层逻辑子层:LTSSM、有序集、链路训练、均衡协商、速率切换。
  • 物理层电气子层:发送端FFE、接收端CTLE/DFE、时钟恢复、信号检测。

因此,当我们讨论“均衡参数配置”时,实际是在配置物理层发送端与接收端的模拟前端,并通过链路训练协议让两端达成一致。任何试图在事务层或驱动层直接“调均衡”的做法,都绕过了协议规定的协商路径,容易导致链路不稳定。

二、链路训练过程:从Detect到L0的完整路径

链路训练是PCIe链路建立的核心过程,由LTSSM驱动,主要完成位锁定、符号锁定、通道对齐、极性反转、速率协商和均衡协商。其典型顺序如下:

  1. Detect:检测接收端是否存在,确认对端设备已上电。
  2. Polling:通过TS1/TS2有序集交换,完成位锁定与符号锁定。
  3. Configuration:确定链路宽度、通道编号、极性反转,完成通道对齐。
  4. Recovery:在速率切换或均衡协商时进入,重新建立位/符号锁定。
  5. L0:链路进入正常工作状态,TLP/DLLP开始传输。

均衡协商主要发生在Recovery阶段,尤其是从Gen3及以上速率开始。Gen1/Gen2使用固定去加重,不需要复杂均衡;Gen3引入发送端FFE和接收端CTLE/DFE,必须通过TS1/TS2中的EQ TS2有序集交换预设值(Preset)和系数,完成握手后才能进入L0。

关键点:均衡协商不是一次性的,链路在速率切换、错误恢复、重新训练时都可能重新进入Recovery并再次协商均衡参数。

三、LTSSM状态机与均衡的位置

LTSSM是物理层的核心状态机,包含Detect、Polling、Configuration、Recovery、L0、L1、L2、Disabled、Hot Reset、Loopback等状态。均衡协商嵌入在Recovery状态中,具体表现为Recovery.RcvrLock、Recovery.RcvrCfg、Recovery.Speed、Recovery.Equalization等子状态。

在Gen3及以上速率下,Recovery.Equalization阶段会经历多个子阶段:发送端发送EQ TS2,接收端评估信道并反馈系数调整请求,双方迭代直到收敛。若收敛失败,链路可能降速或停留在Recovery,表现为链路训练失败或反复重训。

PCIe链路训练与LTSSM中均衡的位置 事务层 / 数据链路层 TLP、DLLP、流控、ACK/NAK —— 不参与均衡协商 物理层逻辑子层(LTSSM) Detect 检测对端 Polling 位/符号锁定 Configuration 宽度/通道对齐 Recovery 速率切换 + 均衡协商 L0 正常工作 Recovery 子状态展开 RcvrLock RcvrCfg Equalization Speed 物理层电气子层 发送端 FFE(Preset / 系数) · 接收端 CTLE / DFE · 时钟恢复 · 信号检测 均衡协商发生在 Recovery.Equalization Gen3 及以上速率

四、均衡在链路训练中的实际场景

以一台服务器插入Gen4 NVMe SSD为例。上电后,链路先以Gen1完成Detect、Polling、Configuration,进入L0。随后系统发起速率切换,链路进入Recovery.Speed,再进入Recovery.Equalization。此时两端通过TS1/TS2交换均衡预设值,发送端调整FFE系数,接收端调整CTLE/DFE,迭代评估眼图与误码率。若收敛成功,链路以Gen4进入L0;若失败,可能降速到Gen3或反复重训。

常见日志中会出现类似信息:

ltssm: RECOVERY.EQUALIZATION
eq: preset=4, fs=7, lf=15
eq: request preset=5, fs=6, lf=18
link: speed change to Gen4 success
link: L0 reached

这些日志说明均衡协商正在Recovery.Equalization中进行,参数通过有序集交换,最终由硬件自动写入发送端与接收端模拟前端。

五、常见误区与复盘要点

误区 正确理解
均衡参数由驱动直接配置 均衡协商由物理层LTSSM自动完成,驱动通常只能读取状态或触发重训。
Gen1/Gen2也需要复杂均衡 Gen1/Gen2使用固定去加重,Gen3及以上才引入FFE/CTLE/DFE协商。
链路进入L0后均衡不再变化 速率切换、错误恢复、热复位都可能重新进入Recovery并重新协商均衡。
均衡失败只影响信号质量 均衡失败会直接导致链路降速、训练失败或反复重训,影响设备可用性。
复盘建议:遇到链路训练问题时,先确认LTSSM停留在哪个状态,再判断是否进入Recovery.Equalization,最后结合均衡预设值与信道损耗评估是否需要调整发送端FFE或接收端CTLE/DFE。

总结来看,PCIe均衡位于物理层逻辑子层的Recovery.Equalization阶段,由LTSSM驱动,通过TS1/TS2有序集协商,最终作用于电气子层的发送端FFE与接收端CTLE/DFE。理解这一位置关系,是后续进行均衡参数配置与优化的前提。