4. Preset选择与链路训练:LTSSM中Preset的协商与切换流程

在PCIe Gen5链路训练过程中,Preset的选择与切换是链路训练状态机(LTSSM)的核心动作之一。Preset本质上是一组预定义的发送端(Tx)均衡参数(包括去加重、摆幅、前馈均衡FFE抽头系数),用于在链路建立初期快速补偿信道损耗,确保接收端(Rx)能够可靠地检测到信号。本节将深入剖析LTSSM各状态中Preset的协商机制与切换流程。

4.1 LTSSM与Preset的关联阶段

Preset的协商并非在LTSSM的所有状态中都发生,而是集中在检测(Detect)、轮询(Polling)、配置(Configuration)以及恢复(Recovery)等关键阶段。下表总结了各主要状态中Preset的角色与行为:

LTSSM状态 Preset行为 关键动作
Detect 无Preset协商 检测接收端是否存在,仅发送最低功耗的电气空闲信号
Polling 初始Preset加载 发送端加载默认Preset(通常为P0或P1),开始发送训练序列TS1/TS2
Configuration Preset协商与锁定 通过TS1/TS2中的Preset字段进行双向协商,确定链路双方均支持的公共Preset
Recovery Preset重协商 当误码率过高或链路退化时,重新进入Preset协商流程,切换至更优的均衡配置
L0/L0s/L1 Preset保持 链路稳定后,Preset保持不变,除非进入Recovery状态
实战提示:在Gen5链路调试中,如果链路卡在Polling状态无法进入Configuration,通常是因为对端设备无法识别当前发送端使用的默认Preset。此时应检查双方设备的Preset支持能力,尤其是Gen5新增的P8~P10预设。

4.2 Preset协商的详细流程

Preset的协商主要发生在Configuration状态,其流程可以分解为以下四个步骤:

  1. 发送Preset能力声明:链路两端在发送TS1训练序列时,在TS1的Preset字段中填入本端支持的Preset集合(以位图形式表示)。
  2. 接收与解析:接收端解析对端发送的TS1,提取Preset位图,并与本端支持的Preset集合进行交集运算。
  3. 公共Preset选择:选择交集中索引号最小的Preset作为公共Preset(Common Preset)。例如,若本端支持P0~P5,对端支持P2~P8,则公共Preset为P2。
  4. 锁定与确认:双方在后续的TS2训练序列中确认该公共Preset,并完成均衡参数的加载。链路进入L0状态后,该Preset生效。
关键概念:公共Preset的选择遵循“最小索引优先”原则。这意味着P0(通常为全摆幅、无去加重)具有最高优先级,因为它代表了最基础的信号完整性配置。只有在P0无法满足链路质量时,才会协商切换到更高索引的Preset。

4.3 Preset切换的触发条件与状态机

Preset的切换并非仅在Configuration状态发生。在链路进入L0状态后,如果接收端检测到误码率超过阈值或信号质量恶化,会触发Recovery状态,并在其中重新进行Preset协商。下图展示了Preset切换的完整状态机流程:

Preset切换状态机流程图 Preset切换状态机流程图 L0 稳定状态 误码率超阈值 Recovery 状态 Preset 重协商 新 Preset 生效 持续监测 触发 进入 协商完成 返回L0 说明: Preset切换通常需要 经历Recovery状态, 而非在L0中直接切换。 切换过程约需数微秒。

4.4 Preset切换过程中的抖动抑制策略

在Preset切换过程中,发送端的均衡参数会发生瞬态变化,这可能导致输出信号的相位和幅度出现短暂的不稳定,从而引入额外的确定性抖动(DJ)。为了抑制这种切换抖动,PCIe Gen5规范定义了以下策略:

  • 渐进式切换(Gradual Transition):发送端在切换Preset时,不允许瞬间跳变,而是要求在多个UI(单位间隔)内逐步调整FFE抽头系数,通常要求在32个UI内完成切换。
  • 切换静默期(Switch Quiet Period):在Preset切换完成后的8个UI内,接收端不进行数据采样,以避免采样到过渡期的抖动信号。
  • 去加重平滑(De-emphasis Smoothing):对于涉及去加重变化的Preset切换,要求发送端在切换过程中保持去加重值的单调变化,避免出现过冲或下冲。
故障定位警告:在实际测试中,如果发现链路在Preset切换后出现大量误码,且误码呈现突发性(Burst Error),通常是因为发送端未遵循渐进式切换策略,导致接收端CDR(时钟数据恢复)失锁。此时应使用示波器观察切换时刻的眼图,检查是否存在明显的相位跳变。

4.5 Gen5新增Preset与兼容性考虑

PCIe Gen5在Gen4的P0~P7基础上,新增了P8、P9、P10三个Preset,专门用于应对更高频率下的信道损耗。下表列出了Gen5所有Preset的关键参数对比:

Preset 摆幅(mV) 去加重(dB) FFE抽头数 适用场景
P0 800~1200 0 3 短距离、低损耗信道
P1 800~1200 -3.5 3 中等损耗信道
P2 800~1200 -6.0 3 高损耗信道
P3 400~600 0 3 低功耗、短距离
P4 400~600 -3.5 3 低功耗、中等损耗
P5 400~600 -6.0 3 低功耗、高损耗
P6 200~400 0 3 超低功耗、极短距离
P7 200~400 -3.5 3 超低功耗、中等损耗
P8 800~1200 -2.0 5 Gen5长距离、高损耗信道
P9 800~1200 -4.0 5 Gen5极高损耗信道
P10 400~600 -4.0 5 Gen5低功耗、高损耗信道
兼容性要点:Gen5设备必须支持P0~P7,可选支持P8~P10。当Gen5设备与Gen4设备互连时,双方只能协商P0~P7中的公共Preset,P8~P10不会被使用。在链路训练时,如果Gen5设备发现对端不支持P8~P10,会自动降级到P0~P7范围内进行协商。

4.6 实战案例:Preset协商失败定位

在某Gen5链路调试中,发现链路反复在Polling和Configuration状态之间循环,无法进入L0。通过分析训练序列日志,发现以下现象:

  • 发送端(Root Complex)在TS1中声明支持P0~P10。
  • 接收端(Endpoint)在TS1中声明支持P0~P5。
  • 根据最小索引优先原则,公共Preset应为P0。
  • 但接收端在收到P0配置的信号后,始终无法完成位锁定,导致链路回退到Polling。

进一步使用示波器测量发现,接收端实际信道损耗高达28dB@32GHz,而P0的均衡能力仅能补偿约15dB的损耗。最终定位为接收端Preset能力声明错误——该Endpoint实际需要P2或更高索引的Preset才能正常工作,但其固件错误地声明了P0支持。修正固件后,链路成功协商到P2并稳定运行。

定位技巧:当遇到Preset协商失败时,可以通过强制指定Preset(在调试模式下)来快速验证链路是否能在特定Preset下工作。如果强制指定P2后链路正常,则说明问题出在Preset协商逻辑而非物理层硬件。