news 2026/4/15 2:20:43

Chapter 5: TLP Elements

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Chapter 5: TLP Elements

Chapter 5: TLP Elements

书籍: PCI Express Technology 3.0 (MindShare Press, 2012)
页码: Book Pages 169-226 | PDF Pages 226-277
学习日期: 2026-04-13


本章概要

本章详细描述 Transaction Layer Packet (TLP) 的结构、格式和各类字段。TLP 是 PCIe 中承载事务请求和完成响应的数据包。本章涵盖 TLP 组装/拆解过程、通用 Header 格式、各类 TLP 请求(Memory/IO/Configuration/Message)以及 Completion 的格式。


5.1 包协议的优势

1. 包格式明确定义

  • PCI: 传输大小不确定,无法确定有效载荷边界
  • PCIe: 包有已知的大小和格式,Header 指明类型
  • Header 大小固定(除了地址字段,可以是 32-bit 或 64-bit)
  • 接收方在传输开始后不能暂停或提前终止

2. 帧符号定义包边界

  • Gen1/Gen2 (8b/10b): 使用 Start (STP) 和 End (END) 控制符号标记包的开始和结束
  • Gen3 (128b/130b): 不再使用传统的控制符号
  • 任何错误/毛刺在 PCIe 中更容易识别和处理

3. CRC 保护整个包

  • PCI: 每个数据阶段使用奇偶校验(边带信号)
  • PCIe: 使用 CRC 验证整个包的端到端传输
  • Data Link Layer 添加 Sequence Number,支持自动重传

5.2 TLP 结构

TLP 组装 (Transmit Side)

软件层 → 事务层 生成事务层数据 ↓ 添加 TLP Header ↓ 添加 Data Payload (如果有) ↓ 添加 ECRC (如果启用) ↓ 发送到 Data Link Layer 添加序列号、LCRC ↓ 发送到 Physical Layer 添加 STP、CRC、END 符号 ↓ 串行传输

TLP 拆解 (Receive Side)

串行接收 ↓ Physical Layer 检测 STP/END,提取符号 8b/10b 解码 校验 CRC ↓ Data Link Layer 检查序列号 校验 LCRC 发送 ACK/NAK 丢弃/转发 TLP ↓ Transaction Layer 检查 ECRC (如果存在) 解析 Header 提取 Data Payload ↓ 软件层

TLP 层次结构

┌─────────────────────────────────────────────────────┐ │ TLP Data Payload (可选) │ ├─────────────────────────────────────────────────────┤ │ TLP Header (3 DW 或 4 DW) │ │ - Format/Type │ │ - TLP Digest (可选, 1 DW) │ │ - 其他 Header 字段 │ ├─────────────────────────────────────────────────────┤ │ Data Link Layer: Seq Num + LCRC │ ├─────────────────────────────────────────────────────┤ │ Physical Layer: STP Symbol + Framing │ └─────────────────────────────────────────────────────┘

5.3 通用 TLP Header 格式

TLP Header 结构 (3 DW 或 4 DW)

Byte 0 │ Format[1:0] │ Type[4:0] │ Byte 1 │ Reserved │ TC[2:0] │ Byte 2 │ Attr[1:0] │ TLP Hnd[1] │ (Hnd = Header Digest Present) Byte 3 │ TLP Type[4:0] │ Reserved │ Byte 4-7 │ Address (32-bit) or Address[31:0] (64-bit) │ Byte 8-11│ Address[63:32] (仅 64-bit 地址) │ Byte 12 │ Extended Register │ Register │ Byte 13 │ Reserved │ Byte 14-15│ Transaction ID │ ... (基于 TLP 类型不同)

关键 Header 字段说明

字段位置说明
Format[1:0]Byte 0[7:6]00=No Data, 01=1DW Data, 10=2DW Header(64b addr), 11=3DW Header
Type[4:0]Byte 0[5:0]TLP 类型
TC[2:0]Byte 1[2:0]Traffic Class (0-7)
Attr[1:0]Byte 2[7:6]属性: Bit 6=RO, Bit 7=NS
TDByte 3[7]TLP Digest 存在标志
EPByte 3[6]Poisoned Data (数据污染)
Transaction ID[15:0]Bytes 14-15唯一标识请求
Length[9:0]Bytes 7-8 (DW0)以 DW 为单位的长度

