Chapter 5: TLP Elements

张开发
2026/6/3 9:52:53 15 分钟阅读
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]00No Data, 011DW Data, 102DW Header(64b addr), 113DW HeaderType[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 6RO, Bit 7NSTDByte 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 RequestsMemory 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 Header3 DW: 32-bit 地址Header 后直接是数据4 DW: 64-bit 地址低 32 位在 DW1-2高 32 位在 DW35.5 IO RequestsIO Read/Write特点: Non-Posted需要 CompletionHeader: 3 DWIO 地址为 32-bitFormat 00b (No Data) 或 01b (Data Payload present) Type IO Rd / IO Wr Address 32-bit IO 地址 Length 1 (IO 访问只支持单 DWORD) Requester ID BDFIO vs Memory 区别特性IO 请求Memory 请求地址宽度32-bit32-bit 或 64-bitLength固定 1 DW1-1024 DWPosted?NoMemory Write Yes用途Legacy 设备寄存器MMIO5.6 Configuration RequestsType 0 vs Type 1Type 0: 访问最终设备在目标总线上Type 1: 穿过 Bridge用于路由到下游总线Configuration Request HeaderFormat 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 CompletionsCompletion 格式无数据 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 AddressByte Count: Completer 还能返回多少字节用于分段返回Lower Address: 本次返回数据在请求地址中的起始偏移5.8 Message RequestsMessage 类型消息类型说明INTx传统中断消息 (Assert/Deassert INTA-D)Power Management电源管理消息Error Signaling错误信号消息Locked Transaction锁定事务消息Slot Power Limit插槽功率限制消息Vendor-Defined厂商自定义消息LTRLatency Tolerance ReportingOBFFOptimized Buffer Flush/FillMessage 路由方式Implicit Routing: 广播给所有设备Address Routing: 路由到特定地址ID Routing: 路由到特定 BDFMessage Header3 DW Header使用 Implicit Routing大多数消息Message Code 字段指明消息类型5.9 TLP Digest (ECRC)ECRC 保护范围ECRC 覆盖 Header 和 Data Payload但不包括Seq NumLCRCFraming 符号ECRC 生成可选通过 TLP Digest (TD) 位指示如果设备启用 ECRC所有发出的 TLPs 必须包含 ECRCECRC 检查最终目标设备检查 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, -]关键知识点速记TLP Header Data Digest(可选)3 DW Header: 32-bit 地址无数据4 DW Header: 64-bit 地址Format/Type 字段: 决定 TLP 类型和格式TD (TLP Digest): 1 ECRC 存在EP (Poisoned): 1 数据已污染Memory Write: Posted无需 CompletionMemory Read: Non-Posted需要 CplDIO/Config: Non-Posted需要 Cpl/CplDCompletion Status: OK/UR/CRS/CAECRC: 端到端校验Switch 不修改Byte Enables: 指示有效数据字节思考题TLP 的 Format/Type 字段是如何编码的为什么需要这两个字段ECRC 和 LCRC 分别保护什么它们在哪个层添加/检查Poisoned Data (EP) 的实际用途是什么和 PCI 的 PERR# 有什么关系为什么 Completion 需要 Status、Byte Count 和 Lower Address 三个字段来描述数据3 DW Header 和 4 DW Header 的区别是什么分别在什么场景使用笔记结束

更多文章