4. Gen4链路训练初始化流程:从复位到L0的完整握手过程、TS1/TS2训练序列结构解析
4.1 链路训练状态机概述
PCIe Gen4链路训练的核心是物理层链路训练与状态机。从复位释放到进入L0正常工作状态,链路必须依次通过多个子状态,每个状态都有特定的电气特性和协议行为。Gen4在Gen3基础上引入了更严格的电气参数协商和均衡训练,但状态机迁移路径保持一致。
4.1.1 链路训练状态迁移路径
完整的训练流程从Detect状态开始,依次经过Polling、Configuration、Recovery(可选)、L0。Gen4特有的均衡训练在Recovery和Configuration阶段完成。
4.2 从复位到L0的完整握手过程
4.2.1 阶段一:Detect(检测)
复位释放后,链路进入Detect状态。发送端通过检测接收端阻抗变化来判断对端是否存在。Gen4要求接收端在20ms内完成检测响应。检测成功后,发送端发送EIEOS(电气空闲退出序列)唤醒接收端。
| 参数 | Gen3规范 | Gen4规范 | 说明 |
|---|---|---|---|
| 检测超时 | 24ms | 20ms | Gen4要求更快的检测响应 |
| EIEOS长度 | 4个符号 | 4个符号 | 未变化 |
| 电气空闲阈值 | 50mV | 30mV | Gen4灵敏度更高 |
4.2.2 阶段二:Polling(轮询)
进入Polling状态后,两端开始交换TS1训练序列。Polling阶段完成以下任务:
- 位锁定:接收端从TS1序列中恢复时钟,实现位对齐。
- 符号锁定:通过COM符号识别训练序列边界。
- 极性检测:检查通道极性是否反转,必要时进行极性调整。
- 链路宽度协商:通过TS1中的链路编号字段确定实际工作的通道数。
4.2.3 阶段三:Configuration(配置)
Configuration状态是Gen4链路训练中最复杂的阶段,分为Config.Linkwidth和Config.Linknum两个子状态。此阶段完成:
- 通道编号分配:每个通道获得唯一的通道编号(Lane Number)。
- 链路编号分配:确定整个链路的编号。
- Gen4均衡训练:发送端和接收端协商发射均衡系数(Preset/Hint),优化信号质量。
- 速度协商:确定最终工作速度(Gen1/Gen2/Gen3/Gen4)。
4.2.4 阶段四:Recovery(恢复)
Recovery状态用于以下场景:
- 速度变更:从Gen4降速到Gen3或从Gen3升速到Gen4。
- 链路重训练:当误码率超过阈值时自动触发。
- 均衡系数更新:在运行过程中调整发射均衡参数。
Recovery状态会重新执行均衡训练,但不会重新进行链路宽度协商,因此恢复速度比完整训练快。
4.2.5 阶段五:L0(正常工作)
进入L0状态后,链路开始传输TLP(事务层包)和DLLP(数据链路层包)。Gen4在L0状态下以16 GT/s速率运行,每个通道提供约2 GB/s的原始带宽。L0状态下链路持续监控误码率,一旦超过阈值会触发Recovery重训练。
4.3 TS1/TS2训练序列结构解析
4.3.1 训练序列基本格式
TS1和TS2是物理层用于链路训练的特殊有序集。每个训练序列由16个符号组成,以COM符号(0xBC)开头。Gen4保留了与Gen3相同的训练序列格式,但扩展了均衡相关字段。
| 符号位置 | 字段名称 | TS1值 | TS2值 | 说明 |
|---|---|---|---|---|
| 0 | COM | 0xBC | 0xBC | 训练序列起始标识 |
| 1 | Link Number | 0x00~0xFF | 0x00~0xFF | 链路编号,0xFF表示未知 |
| 2 | Lane Number | 0x00~0x1F | 0x00~0x1F | 通道编号,0x1F表示未知 |
| 3 | FTS Count | 0x00 | 快速训练序列计数 | 用于L0s退出 |
| 4 | Data Rate Identifier | 速度标识 | 速度标识 | 指示目标速度 |
| 5 | Training Control | 训练控制 | 训练控制 | 包含均衡请求位 |
| 6 | TS Identifier | 0x00 (TS1) | 0x01 (TS2) | 区分TS1和TS2 |
| 7~15 | Reserved/Preset | 均衡系数 | 均衡系数 | Gen4用于均衡协商 |
4.3.2 TS1序列详解
TS1主要用于Polling和Configuration阶段。其关键字段含义如下:
- Link Number = 0xFF:表示链路编号尚未分配,用于Polling阶段。
- Lane Number = 0x1F:表示通道编号尚未分配。
- Training Control[0]:均衡请求位,Gen4中用于触发均衡训练。
- Preset[7:0]:符号7~15中的低8位表示当前发射均衡预设值(0~10)。
4.3.3 TS2序列详解
TS2主要用于Configuration和Recovery阶段。与TS1的主要区别:
- TS Identifier = 0x01:标识为TS2序列。
- FTS Count:有效值,用于配置L0s退出时的快速训练序列数量。
- Training Control[1]:均衡完成位,表示接收端已接受当前均衡设置。
- Request字段:符号7~15中的高8位表示接收端请求的Preset值。
4.3.4 Gen4均衡训练中的TS1/TS2交互
4.3.5 训练序列的电气特性
Gen4训练序列在电气层面有特殊要求:
| 参数 | Gen3 | Gen4 | 影响 |
|---|---|---|---|
| 符号速率 | 8 GT/s | 16 GT/s | Gen4训练序列持续时间减半 |
| 差分电压摆幅 | 800~1200 mV | 800~1200 mV | 未变化 |
| 去加重深度 | -3.5~0 dB | -6~0 dB | Gen4支持更深的去加重 |
| 均衡协商时间 | 无严格要求 | ≤ 1.5μs | Gen4要求快速完成均衡 |
4.4 链路训练故障排查要点
- Detect失败:检查参考时钟是否稳定、AC耦合电容是否正常、PCB走线是否断路。
- Polling超时:检查位锁定电路、时钟恢复PLL锁定状态、信号眼图是否闭合。
- Configuration失败:检查均衡系数协商是否超时、Preset值是否在接收端支持范围内。
- Recovery循环:检查误码率是否过高、均衡系数是否稳定、电源噪声是否过大。
链路训练过程中,可以通过逻辑分析仪抓取TS1/TS2序列来分析故障。重点关注Training Control字段中的均衡请求位和均衡完成位,这两个位直接反映均衡训练的进度。