3. Gen1速率协商过程:从Detect到L0的完整训练序列
Gen1(2.5 GT/s)是PCIe链路训练的基础速率,所有后续速率的协商都建立在Gen1训练序列之上。本章详细拆解从物理层检测到最终进入L0工作状态的完整训练序列,包括TS1/TS2 Ordered Sets、Bit Lock、Symbol Lock和Lane Deskew等关键步骤。
3.1 训练状态机(LTSSM)概述
链路训练由LTSSM(Link Training and Status State Machine)控制,Gen1速率协商涉及以下主要状态:
| LTSSM状态 | 主要动作 | 输出序列 | 关键目标 |
|---|---|---|---|
| Detect | 检测对端设备是否存在 | 无(电气检测) | 确认接收器阻抗存在 |
| Polling | 发送TS1/TS2,建立位锁定 | TS1 Ordered Sets | Bit Lock + Symbol Lock |
| Configuration | 链路宽度协商与Lane Deskew | TS1/TS2 Ordered Sets | Lane编号 + 极性反转 + Deskew |
| L0 | 正常工作状态 | TLP/DLLP | 数据传输 |
3.2 Detect状态:物理层存在检测
Detect状态是LTSSM的初始状态,负责确认对端设备是否物理存在。该阶段不发送任何Ordered Sets,仅通过电气特性检测。
3.2.1 检测机制
- 接收器检测(Rx Detection):发送端在TX引脚上施加一个已知的电压阶跃,通过检测RC时间常数判断接收端是否存在。
- 阻抗检测:PCIe规范要求接收端提供50Ω差分终端阻抗,发送端通过检测反射波判断阻抗匹配。
- 超时机制:若在12ms内未检测到对端,LTSSM进入Detect.Quiet状态,降低功耗后重试。
3.3 Polling状态:位锁定与符号锁定
Detect成功后,链路进入Polling状态。该状态的核心任务是建立Bit Lock(位锁定)和Symbol Lock(符号锁定),为后续的链路宽度协商做准备。
3.3.1 TS1 Ordered Sets结构
Polling状态下,发送端持续发送TS1 Ordered Sets。每个TS1 Ordered Set包含16个Symbol:
TS1 Ordered Set格式(16个Symbol):
Symbol 0: COM (0xBC) — 控制字符,标识Ordered Set起始
Symbol 1: Link Number — 链路编号(0x00~0x1F)
Symbol 2: Lane Number — 通道编号(0x00~0x1F)
Symbol 3-4: Reserved / Training Control
Symbol 5-15: TS1 Identifier (0xAA) — 填充字符
3.3.2 Bit Lock建立过程
Bit Lock是接收器从串行数据流中恢复出时钟的过程,依赖于8b/10b编码的特性:
- COM字符检测:接收器在数据流中搜索COM(0xBC)字符,COM字符的8b/10b编码具有唯一的跳变模式,便于时钟恢复。
- 时钟数据恢复(CDR):接收器的PLL锁定到输入数据的跳变沿,建立稳定的采样时钟。
- 位对齐:确定每个数据位的起始位置,确保后续的10-bit符号边界正确。
3.3.3 Symbol Lock建立过程
Symbol Lock在Bit Lock之后进行,目的是确定10-bit符号的边界:
- COM字符定位:利用COM字符的独特编码(K28.5,即0xBC),接收器找到符号边界。
- 8b/10b解码验证:对后续符号进行8b/10b解码,验证解码结果是否符合TS1格式。
- 连续确认:连续收到2个有效的TS1 Ordered Set后,Symbol Lock确认完成。
3.4 Configuration状态:Lane编号与Deskew
Polling完成后,链路进入Configuration状态。该状态负责Lane编号(Lane Numbering)、极性反转(Polarity Inversion)和Lane Deskew(通道去偏斜)。
3.4.1 Lane编号协商
在Configuration状态下,发送端在TS1的Lane Number字段中填入自己的通道编号。接收端通过比较收到的Lane Number确定物理通道到逻辑通道的映射关系。
| TS1字段 | 发送端填写 | 接收端处理 |
|---|---|---|
| Link Number | 0x00(初始值) | 确认链路编号一致 |
| Lane Number | 物理通道编号 | 建立逻辑映射表 |
| Training Control | Hot Reset / Disable / Loopback等 | 解析控制位 |
3.4.2 极性反转处理
由于PCB走线或连接器可能引入差分对极性反转(P/N交换),PCIe允许在Configuration阶段自动纠正:
- 检测:接收端发现8b/10b解码持续错误,或COM字符无法识别。
- 纠正:接收端在本地反转极性,重新解码。
- 确认:反转后正确收到TS1,极性反转标记被记录在链路状态中。
3.4.3 Lane Deskew(通道去偏斜)
Lane Deskew是Configuration状态中最关键的步骤之一,用于补偿不同通道间的传播延迟差异。
3.4.4 Deskew实现细节
- TS1到达时间测量:接收端记录每个Lane上第一个有效TS1的到达时间戳。
- 最大延迟确定:找出所有Lane中延迟最大的值(MaxLaneDelay)。
- FIFO缓冲调整:每个Lane的接收FIFO插入延迟,使所有Lane的输出对齐到MaxLaneDelay。
- Deskew完成确认:所有Lane同时输出对齐后的TS1,进入Configuration.Idle子状态。
• 不同Lane之间的延迟差超过规范限制(Gen1为20ns)
• 某条Lane的CDR尚未锁定,导致时间戳测量错误
• 链路宽度协商失败(如x8链路中只有x4可用)
3.5 从Configuration到L0的转换
Configuration状态完成后,链路进入L0状态。转换条件如下:
| 条件 | 描述 | 验证方式 |
|---|---|---|
| TS2交换完成 | 双方连续发送TS2 Ordered Sets | 收到至少2个有效TS2 |
| 链路宽度确认 | 双方就链路宽度达成一致 | Link Number字段匹配 |
| Deskew完成 | 所有Lane的符号边界对齐 | Deskew状态寄存器置位 |
| 速率确认 | 双方确认工作在Gen1速率 | 速率协商寄存器一致 |
3.6 完整训练序列时序图
3.7 训练序列中的关键参数
| 参数 | Gen1规范值 | 说明 |
|---|---|---|
| Detect超时 | 12 ms | 超过此时间未检测到对端,进入Detect.Quiet |
| Polling超时 | 24 ms | 超过此时间未完成Bit/Symbol Lock,复位LTSSM |
| Configuration超时 | 24 ms | 超过此时间未完成Deskew,降级链路宽度或复位 |
| TS1发送间隔 | 连续发送 | 每个Symbol周期发送一个TS1 Ordered Set |
| TS2发送次数 | 至少2次 | Configuration.Idle阶段交换TS2确认 |
| 最大Deskew偏差 | 20 ns | 超过此值认为Lane不可用 |
3.8 训练序列与速率协商的关系
Gen1训练序列是后续速率协商的基础。当链路需要从Gen1切换到更高速率(Gen2/Gen3/Gen4/Gen5)时,LTSSM会经历以下过程:
- 恢复(Recovery)状态:从L0进入Recovery状态,重新发送TS1 Ordered Sets。
- 速率变更:在Recovery状态下,通过Modified TS1/TS2中的速率标识位(Speed Change Bit)发起速率协商。
- 重新训练:目标速率下重新建立Bit Lock、Symbol Lock和Deskew。
3.9 本章小结
- Gen1速率协商从Detect开始,经过Polling、Configuration,最终进入L0状态。
- Detect状态通过电气特性检测对端是否存在,失败通常由物理连接问题引起。
- Polling状态建立Bit Lock和Symbol Lock,依赖于8b/10b编码和CDR。
- Configuration状态完成Lane编号、极性反转和Lane Deskew,是训练序列中最复杂的阶段。
- Lane Deskew通过FIFO缓冲对齐所有Lane的符号边界,最大允许偏差为20ns。
- Gen1训练序列是所有速率协商的基础,后续速率变更通过Recovery状态实现。