4. Gen3速率协商入口:从Gen2速率进入Recovery状态,发起速率变更请求

Gen3(8.0 GT/s)速率协商并非从链路初始的Detect状态直接跳转,而是遵循“先建连、后提速”的策略。链路首先在Gen1(2.5 GT/s)或Gen2(5.0 GT/s)完成完整的链路训练与初始化(L0状态),然后通过进入Recovery状态,在Recovery状态内发起速率变更请求,最终完成向Gen3速率的跃迁。本章聚焦于这一入口阶段的协议行为、时序要求及调试要点。

4.1 速率协商的总体流程

从Gen2 L0状态到Gen3速率协商的完整路径可分为三个关键阶段:

  1. 触发条件:上游端口(Upstream Port)或下游端口(Downstream Port)检测到需要提升链路带宽(如数据吞吐量需求、配置寄存器写入),决定发起速率变更。
  2. 进入Recovery.RcvrLock:发送端通过发送EIOS(Electrical Idle Ordered Set)序列使链路进入电气空闲,随后发送TS1 Ordered Set并携带速率标识符(Speed Identifier),引导接收端进入Recovery状态。
  3. 速率变更协商:在Recovery状态下,双方通过交换TS1/TS2 Ordered Set中的速率协商字段,确认目标速率(Gen3),并完成时钟恢复参数的重新训练。
关键概念: Gen3速率协商必须在Recovery状态内完成,不允许从L0直接跳变到Gen3速率。Recovery状态提供了重新训练时钟数据恢复(CDR)和均衡参数的“安全窗口”。

4.2 从Gen2 L0进入Recovery的触发机制

根据PCIe Base Spec,进入Recovery的触发条件分为两类:

触发类型 触发源 典型场景 协议行为
软件触发 Device Control Register中的“Target Link Speed”字段被改写 操作系统或设备驱动主动请求更高速率 端口发送EIOS → 进入Recovery.RcvrLock → 发起速率变更
硬件自动触发 链路带宽不足或错误率过高(如CRC错误计数超阈值) 链路降速后自动尝试恢复高速率 端口直接发送TS1(带Speed Change bit)进入Recovery
链路训练状态机(LTSSM)自主决策 LTSSM在L0状态下检测到“速率变更请求”内部信号 热复位或链路重新均衡 先进入Recovery.RcvrLock,再执行速率变更
调试提示: 在逻辑分析仪或协议分析仪中,捕获到从L0状态直接跳转到Recovery.RcvrLock的序列时,应重点检查EIOS的发送时序以及TS1中Speed Identifier字段的值。如果Speed Identifier未正确设置为0x2(表示Gen3),则后续速率协商将失败。

4.3 Recovery状态内的速率变更请求协议

进入Recovery.RcvrLock后,速率变更请求通过TS1 Ordered Set中的特定比特位进行传递。TS1的格式中,第7个Symbol(Symbol 7)的低4位用于编码速率标识符(Speed Identifier):

  • 0x1:表示请求Gen1速率(2.5 GT/s)
  • 0x2:表示请求Gen2速率(5.0 GT/s)
  • 0x4:表示请求Gen3速率(8.0 GT/s)
  • 0x8:保留(用于未来速率)

当发送端希望从Gen2升级到Gen3时,会在TS1的Symbol 7中写入0x4。接收端在Recovery.RcvrLock状态下成功锁定并解码TS1后,如果自身支持Gen3速率,则会在回应的TS1中同样设置Speed Identifier为0x4,表示同意速率变更。

常见失败原因: 如果接收端不支持Gen3速率(例如老旧设备),或者接收端CDR无法在Gen3速率下锁定,则会在回应的TS1中保持原速率标识符(0x2),导致速率协商失败,链路将回退到Gen2或进入Recovery.RcvrFail状态。

4.4 时钟恢复与速率变更的关联

