2. PCIe链路训练基础:链路训练状态机(LTSSM)简介、Gen1/Gen2/Gen3/Gen4/Gen5训练速度协商过程
2.1 链路训练状态机(LTSSM)概述
PCIe链路训练的核心是链路训练与状态状态机(Link Training and Status State Machine, LTSSM)。LTSSM定义了物理层从复位到稳定数据传输所经历的一系列状态与转换条件。每个PCIe端口(Port)都包含一个独立的LTSSM实例,通过检测电气信号、定时器超时和软件干预来驱动状态迁移。
LTSSM的主要目标包括:
- 位锁定(Bit Lock):接收端恢复出正确的时钟与数据边界。
- 符号锁定(Symbol Lock):在8b/10b(Gen1/Gen2)或128b/130b(Gen3+)编码中定位符号边界。
- 块锁定(Block Lock):对Gen3及以上,锁定128b/130b编码块。
- 速度协商(Speed Negotiation):确定链路两端共同支持的最高运行速度。
- 链路宽度协商(Width Negotiation):确定可用的Lane数量。
- 链路数据流(L0):进入正常数据传输状态。
工程提示:LTSSM是PCIe物理层最复杂的逻辑模块之一。在热插拔场景中,LTSSM需要处理“链路突然断开”和“链路重新出现”两种异常事件,其状态转换路径与上电初始化不同,必须通过热复位(Hot Reset)或电气空闲退出(Exit from Electrical Idle)来重新触发训练。
2.2 LTSSM主要状态与转换
LTSSM包含11个主要状态,按功能可分为检测、训练、恢复、电源管理和软件控制五类。下表列出核心状态及其工程含义:
| 状态 | 类别 | 功能描述 | 热插拔相关 |
|---|---|---|---|
| Detect | 检测 | 检测对端设备是否存在(通过接收器检测电路) | 热插入后首先进入此状态 |
| Polling | 训练 | 发送TS1/TS2训练序列,建立位锁定和符号锁定 | 热拔出时接收不到TS1,超时后进入Detect |
| Configuration | 训练 | 协商链路宽度、Lane极性反转、Lane到Lane去偏斜 | 热插入后宽度可能降级(如x16→x8) |
| L0 | 数据 | 正常数据传输状态 | 热插拔目标状态 |
| Recovery | 恢复 | 重新训练以改变速度、宽度或恢复错误 | 热插拔后速度回退时必经状态 |
| Hot Reset | 复位 | 软件或硬件触发的带内复位 | 热拔出后对端可能发送Hot Reset |
| Electrical Idle | 电源 | 链路进入电气空闲,差分电压为0 | 热拔出时电气空闲信号触发状态迁移 |
关键工程点:在热插拔场景中,Detect和Polling状态是判断链路是否存在的关键窗口。如果LTSSM在Polling状态连续超时(通常为24ms),则回退到Detect,此时软件可以感知链路断开事件。
2.3 速度协商过程:Gen1 ~ Gen5
PCIe链路的速度协商发生在Polling和Recovery状态中。协商的基本原理是:链路两端通过交换训练序列(TS1/TS2)中的速度标识(Speed ID)来通告各自支持的速度能力,最终确定一个双方都支持的最高速度。
下表总结了各代PCIe的速度、编码方式和训练序列特征:
| PCIe代次 | 数据传输速率 | 编码方式 | 训练序列格式 | 速度协商机制 |
|---|---|---|---|---|
| Gen1 | 2.5 GT/s | 8b/10b | TS1/TS2 (10-bit符号) | 固定速度,无协商 |
| Gen2 | 5.0 GT/s | 8b/10b | TS1/TS2 (10-bit符号) | Gen1→Gen2升速协商 |
| Gen3 | 8.0 GT/s | 128b/130b | TS1/TS2 + 修改的TS1 (Ordered Set) | Gen1→Gen2→Gen3逐级协商 |
| Gen4 | 16.0 GT/s | 128b/130b | TS1/TS2 + 修改的TS1 | Gen1→Gen2→Gen3→Gen4逐级协商 |
| Gen5 | 32.0 GT/s | 128b/130b | TS1/TS2 + 修改的TS1 | Gen1→Gen2→Gen3→Gen4→Gen5逐级协商 |
2.4 Gen1/Gen2速度协商(8b/10b时代)
Gen1和Gen2使用8b/10b编码,速度协商相对简单:
- 初始训练:两端在Polling状态以Gen1速度(2.5 GT/s)交换TS1序列,建立位锁定和符号锁定。
- 速度能力通告:TS1序列中的Speed ID字段(第7~8位)指示发送端支持的速度。Gen1设备只支持2.5 GT/s;Gen2设备支持2.5 GT/s和5.0 GT/s。
- 升速决策:如果两端都支持Gen2,则在Configuration状态完成后,进入Recovery状态进行升速。
- 升速执行:在Recovery状态中,发送端切换到Gen2速度(5.0 GT/s),接收端重新进行位锁定和符号锁定。成功后进入L0状态。
工程注意:Gen1→Gen2升速过程中,如果接收端无法在Gen2速度下锁定(例如链路质量差),LTSSM会回退到Gen1速度并保持在L0状态。这种速度回退(Speed Downgrade)机制在热插拔场景中尤为重要——插入的卡可能因接触不良导致高速信号质量下降,系统应能自动降速运行。
2.5 Gen3/Gen4/Gen5速度协商(128b/130b时代)
从Gen3开始,PCIe引入了128b/130b编码,速度协商过程更加复杂:
- 编码切换:Gen3及以上需要在训练过程中从8b/10b切换到128b/130b编码。切换发生在Recovery状态的Speed Change子状态中。
- EQ(均衡)训练:Gen3/Gen4/Gen5在速度协商后必须进行链路均衡(Link Equalization),通过发送预设的EQ训练序列(Modified TS1/TS2)来优化发送端和接收端的均衡参数(如去加重、CTLE、DFE)。
- 逐级协商:Gen5设备必须依次尝试Gen1→Gen2→Gen3→Gen4→Gen5,不能跳过中间代次。每一级升速都需要经过Recovery状态。
下表对比了Gen3/Gen4/Gen5在速度协商中的关键差异:
| 参数 | Gen3 (8.0 GT/s) | Gen4 (16.0 GT/s) | Gen5 (32.0 GT/s) |
|---|---|---|---|
| 编码切换点 | Gen2→Gen3 | Gen2→Gen3 | Gen2→Gen3 |
| EQ阶段数 | Phase 1~3 | Phase 1~3 | Phase 1~3 |
| EQ训练序列 | Modified TS1 (8个符号) | Modified TS1 (8个符号) | Modified TS1 (8个符号) |
| DFE要求 | 可选 | 推荐 | 强制 |
| Preset数量 | 8个发送Preset | 10个发送Preset | 10个发送Preset |
| Recovery超时 | 24 ms | 24 ms | 24 ms |
2.6 速度协商与热插拔的关联
在热插拔场景中,速度协商面临以下特殊挑战:
- 初始速度不确定性:热插入的设备可能支持不同代次(如Gen3卡插入Gen5槽位),协商必须从Gen1开始逐级尝试。
- 信号质量退化:热插拔连接器可能因多次插拔导致接触电阻增大、信号反射增强,高速训练(Gen4/Gen5)可能失败,系统应能自动降速。
- EQ参数重新训练:热插入后,链路均衡参数必须重新训练,不能复用之前的配置。这是因为通道特性(如插入损耗、回波损耗)可能因连接器状态变化而改变。
- 热拔出中断:如果在速度协商过程中发生热拔出,LTSSM应立即进入Electrical Idle状态,避免发送无效训练序列。
工程实践建议:在热插拔控制器设计中,建议在Detect状态后增加一个去抖定时器(Debounce Timer)(典型值100ms),确保设备物理稳定后再开始速度协商。同时,在Recovery状态中监控电气空闲信号,一旦检测到热拔出,立即终止训练并回退到Detect状态,避免LTSSM挂死在中间状态。
2.7 本章小结
LTSSM是PCIe链路训练的“大脑”,它通过Detect→Polling→Configuration→L0的标准路径完成链路初始化,并通过Recovery状态实现速度变更和错误恢复。速度协商从Gen1开始逐级向上尝试,Gen3及以上还需要额外的链路均衡训练。在热插拔场景中,LTSSM必须能够处理电气空闲事件、速度回退和EQ重新训练,这些机制共同保证了热插拔的可靠性和兼容性。