Format/Type 编码表

FormatTypeTLP 类型
000b00000bMRd (Memory Read)
000b00001bMRdLk (Memory Read Locked)
000b00100bIO Rd (IO Read)
000b00101bIO Wr (IO Write)
000b01010bConfig Rd0 (Type 0)
000b01011bConfig Wr0 (Type 0)
000b01110bConfig Rd1 (Type 1)
000b01111bConfig Wr1 (Type 1)
100b10000bCompletion (Cpl)
100b10001bCompletion with Data (CplD)

Poisoned Data (EP)

  • EP = 1 表示数据已被污染
  • 接收方应标记数据不可靠
  • 等同于 PCI 的 PERR#

5.4 Memory Requests

Memory Read Request (MRd)

特点: Non-Posted,需要 Completion 返回数据

Header: 3 DW (32-bit addr) 或 4 DW (64-bit addr) ↓ Address: 目标内存地址 ↓ Length: 要读取的 DW 数 (1-1024) ↓ Requester ID: 发送者的 BDF ↓ Completer 返回 CplD (Completion with Data)

Memory Write Request (MWr)

特点: Posted,无需响应

Header: 3 DW 或 4 DW ↓ Address: 目标内存地址 ↓ Data Payload: 要写入的数据 ↓ ECRC: 可选

3 DW vs 4 DW Header

  • 3 DW: 32-bit 地址,Header 后直接是数据
  • 4 DW: 64-bit 地址,低 32 位在 DW1-2,高 32 位在 DW3

5.5 IO Requests

IO Read/Write

特点: Non-Posted,需要 Completion

Header: 3 DW(IO 地址为 32-bit)

Format = 00b (No Data) 或 01b (Data Payload present) Type = IO Rd / IO Wr Address = 32-bit IO 地址 Length = 1 (IO 访问只支持单 DWORD) Requester ID = BDF

IO vs Memory 区别

特性IO 请求Memory 请求
地址宽度32-bit32-bit 或 64-bit
Length固定 1 DW1-1024 DW
Posted?NoMemory Write = Yes
用途Legacy 设备寄存器MMIO

5.6 Configuration Requests

Type 0 vs Type 1

  • Type 0: 访问最终设备(在目标总线上)
  • Type 1: 穿过 Bridge(用于路由到下游总线)

Configuration Request Header

Format = 00b (No Data) Type = Config Rd0/Wr0 或 Config Rd1/Wr1 Address: Bus/Dev/Func + Register Number Requester ID = RC 的 BDF

寄存器访问

  • 寄存器号必须是 4 的倍数(DW 对齐)
  • Extended Configuration Space 使用额外的高位地址

5.7 Completions

Completion 格式

无数据 Completion (Cpl):

Header: 3 DW Status: OK / UR / CRS / CA Requester ID: 响应者 Transaction ID: 匹配原始请求

带数据 Completion (CplD):

Header: 3 DW Status: OK Data: 返回的数据 Byte Count: 剩余可返回字节 Lower Address: 数据所在地址

Completion Status

状态说明场景
OK (00b)成功正常完成
UR (01b)Unsupported Request不支持的请求
CRS (10b)Completion Retry Status需要重试
CA (11b)Completer Abort终止

Byte Count 和 Lower Address

  • Byte Count: Completer 还能返回多少字节(用于分段返回)
  • Lower Address: 本次返回数据在请求地址中的起始偏移

5.8 Message Requests

Message 类型

消息类型说明
INTx传统中断消息 (Assert/Deassert INTA-D)
Power Management电源管理消息
Error Signaling错误信号消息
Locked Transaction锁定事务消息
Slot Power Limit插槽功率限制消息
Vendor-Defined厂商自定义消息
LTRLatency Tolerance Reporting
OBFFOptimized Buffer Flush/Fill

Message 路由方式

  • Implicit Routing: 广播给所有设备
  • Address Routing: 路由到特定地址
  • ID Routing: 路由到特定 BDF

Message Header

  • 3 DW Header
  • 使用 Implicit Routing(大多数消息)
  • Message Code 字段指明消息类型

5.9 TLP Digest (ECRC)

ECRC 保护范围

ECRC 覆盖 Header 和 Data Payload,但不包括:

  • Seq Num
  • LCRC
  • Framing 符号