Gen3速率(8.0 GT/s)相对于Gen2(5.0 GT/s)对时钟恢复提出了更严格的要求:

  • 数据速率翻倍:从5.0 GT/s提升到8.0 GT/s,单位间隔(UI)从200 ps缩短到125 ps。
  • CDR锁定时间要求:在Recovery.RcvrLock状态下,接收端CDR必须在2 µs内完成对输入数据的频率和相位锁定,否则LTSSM会超时并进入Recovery.RcvrFail。
  • 参考时钟抖动:Gen3要求参考时钟的均方根抖动(RMS Jitter)小于1 ps(典型值),而Gen2允许2 ps。时钟恢复电路必须适应更严格的抖动容限。

下图展示了从Gen2 L0进入Recovery并完成Gen3速率协商的完整状态机流程:

Gen3速率协商入口:从Gen2 L0进入Recovery状态 Gen2 L0 (5.0 GT/s) 触发速率变更请求 发送EIOS进入电气空闲 Recovery.RcvrLock TS1交换 (Speed=0x4) Gen3 L0 (8.0 GT/s) 触发条件示例 • 软件写Target Link Speed • 硬件错误计数器超阈值 • LTSSM自主决策 CDR锁定要求 • 锁定时间 < 2 µs • 抖动容限 < 1 ps RMS

4.5 速率变更请求的时序参数

PCIe Base Spec对Recovery状态内的速率变更时序有严格定义,以下是关键参数:

参数名称 符号 最小值 最大值 说明
EIOS发送持续时间 T_EIOS 16 UI — 确保接收端检测到电气空闲
Recovery.RcvrLock超时 T_RCVRLOCK — 2 µs CDR必须在此时限内锁定
TS1交换次数 N_TS1 2 16 双方至少交换2次TS1才能确认速率
速率变更完成时间 T_SPEED_CHANGE — 1 µs 从确认速率到实际切换完成
调试要点: 在示波器或协议分析仪上测量T_RCVRLOCK时,应从最后一个EIOS结束时刻开始计时,到接收端输出第一个有效TS1 Ordered Set为止。如果超过2 µs仍未锁定,则链路会进入Recovery.RcvrFail,并可能降速到Gen1或Gen2。

4.6 常见调试场景与分析方法

在实际调试中,Gen3速率协商入口阶段常遇到以下问题:

  • 场景1:链路无法进入Recovery状态
    • 现象:LTSSM卡在L0状态,不发送EIOS。
    • 分析:检查Device Control Register中的“Target Link Speed”是否已正确设置;检查硬件触发信号(如错误计数器)是否达到阈值。
  • 场景2:Recovery.RcvrLock超时
    • 现象:链路进入Recovery.RcvrLock后,在2 µs内未完成CDR锁定,跳转到Recovery.RcvrFail。
    • 分析:测量参考时钟抖动是否超标;检查接收端CDR带宽设置是否适配Gen3速率;检查PCB走线损耗是否过大导致信号质量下降。
  • 场景3:TS1中Speed Identifier不匹配
    • 现象:发送端设置Speed=0x4,但接收端回应Speed=0x2。
    • 分析:确认接收端固件或硬件是否支持Gen3速率;检查链路训练状态机配置寄存器中的“Supported Link Speeds”字段。
实用工具: 使用PCIe协议分析仪(如Teledyne LeCroy、Keysight)的“LTSSM Trace”功能,可以直观地看到状态跳转序列。重点关注从L0到Recovery.RcvrLock的跳转时刻,以及TS1中Speed Identifier字段的变化。如果看到Recovery.RcvrLock后立即跳转到Recovery.RcvrFail,则优先排查CDR锁定时间。

4.7 本章小结

Gen3速率协商的入口是从Gen2 L0状态通过触发条件进入Recovery状态,并在Recovery.RcvrLock内通过TS1 Ordered Set中的Speed Identifier字段发起速率变更请求。时钟恢复(CDR)的锁定时间和抖动容限是决定速率变更能否成功的关键因素。调试时应重点关注EIOS发送时序、TS1交换内容以及CDR锁定时间是否满足2 µs的协议要求。