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速率协商的完整路径可分为三个关键阶段:
- 触发条件:上游端口(Upstream Port)或下游端口(Downstream Port)检测到需要提升链路带宽(如数据吞吐量需求、配置寄存器写入),决定发起速率变更。
- 进入Recovery.RcvrLock:发送端通过发送EIOS(Electrical Idle Ordered Set)序列使链路进入电气空闲,随后发送TS1 Ordered Set并携带速率标识符(Speed Identifier),引导接收端进入Recovery状态。
- 速率变更协商:在Recovery状态下,双方通过交换TS1/TS2 Ordered Set中的速率协商字段,确认目标速率(Gen3),并完成时钟恢复参数的重新训练。
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,再执行速率变更 |
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,表示同意速率变更。
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速率协商的完整状态机流程:
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 | 从确认速率到实际切换完成 |
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”字段。
4.7 本章小结
Gen3速率协商的入口是从Gen2 L0状态通过触发条件进入Recovery状态,并在Recovery.RcvrLock内通过TS1 Ordered Set中的Speed Identifier字段发起速率变更请求。时钟恢复(CDR)的锁定时间和抖动容限是决定速率变更能否成功的关键因素。调试时应重点关注EIOS发送时序、TS1交换内容以及CDR锁定时间是否满足2 µs的协议要求。