2. PCIe协议基础
PCIe 的协议体系并不是“一根高速串行线”那么简单,它采用严格的分层设计,把复杂的传输过程拆成事务层、数据链路层和物理层三个层次。理解这三层各自负责什么、如何协作,是后续做信号完整性分析和链路调优的前提。因为很多“链路降速”“训练失败”“误码重传”问题,表面看是眼图或抖动问题,根因却可能出在协议层的状态机或流控机制上。
一、三层架构:各司其职的传输流水线
PCIe 分层架构的核心思想是“上层面向事务,下层面向比特”。发送端从上到下逐层封装,接收端从下到上逐层解封装,每一层只关心自己的职责边界。
- 事务层(Transaction Layer):负责生成和解析 TLP(Transaction Layer Packet),处理存储器读写、配置读写、消息等请求,并管理基于信用(Credit)的流控机制。它决定“要传什么”。
- 数据链路层(Data Link Layer):负责 TLP 的可靠传输,通过序列号(Sequence Number)、LCRC 校验和 ACK/NAK 协议实现错误检测与重传,同时生成 DLLP(Data Link Layer Packet)。它决定“传得对不对”。
- 物理层(Physical Layer):负责字节条带化、加扰、8b/10b 或 128b/130b 编码、串并转换和差分信号发送接收,并管理 LTSSM 链路训练状态机。它决定“能不能传”。
二、TLP 与 DLLP:协议层的关键数据单元
事务层的 TLP 是 PCIe 传输的基本单位,典型结构包括:帧起始、序列号、头标(Header)、可选数据载荷(Payload)、ECRC 和 LCRC。头标中携带 Requester ID、Tag、地址、事务类型等关键字段。数据链路层的 DLLP 则用于 ACK/NAK、流控信用更新和电源管理,它不承载用户数据,但直接决定重传行为。
TLP 典型字段顺序:
[STP] [Seq Num] [Header] [Payload] [ECRC] [LCRC] [END]
DLLP 常见类型:
ACK DLLP —— 确认正确接收
NAK DLLP —— 请求重传
InitFC DLLP —— 初始化流控信用
UpdateFC DLLP —— 更新流控信用
当接收端 LCRC 校验失败或序列号不连续时,会发送 NAK,发送端从重传缓冲区中重新发送对应 TLP。重传率是衡量链路健康度的重要指标,通常要求低于 10⁻⁶ 量级;若重传率异常升高,往往意味着物理层信号质量已经劣化。
三、LTSSM:链路训练与状态机
PCIe 链路不是上电即用的,必须经过 LTSSM(Link Training and Status State Machine)完成训练。LTSSM 包含 Detect、Polling、Configuration、Recovery、L0、L1、L2 等多个状态。其中 L0 是正常工作状态,Recovery 用于重新训练或速率切换,Detect 用于检测对端是否存在。
链路训练的核心任务包括:位锁定(Bit Lock)、符号锁定(Symbol Lock)、通道对齐(Lane Deskew)、极性反转(Polarity Inversion)以及协商链路宽度和速率。如果训练过程中眼图裕量不足,链路可能降速到 Gen1 或降宽到 x1,甚至反复进入 Recovery,表现为系统识别不到设备或带宽远低于预期。
四、速率演进与兼容性:从 Gen1 到 Gen6
PCIe 速率演进伴随着编码方式和信号技术的重大变化。Gen1/Gen2 使用 8b/10b 编码,Gen3 及以后改用 128b/130b 编码以降低开销。Gen5 引入更严格的通道损耗预算,Gen6 则采用 PAM4 调制和 FEC 前向纠错。每一代都要求向下兼容,但兼容是通过链路训练协商实现的,而不是自动“全速运行”。
| 代际 | 单通道速率 | 编码方式 | 典型损耗预算 | SI 关注重点 |
|---|---|---|---|---|
| Gen1 | 2.5 GT/s | 8b/10b | 较宽松 | 基本眼图、阻抗 |
| Gen2 | 5.0 GT/s | 8b/10b | 中等 | 抖动、损耗 |
| Gen3 | 8.0 GT/s | 128b/130b | 较严格 | 均衡、串扰 |
| Gen4 | 16.0 GT/s | 128b/130b | 严格 | 插入损耗、回波 |
| Gen5 | 32.0 GT/s | 128b/130b | 很严格 | 通道预算、连接器 |
| Gen6 | 64.0 GT/s | PAM4 + FEC | 极严格 | SNR、FEC、误码 |
五、典型场景与常见误区
某服务器平台插入 Gen4 NVMe SSD 后,系统只识别为 Gen1 x1。排查发现:物理层眼图在 Gen4 速率下几乎闭合,LTSSM 反复进入 Recovery,最终协商降速到 Gen1。进一步测量发现连接器区域插入损耗超标,且参考时钟抖动偏大。更换连接器并优化参考时钟后,链路稳定工作在 Gen4 x4。
复盘要点:第一,分层排查,先物理层后协议层;第二,关注 LTSSM 状态跳转日志,确认卡在哪个状态;第三,结合重传率和流控信用判断链路健康度;第四,速率协商结果必须与硬件设计损耗预算匹配,不能只看芯片标称能力。