ECRC 生成

  • 可选(通过 TLP Digest (TD) 位指示)
  • 如果设备启用 ECRC,所有发出的 TLPs 必须包含 ECRC

ECRC 检查

  • 最终目标设备检查 ECRC(端到端保护)
  • Switch/ Bridge不修改ECRC(透明传输)
  • 如果 ECRC 错误,报告给软件

5.10 Byte Enables

用途

指示 Data Payload 中哪些字节是有效的。

规则

  • Byte Enable 位于 Header 的 Byte 8-11
  • 每个 DW 有一个对应的 Byte Enable 位
  • Byte Enable = 1: 对应字节有效
  • Byte Enable = 0: 对应字节应被丢弃

示例

Data Payload: [0xAA, 0xBB, 0xCC, 0xDD] (1 DW) Byte Enables: 1010b → 字节 0 和字节 2 有效,字节 1 和字节 3 丢弃 → 实际数据: [0xAA, -, 0xCC, -]

关键知识点速记

  1. TLP = Header + Data + Digest(可选)
  2. 3 DW Header: 32-bit 地址,无数据
  3. 4 DW Header: 64-bit 地址
  4. Format/Type 字段: 决定 TLP 类型和格式
  5. TD (TLP Digest): 1 = ECRC 存在
  6. EP (Poisoned): 1 = 数据已污染
  7. Memory Write: Posted,无需 Completion
  8. Memory Read: Non-Posted,需要 CplD
  9. IO/Config: Non-Posted,需要 Cpl/CplD
  10. Completion Status: OK/UR/CRS/CA
  11. ECRC: 端到端校验,Switch 不修改
  12. Byte Enables: 指示有效数据字节

思考题

  1. TLP 的 Format/Type 字段是如何编码的?为什么需要这两个字段?
  2. ECRC 和 LCRC 分别保护什么?它们在哪个层添加/检查?
  3. Poisoned Data (EP) 的实际用途是什么?和 PCI 的 PERR# 有什么关系?
  4. 为什么 Completion 需要 Status、Byte Count 和 Lower Address 三个字段来描述数据?
  5. 3 DW Header 和 4 DW Header 的区别是什么?分别在什么场景使用?

笔记结束

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 2:19:55

Quill 编辑器光标意外跳转至顶部的解决方案

在 svelte 中集成 quill 时,点击工具栏按钮(如加粗、标题)导致光标重置到编辑器开头,是因 dom 绑定时机或初始化方式不当引发的焦点丢失问题。本文提供可落地的修复方案与最佳实践。 在 svelte 中集成 quill 时,点…

作者头像 李华
网站建设 2026/4/15 2:18:07

2026年外墙保温防脱落企业精选:性价比与质量兼得的选择

随着建筑行业的不断发展,外墙保温材料的需求也在逐年增加。然而,选择合适的外墙保温材料和施工方案不仅关系到建筑物的节能效果,还直接关系到建筑物的安全性和使用寿命。本文将为大家推荐一家在业界口碑良好、性价比高的企业——山东邦元新型…

作者头像 李华
网站建设 2026/4/15 2:14:38

手把手教你解决CMake升级后的CMAKE_ROOT错误(Ubuntu环境)

手把手教你解决CMake升级后的CMAKE_ROOT错误(Ubuntu环境) 在Ubuntu系统上进行CMake版本升级时,不少开发者会遇到一个令人头疼的错误提示:CMake Error: Could not find CMAKE_ROOT !!!。这个错误通常发生在升级过程中新旧版本混用或…

作者头像 李华
网站建设 2026/4/15 2:14:37

CSS文本渲染在不同操作系统差异_使用font-smoothing平滑化

-webkit-font-smoothing 在 macOS 和 Windows 上表现不一致,因依赖系统渲染机制:macOS 默认 subpixel 抗锯齿更柔,Windows 用 grayscale 更硬;该属性仅 WebKit 有效,且受 font-weight、transform 等限制,全…

作者头像 李华
网站建设 2026/4/15 2:12:28

FUTURE POLICE语音模型与Git工作流结合:语音数据版本管理实践

FUTURE POLICE语音模型与Git工作流结合:语音数据版本管理实践 你是不是也遇到过这样的麻烦事?团队里几个人一起搞一个语音AI项目,今天你改了下训练脚本,明天他更新了数据集,过两天又有人调整了模型参数。结果想回退到…

作者头像 李华