Chapter 2: PCIe Architecture Overview
Chapter 2: PCIe Architecture Overview书籍: PCI Express Technology 3.0 (MindShare Press, 2012)页码: Book Pages 39-84 | PDF Pages 99-143学习日期: 2026-04-12本章概要本章是 PCIe 的执行层概述介绍 PCIe 架构的所有基础知识。包括软件向后兼容、串行传输优势、链路与通道、拓扑结构、设备分层模型、各层职责以及协议流程示例。2.1 PCIe 架构介绍软件向后兼容核心设计目标: PCIe 必须完全兼容 PCI 软件实现方式:所有 PCI 使用的地址空间Memory、IO、Configuration保持不变旧的 PCI 软件BIOS、驱动无需修改即可在 PCIe 系统运行Configuration Space 被扩展以支持新功能但旧寄存器依然存在且可访问串行传输的优势克服并行总线的问题1. 飞行时间 (Flight Time)并行总线中信号从发送端到接收端的飞行时间必须小于时钟周期频率提高 → 时钟周期缩短 → 走线必须更短 → 不实际2. 时钟偏移 (Clock Skew)共享时钟到达不同设备的时间不同高频下更严重3. 串扰 (Crosstalk)并行信号线之间相互干扰高频下更严重4. EMI (电磁干扰)同步切换产生噪声串行总线的解决方案:点对点连接无共享总线差分信号抗干扰能力强源同步时钟数据中嵌入时钟可大幅提高频率带宽计算Generation比特率x1 带宽 (双向)x16 带宽 (双向)Gen12.5 GT/s500 MB/s8 GB/sGen25.0 GT/s1 GB/s16 GB/sGen38.0 GT/s~1.97 GB/s~31.5 GB/s注意: GT/s Gigatransfers per second不是 bits per second。编码方式影响实际带宽Gen1/Gen2: 8b/10b 编码 (80% 效率)Gen3: 128b/130b 编码 (~98.5% 效率)2.2 链路与通道 (Links and Lanes)链路 (Link)两个 PCIe 设备之间的点对点连接双向同时传输全双工称为Dual-Simplex不是 Full Duplex因为是两个单向通道通道 (Lane)1 条 Lane 1 个发送对 1 个接收对链路宽度: x1, x2, x4, x8, x12, x16, x32权衡更多通道 更高带宽 更高成本、功耗、空间差分信号使用差分对传输正负信号抗共模干扰眼图张开度更好支持更高频率无共享时钟每个链路独立时钟接收端通过 CDR (Clock Data Recovery) 从数据流中恢复时钟2.3 拓扑结构关键定义Root Complex (RC)CPU 与 PCIe 系统的接口系统中所有风起的源头相当于 PCI 系统中的北桥可以集成内存控制器、图形端口等Switch点对点连接的简化器内部实现虚拟 PCI 总线1 个 Upstream Port 多个 Downstream Port支持 DMA 传输、可路由BridgePCIe-to-PCI Bridge: 让旧 PCI 卡能在 PCIe 系统工作Forward BridgePCI-to-PCIe Bridge: 让 PCIe 卡能在旧 PCI 系统工作Reverse BridgeEndpoint (端点)位于拓扑树末端是事务的 Initiator 和 CompleterNative PCIe Endpoint: 原生 PCIe 设备使用 MMIOLegacy PCIe Endpoint: 旧设备改造支持 IO 空间和 Locked 请求系统示例低成本的简单拓扑:Root Complex └── Switch (x1上行, x4下行) ├── Endpoint (x4) - 显卡 ├── Endpoint (x1) - 硬盘控制器 └── Endpoint (x1) - 网卡服务器拓扑:Root Complex └── Switch (多端口) ├── Endpoint ├── Endpoint └── Bridge → PCI-X → 旧设备2.4 设备分层模型 (Device Layers)每个 PCIe 设备由三层组成┌─────────────────────────────────────┐ │ Device Core / Software Layer │ ├─────────────────────────────────────┤ │ Transaction Layer │ ├─────────────────────────────────────┤ │ Data Link Layer │ ├─────────────────────────────────────┤ │ Physical Layer │ │ (Logical Electrical) │ └─────────────────────────────────────┘1. Device Core / Software Layer产生要发送的事务请求接收来自其他设备的事务请求软件视角看到的设备功能2. Transaction Layer (事务层)职责:创建 TLPs (Transaction Layer Packets)解析接收到的 TLPs封装数据为 TLP 格式处理非Posted读取请求关键概念:Posted vs Non-Posted 事务类型说明示例Posted无需响应直接完成Memory Write, Message WriteNon-Posted需要 Completer 返回响应Memory Read, IO Read, Configuration ReadNon-Posted 读取示例:1. Requester 发送 Memory Read Request (Non-Posted) 2. Requester 释放总线 3. Completer 准备数据 4. Completer 申请总线 5. Completer 返回 Completion with Data 6. Requester 接收数据Posted 写入示例:1. Requester 发送 Memory Write Request (Posted) 2. 数据直接写入目标无需响应 3. 总线快速释放优点: Posted 写比 Non-Posted 读效率高因为不占用总线等待响应3. Data Link Layer (数据链路层)职责:创建 DLLPs (Data Link Layer Packets)ACK/NAK 协议可靠性保证Flow Control (流控)链路电源管理ACK/NAK 协议:发送方对每个 TLP 编号接收方正确接收后返回 ACK接收错误时返回 NAK发送方重发未被 ACK 的 TLPFlow Control (流控):确保发送方不会溢出接收方缓冲区基于 Credit 的机制每个 VC (Virtual Channel) 独立流控4. Physical Layer (物理层)Logical PHY:8b/10b 编码 (Gen1/Gen2)128b/130b 编码 (Gen3)加扰 (Scrambling)链路训练和初始化Ordered Sets 发送/接收Electrical PHY:差分驱动器/接收器阻抗匹配发射机/接收机规格Ordered Sets:特殊符号序列不属于任何事务用于链路训练、功耗管理、时钟补偿等示例Training Sequence (TS1/TS2), Idle, FTS2.5 协议流程示例内存读取完整的内存读取事务通过所有层软件层 ↓ 生成 Memory Read Request 事务层 → 封装为 TLP (Header Data) → 发送 数据链路层 → 添加序列号和 LCRC → 发送 物理层 → 8b/10b 编码 → 差分传输 ────────────────────── 链路 ────────────────────── → 差分接收 → 8b/10b 解码 → 校验 LCRC 数据链路层 → 检查序列号 → 发送 ACK DLLP 事务层 → 解析 TLP Header → 读取数据 → 返回 Completion with Data 物理层 → 编码 → 传输 数据链路层 → 添加序列号和 LCRC 事务层 (Completer侧) ← 接收并校验 ← 发送 ACK 软件层 ← 数据交付给软件2.6 Virtual Channels (虚拟通道)同一链路上支持多种不同类型的数据流每个 VC 有独立的 Flow Control 缓冲区业务类别 (Traffic Class, TC) 映射到 VC支持 QoS (服务质量)2.7 关键概念速记PCIe 是串行点对点- 无共享总线无反射波问题Dual-Simplex- 双向但不是全双工是两个单向Gen1: 2.5 GT/s, Gen2: 5 GT/s, Gen3: 8 GT/s8b/10b 编码使 Gen1/Gen2 有效载荷率 80%Posted 写不需要 Completer 返回比读更高效Non-Posted 读需要等待 Completion总线效率较低ACK/NAK在 Data Link 层保证 TLP 可靠传输Ordered Sets用于链路训练和管理不经过事务层Root Complex是 PCIe 世界的源头相当于北桥Native vs Legacy Endpoint: Native 用 MMIOLegacy 支持 IO 空间思考题为什么 PCIe 的带宽计算要用 GT/s 而不是直接用 bpsPosted Write 和 Non-Posted Read 在总线效率上有什么区别为什么ACK/NAK 协议和重传机制在哪个层实现为什么要在这个层实现Native PCIe Endpoint 和 Legacy PCIe Endpoint 的区别是什么实际使用中如何判断为什么说 Switch 内部是虚拟 PCI 总线这个设计有什么好处笔记结束