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 数据传输
关键概念:Gen1速率协商是PCIe链路训练的"通用语言"。即使链路最终运行在Gen5(32 GT/s),初始训练也必须从Gen1开始,完成Detect→Polling→Configuration→L0的完整序列后,再通过速率变更进入更高速度。

3.2 Detect状态:物理层存在检测

Detect状态是LTSSM的初始状态,负责确认对端设备是否物理存在。该阶段不发送任何Ordered Sets,仅通过电气特性检测。

3.2.1 检测机制

  • 接收器检测(Rx Detection):发送端在TX引脚上施加一个已知的电压阶跃,通过检测RC时间常数判断接收端是否存在。
  • 阻抗检测:PCIe规范要求接收端提供50Ω差分终端阻抗,发送端通过检测反射波判断阻抗匹配。
  • 超时机制:若在12ms内未检测到对端,LTSSM进入Detect.Quiet状态,降低功耗后重试。
训练失败点 #1:Detect状态失败通常由物理连接问题引起——线缆未插紧、PCB走线断裂、接收端未上电或终端电阻异常。在Gen1阶段,Detect失败是最常见的"链路不up"原因。

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编码的特性:

  1. COM字符检测:接收器在数据流中搜索COM(0xBC)字符,COM字符的8b/10b编码具有唯一的跳变模式,便于时钟恢复。
  2. 时钟数据恢复(CDR):接收器的PLL锁定到输入数据的跳变沿,建立稳定的采样时钟。
  3. 位对齐:确定每个数据位的起始位置,确保后续的10-bit符号边界正确。

3.3.3 Symbol Lock建立过程

Symbol Lock在Bit Lock之后进行,目的是确定10-bit符号的边界:

  1. COM字符定位:利用COM字符的独特编码(K28.5,即0xBC),接收器找到符号边界。
  2. 8b/10b解码验证:对后续符号进行8b/10b解码,验证解码结果是否符合TS1格式。
  3. 连续确认:连续收到2个有效的TS1 Ordered Set后,Symbol Lock确认完成。
训练失败点 #2:Bit Lock失败通常由信号完整性(SI)问题引起——信号衰减过大、抖动超标、CDR无法锁定。Symbol Lock失败则多与编码错误有关,如极性反转未处理、参考时钟偏差过大(超过±300ppm)。

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状态中最关键的步骤之一,用于补偿不同通道间的传播延迟差异。

Lane Deskew原理示意图 发送端 接收端 Lane 0 延迟=5ns Lane 1 延迟=7ns Lane 2 延迟=6ns Deskew后 对齐后延迟=7ns Deskew过程:接收端测量每个Lane的TS1到达时间,在延迟最大的Lane上对齐所有Lane的符号边界 最大允许Deskew偏差:Gen1为20ns,Gen2/Gen3为8ns,Gen4/Gen5为4ns

3.4.4 Deskew实现细节

  1. TS1到达时间测量:接收端记录每个Lane上第一个有效TS1的到达时间戳。
  2. 最大延迟确定:找出所有Lane中延迟最大的值(MaxLaneDelay)。
  3. FIFO缓冲调整:每个Lane的接收FIFO插入延迟,使所有Lane的输出对齐到MaxLaneDelay。
  4. Deskew完成确认:所有Lane同时输出对齐后的TS1,进入Configuration.Idle子状态。
训练失败点 #3:Lane Deskew失败通常发生在以下场景:
• 不同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 完整训练序列时序图

Gen1完整训练序列时序图 时间→ Detect ~2ms Polling TS1发送 ~5ms Configuration TS1/TS2 + Deskew ~3ms L0 正常工作 Detect子状态 Detect.Quiet Detect.Active Polling子状态 Polling.Active Polling.Compliance Configuration子状态 Config.Link Config.Lane Config.Idle 关键事件节点 ① Detect完成:接收器阻抗检测通过 ② Polling完成:Bit Lock + Symbol Lock建立 ③ Configuration完成:Lane编号 + Deskew完成,TS2交换确认 常见失败点 ✗ Detect失败:物理连接问题(线缆/PCB/终端电阻) ✗ Polling失败:信号完整性差(衰减/抖动/CDR失锁) ✗ Configuration失败:Deskew超时/极性反转未处理/链路宽度不匹配

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会经历以下过程:

  1. 恢复(Recovery)状态:从L0进入Recovery状态,重新发送TS1 Ordered Sets。
  2. 速率变更:在Recovery状态下,通过Modified TS1/TS2中的速率标识位(Speed Change Bit)发起速率协商。
  3. 重新训练:目标速率下重新建立Bit Lock、Symbol Lock和Deskew。
重要提示:Gen1训练序列中的Deskew参数(20ns)与Gen4/Gen5的Deskew参数(4ns)差异巨大。当链路回退到Gen1时,必须重新执行完整的Deskew过程,不能复用高速率下的Deskew结果。这是链路训练失败中常见的"速率回退后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状态实现。