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状态 |
4.2 Preset协商的详细流程
Preset的协商主要发生在Configuration状态,其流程可以分解为以下四个步骤:
- 发送Preset能力声明:链路两端在发送TS1训练序列时,在TS1的Preset字段中填入本端支持的Preset集合(以位图形式表示)。
- 接收与解析:接收端解析对端发送的TS1,提取Preset位图,并与本端支持的Preset集合进行交集运算。
- 公共Preset选择:选择交集中索引号最小的Preset作为公共Preset(Common Preset)。例如,若本端支持P0~P5,对端支持P2~P8,则公共Preset为P2。
- 锁定与确认:双方在后续的TS2训练序列中确认该公共Preset,并完成均衡参数的加载。链路进入L0状态后,该Preset生效。
4.3 Preset切换的触发条件与状态机
Preset的切换并非仅在Configuration状态发生。在链路进入L0状态后,如果接收端检测到误码率超过阈值或信号质量恶化,会触发Recovery状态,并在其中重新进行Preset协商。下图展示了Preset切换的完整状态机流程:
4.4 Preset切换过程中的抖动抑制策略
在Preset切换过程中,发送端的均衡参数会发生瞬态变化,这可能导致输出信号的相位和幅度出现短暂的不稳定,从而引入额外的确定性抖动(DJ)。为了抑制这种切换抖动,PCIe Gen5规范定义了以下策略:
- 渐进式切换(Gradual Transition):发送端在切换Preset时,不允许瞬间跳变,而是要求在多个UI(单位间隔)内逐步调整FFE抽头系数,通常要求在32个UI内完成切换。
- 切换静默期(Switch Quiet Period):在Preset切换完成后的8个UI内,接收端不进行数据采样,以避免采样到过渡期的抖动信号。
- 去加重平滑(De-emphasis Smoothing):对于涉及去加重变化的Preset切换,要求发送端在切换过程中保持去加重值的单调变化,避免出现过冲或下冲。
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低功耗、高损耗信道 |
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并稳定运行。