PCIe LTSSM状态迁移条件与异常跳转分析 - 第2节

2.1 分层架构总览

PCIe 协议采用经典的分层架构,从上至下依次为:事务层(Transaction Layer)、数据链路层(Data Link Layer)和物理层(Physical Layer)。每一层都有明确的职责边界,并通过严格定义的接口与相邻层交互。这种分层设计使得协议栈的维护、扩展和验证更加清晰可控。

核心设计思想:上层(事务层)关注“做什么”,中间层(数据链路层)关注“确保可靠”,下层(物理层)关注“怎么传”。每一层对上层透明,下层为上层提供服务。
PCIe 分层架构与层间交互 事务层(Transaction Layer) TLP 组装/解析 · 事务排序 · 流量控制 · 完成超时 数据链路层(Data Link Layer) DLLP 管理 · Ack/Nak 重传 · 序列号 · CRC 校验 · 链路训练 物理层(Physical Layer) 8b/10b 或 128b/130b 编码 · 串行化/解串 · 电气特性 · 链路状态机 TLP 传递 DLLP/PLP

2.2 事务层(Transaction Layer)职责

事务层是 PCIe 协议栈中最接近软件的一层,负责处理事务层包(TLP, Transaction Layer Packet)的生成与解析。它屏蔽了底层传输细节,为软件提供统一的读写接口。

2.2.1 核心职责

  • TLP 组装与解析:根据软件请求(如 Memory Read/Write、Completion)构建 TLP,或从接收到的 TLP 中提取有效载荷。
  • 事务排序:遵循 PCIe 排序规则(Strongly Ordered / Relaxed Ordering / ID-Based Ordering),确保事务按正确顺序完成。
  • 流量控制(Flow Control):通过 FC 信用机制(Posted/Non-Posted/Completion 三类信用)防止接收端缓冲区溢出。
  • 完成超时(Completion Timeout):监控 Non-Posted 请求的完成等待时间,超时后触发错误处理。
验证关注点:事务层是验证中最容易发现协议违例的地方。重点检查 TLP 头格式、Fmt/Type 字段、TD/EP/Attr 位、以及流量控制信用更新时序。

2.2.2 TLP 基本格式

字段 位宽 说明
Fmt + Type 7 bits 定义 TLP 格式(3DW/4DW 头)和事务类型(MRd/MWr/Cpl/CplD 等)
Length 10 bits 有效载荷的 DW 数量(0~1023),0 表示无数据
Requester ID 16 bits 发起者的 Bus/Device/Function 编号
Tag 8 bits 事务标签,用于匹配请求与完成
Last DW BE / 1st DW BE 4 bits each 字节使能,指示有效数据字节
TLP 基本格式(3DW Header with Data) TLP 头(3 DW = 12 字节) 数据载荷(Data Payload,0~4096 字节) TLP Digest(可选,4 字节,用于 ECRC) 起始 结束

2.3 数据链路层(Data Link Layer)职责

数据链路层位于事务层和物理层之间,核心使命是保证 TLP 在链路上的可靠传输。它通过 Ack/Nak 重传机制、CRC 校验和序列号管理,确保每一笔 TLP 都能被接收端正确接收。

2.3.1 核心职责

  • TLP 序列号与 CRC 添加:每个 TLP 被分配一个 12-bit 序列号,并附加 32-bit LCRC(Link CRC)。
  • Ack/Nak 重传协议:接收端通过 DLLP(Data Link Layer Packet)返回 Ack 或 Nak。发送端根据 Nak 或超时重传未确认的 TLP。
  • DLLP 管理:生成和解析链路管理包,包括 Ack/Nak、InitFC1/InitFC2、UpdateFC、PM(电源管理)等。
  • 链路训练与状态管理:与物理层配合完成链路初始化、宽度协商、速率协商和链路复位。
