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 链路训练状态机。它决定“能不能传”。
提示:做 SI 测试时,物理层指标(眼高、眼宽、抖动、损耗)决定链路能否稳定工作;而协议层指标(重传率、流控信用、训练状态)决定链路能否高效工作。两者必须结合看。

二、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,表现为系统识别不到设备或带宽远低于预期。

PCIe 分层架构与 LTSSM 链路训练关系图 事务层 TLP 生成 / 流控 Credit 数据链路层 LCRC / ACK-NAK / 重传 物理层 编码 / 串并转换 / 差分 事务层 TLP 解析 / 完成响应 数据链路层 校验 / 序列号 / 去重 物理层 均衡 / CDR / 恢复时钟 差分链路 Lane 0~N LTSSM 链路训练状态机 Detect → Polling → Config → L0 ⇄ Recovery 控制物理层 速率演进 Gen1→Gen5→Gen6 兼容性 向下协商 / 降速降宽

四、速率演进与兼容性:从 Gen1 到 Gen6

PCIe 速率演进伴随着编码方式和信号技术的重大变化。Gen1/Gen2 使用 8b/10b 编码,Gen3 及以后改用 128b/130b 编码以降低开销。Gen5 引入更严格的通道损耗预算,Gen6 则采用 PAM4 调制和 FEC 前向纠错。每一代都要求向下兼容,但兼容是通过链路训练协商实现的,而不是自动“全速运行”。

代际 单通道速率 编码方式 典型损耗预算 SI 关注重点
Gen12.5 GT/s8b/10b较宽松基本眼图、阻抗
Gen25.0 GT/s8b/10b中等抖动、损耗
Gen38.0 GT/s128b/130b较严格均衡、串扰
Gen416.0 GT/s128b/130b严格插入损耗、回波
Gen532.0 GT/s128b/130b很严格通道预算、连接器
Gen664.0 GT/sPAM4 + FEC极严格SNR、FEC、误码

五、典型场景与常见误区

某服务器平台插入 Gen4 NVMe SSD 后,系统只识别为 Gen1 x1。排查发现:物理层眼图在 Gen4 速率下几乎闭合,LTSSM 反复进入 Recovery,最终协商降速到 Gen1。进一步测量发现连接器区域插入损耗超标,且参考时钟抖动偏大。更换连接器并优化参考时钟后,链路稳定工作在 Gen4 x4。

常见误区:把“链路降速”直接归因于协议配置错误。实际上,LTSSM 降速往往是物理层信号质量不足的自我保护行为。应先看物理层眼图、损耗和抖动,再检查协议层训练日志。

复盘要点:第一,分层排查,先物理层后协议层;第二,关注 LTSSM 状态跳转日志,确认卡在哪个状态;第三,结合重传率和流控信用判断链路健康度;第四,速率协商结果必须与硬件设计损耗预算匹配,不能只看芯片标称能力。