常见验证陷阱:数据链路层的重传缓冲区管理是验证难点。务必覆盖以下场景:重传缓冲区溢出、序列号回绕、Ack 延迟、Nak 风暴、以及链路退出 L0s 后重传恢复。

2.3.2 Ack/Nak 重传流程

  1. 发送端为每个 TLP 分配序列号(SEQ),并保存到重传缓冲区。
  2. 接收端收到 TLP 后,校验 LCRC 和序列号连续性。
  3. 若校验通过,接收端发送 Ack DLLP,携带期望的下一个序列号(Next_Seq)。
  4. 若校验失败或序列号不连续,接收端发送 Nak DLLP。
  5. 发送端收到 Nak 或超时未收到 Ack,从重传缓冲区取出对应 TLP 重新发送。
Ack/Nak 重传协议流程 发送端 重传缓冲区 接收端 序列号检查 TLP (SEQ=N) Ack (Next_Seq=N+1) 发送端(重传) 超时或收到 Nak 接收端 LCRC 错误 → Nak 重传 TLP (SEQ=N)

2.4 物理层(Physical Layer)职责

物理层是 PCIe 协议栈的最底层,直接与物理介质(差分信号对)打交道。它负责将数据链路层传递的 TLP 和 DLLP 转换为串行比特流,并通过电气信号在链路上传输。

2.4.1 核心职责

  • 编码/解码:Gen1/Gen2 使用 8b/10b 编码,Gen3 及以上使用 128b/130b 编码(含加扰/解扰)。
  • 串行化/解串(SerDes):将并行数据转换为高速串行差分信号,或反向转换。
  • 链路状态机(LTSSM):管理链路状态跳转,包括 Detect、Polling、Configuration、L0、L0s、L1、L2、Recovery 等。
  • 电气特性:驱动电压、摆幅、预加重、去加重、阻抗匹配等。
分层交互示例:当物理层检测到链路信号丢失时,会通过 LTSSM 跳转到 Recovery 状态,同时通知数据链路层暂停 TLP 发送。数据链路层随后挂起重传定时器,等待物理层重新建立链路后再恢复传输。

2.4.2 物理层子层划分

子层 位置 主要功能
逻辑物理层(MAC) 靠近数据链路层 编码/解码、加扰/解扰、弹性缓冲、符号对齐
电气物理层(PHY) 靠近外部接口 SerDes、PLL、时钟恢复、差分驱动/接收
物理层内部子层结构 数据链路层接口 逻辑物理层(MAC) 8b/10b 编码 · 加扰 · 弹性缓冲 · 符号对齐 电气物理层(PHY) SerDes · PLL · 时钟恢复 · 差分驱动/接收 差分信号对(TX+/TX- / RX+/RX-)

2.5 三层交互总结

三层之间的交互通过严格定义的接口原语完成。事务层通过 TLP 与数据链路层交互;数据链路层通过 DLLP 和 PLP(物理层包)与物理层交互。任何一层都不能越级访问。

验证视角:在 UVM 验证环境中,通常为每一层构建独立的 agent。事务层 agent 负责生成和检查 TLP;数据链路层 agent 负责模拟 Ack/Nak 和重传;物理层 agent 负责模拟链路训练和位级错误注入。三层 agent 通过 TLM 端口连接,形成完整的协议栈验证平台。

2.5.1 层间接口原语对照

接口方向 原语 携带内容 示例
事务层 → 数据链路层 TLP 发送请求 TLP 头 + 数据 + 元数据(VC、TC) Memory Write TLP
数据链路层 → 事务层 TLP 指示 接收到的 TLP + 状态(CRC 通过/失败) Completion TLP
数据链路层 → 物理层 DLLP 发送请求 DLLP 类型 + 参数(Ack/Nak/FC 等) Ack DLLP
物理层 → 数据链路层 DLLP 指示 接收到的 DLLP + 链路状态 UpdateFC DLLP
物理层 → 数据链路层 链路状态变化 新状态(L0/L0s/L1/Recovery 等) 链路进入 Recovery