PCIe 事务层(Transaction Layer)详解

张开发
2026/6/6 2:44:11 15 分钟阅读
PCIe 事务层(Transaction Layer)详解
1. 事务层概述事务层Transaction Layer是 PCIe 架构的最上层负责在 RCRoot Complex与 EPEndpoint之间发起和完成各类事务。事务层决定了 PCIe 支持的地址空间类型、事务种类、TLP 格式、路由方式以及排序规则。事务层的数据包称为 TLPTransaction Layer Packet每个 TLP 由 Header、Data Payload可选和 ECRC可选三部分组成。1.1 PCIe 版本与传输速率版本编码方式传输速率单通道吞吐量PCIe 1.08b/10b2.5 GT/s250 MB/sPCIe 2.08b/10b5 GT/s500 MB/sPCIe 3.0128b/130b8 GT/s984.6 MB/sPCIe 4.0128b/130b16 GT/s1.969 GB/sPCIe 5.0128b/130b32 GT/s3.938 GB/s1.2 地址空间与事务类型PCIe 事务层定义了四种地址空间地址空间事务类型基本用法MemoryRead / Write读写一段 MMIO 区域I/ORead / Write兼容 Legacy 设备的 IO-mapped 区域ConfigurationRead / Write访问设备的 Function 配置寄存器MessageBaseline / Vendor-defined带内消息事件传递如中断、错误报告注Memory Write 和 Message 为 Posted 事务无需 Completion 响应其他均为 Non-Posted 事务需要接收端返回 Completion。1.3 Memory 事务详解1.3.1 支持的事务类型Memory Read RequestMRd读请求需返回 Completion DataMemory Read LockedMRdLk锁定读已废弃Memory Write RequestMWr写请求Posted 事务无需 CompletionAtomic Operation Request原子操作FetchAdd / Swap / CAS保证读-改-写原子性1.3.2 地址格式32-bit 短地址兼容旧设备64-bit 长地址支持大容量寻址1.4 I/O 事务仅支持 32-bit 短地址主要用于兼容传统 PCI/PCI-X 设备。支持 IORd 和 IOWr 两种事务。1.5 Configuration 事务用于读写 PCIe 设备的配置寄存器访问 PCI Compatible Configuration SpaceType 0 用于 EPType 1 用于 Bridge/Switch 端口。1.6 Message 事务支持 PCIe Spec 定义的 Message 和 Vendor-defined Message用于带内事件信号传递。常见 Message 类型包括INTx Assert / Deassert传统中断信号PME_Turn_Off / PME_To_Ack电源管理消息ERR_*错误报告消息ERR_COR / ERR_NONFATAL / ERR_FATAL2. TLP 格式详解2.1 TLP 基本结构字段说明长度TLP Prefix可选用于扩展 TLP 功能Local / End-to-End1-2 DWHeader事务类型、路由、长度等关键信息3 DW 或 4 DWData Payload实际传输的数据0-1024 DWECRC端到端 CRC可选需要 TD 位1 DW2.2 TLP Header 结构2.2.1 Fmt[2:0] Type[4:0] — 定义事务类型Fmt[2:0]Type[4:0]事务类型00000_00000Memory Read Request00000_00010Memory Write Request00000_00100IO Read Request00000_00101IO Write Request00000_01000Configuration Type0 Read00000_01001Configuration Type0 Write00000_01010Completion (CplD / CPL)00000_01100Fetch and Add AtomicOp00000_01101Unconditional Swap AtomicOp00000_01110Compare and Swap AtomicOp10rrr_xxxxxMessage Request路由方式由 rrr 决定2.2.2 TC[2:0] — 流量等级Traffic Class 用于定义不同优先级的通信通道PCIe 最多支持 8 个 TC对应 8 个 Virtual Channel。TC 值越高通常意味着优先级越高。2.2.3 Attr — 属性字段IDOID-based Ordering启用时允许不同 Requester ID 的事务不遵守排序规则RORelaxed Ordering允许 posted 事务超越前面被阻塞的 non-posted 事务No Snoop告知下游缓存是否需要执行 snoop 操作2.2.4 TD / EP — 错误指示TDTLP Digest1 Header 后跟 ECRCEPPoisoned Data1 数据损坏接收端应丢弃2.2.5 AT[1:0] — 地址类型AT[1:0]0Normal 地址1Translate 地址已通过 IOMMU 转换2保留2.2.6 Length[9:0] — 数据长度以 DW32-bit为单位取值范围 1-1024表示该 TLP 所携带的数据双字个数。2.3 TLP 路由规则2.3.1 地址路由Address Routing用于 Memory Request 和 IO Request。接收端将 TLP Header 中的地址与本地 BAR 或映射范围比较匹配则接收否则转发。Memory Read / Write根据目标地址在地址映射表中查找IO Read / Write同内存地址路由但仅支持 32-bit 地址2.3.2 ID 路由ID Routing用于 Configuration Request 和 Completion。路由信息包含 Bus Number[7:0]、Device Number[4:0]、Function Number[2:0]。ARIAlternative Routing-ID Interpretation扩展后Device Number 被合并到 Function Number支持最多 256 个 Function。2.3.3 隐式路由Implicit RoutingMessage 事务支持隐式路由Local留在当前设备、Root Complex Event Collector发给 RC、Broadcast from RC来自 RC 的广播。2.4 事务描述符Transaction Descriptor事务描述符是 PCIe 协议中用于唯一标识和跟踪一个事务的元数据包含三个字段Transaction ID由 Requester IDBus[8]Dev[5]Func[3] Tag[8] 组成Attr FieldIDO / RO / No Snoop 属性TC Field流量等级3. 流控机制Flow Control3.1 流控原理PCIe 采用基于信用的流控机制。接收端维护 VC BufferVirtual Channel Buffer随时向发送端报告可用缓存空间。发送端在信用充足时才发送 TLP避免因接收端 buffer 溢出导致数据丢失和重传。3.2 VC Buffer 类型Buffer 类型说明PPostedHeaderPosted 事务 TLP Header 占用NPNon-PostedHeaderNon-Posted 事务 Header如 MRdCplCompletionHeaderCompletion HeaderP DataPosted 事务数据 PayloadNP DataNon-Posted 事务数据 PayloadCpl DataCompletion 数据3.3 流控初始化流程DLCMSMFlow Control 初始化在物理层 Link Training 完成后进行由数据链路层的 DLCMSMData Link Control and Management State Machine管理DL_Inactive物理层通知链路不可用如 ResetDL_Feature发送 DL_Down 信号交换数据链路层特征可选DL_Init初始化 VC0FC_INIT1 报告 DL_DownFC_INIT2 报告 DL_UpDL_Active链路正常工作报告 DL_Up4. 排序机制Transaction Ordering4.1 Strong Ordering传统 PCI 模式所有 TLP 严格按到达顺序通过同一 VC 转发先到先发。该模式保证了数据一致性但在混合 Posted / Non-Posted / Completion 流量时效率较低。4.2 Relaxed OrderingRO同一 VC 内Posted 事务MWr、Msg允许超越前面被阻塞的 Non-Posted 读请求提高总线利用率。RO 由 TLP Header 的 Attr 字段控制。排序规则同一 VC 内Posted Write 可以超越前面的 Posted WritePosted Write 可以超越前面的 Non-Posted Read被阻塞时Completion 可以超越前面的 Posted Write4.3 ID-based OrderingIDO在虚拟化场景下不同 VF/VM 发出的事务属于不同数据流IDO 允许不同流的事务互不阻塞有效提升多租户场景的带宽利用率。5. 中断机制5.1 传统 INTx 中断PCIe 通过带内 Message 模拟传统 PCI 的 INTx#边带信号INTx Assert中断触发和 INTx Deassert中断解除。5.2 MSIMessage Signaled InterruptMSI 是 PCIe 推荐的原生中断方式通过 Memory Write 事务向指定地址写入中断消息MSI Address[31:2]中断消息目标地址由 APIC 分配MSI Data[15:0]中断向量信息支持 1 / 2 / 4 / 8 / 16 / 32 个中断向量5.3 MSI-XMSI-X 支持更多中断向量2048 个且支持独立寻址每个向量有独立的 Message Address 和 Message Data比 MSI 更灵活是高速外设的主流选择。6. 配置空间与初始化6.1 配置访问机制CAMCompatible Access ModePCI 兼容模式通过 IO 访问 CFG 地址256BECAMEnhanced Configuration Access MechanismPCIe 增强模式通过 MMIO 访问 4KB 配置空间6.2 Type 0 vs Type 1 配置头Type 0EP 设备配置头包含 BAR 寄存器Type 1Bridge/Switch 配置头包含 Subordinate Bus、Secondary Bus 等字段6.3 关键 Capability 结构Capability说明PCI Express Capability链路能力、状态、控制寄存器Power Management CapabilityD0-D3 状态及 ASPM 控制MSI / MSI-X Capability中断向量配置AERAdvanced Error Reporting错误报告能力Device Serial NumberPCI-SIG 分配的设备序列号ARI Capability替代路由ID256 FunctionsATS Capability地址转换服务虚拟化TPHTLP Processing Hints处理提示SR-IOV Capability单根IO虚拟化7. 虚拟化支持7.1 ATSAddress Translation ServicesATS 用于虚拟化场景EP 设备维护 ATCAddress Translation Cache通过地址转换减少 IOMMU 的开销并在请求中携带 PASID 标识进程。7.2 PASIDPASID 是 TLP Prefix 中的一种用于在多个进程共享同一 PCIe Function 时标识请求来自哪个进程配合 IOMMU 实现地址隔离。7.3 SR-IOVSR-IOV 允许单个物理 PCIe 设备虚拟出多个 VFVirtual Function每个 VF 有独立的配置空间和 BAR虚拟机可独占 VF 直接访问硬件提升虚拟化 I/O 性能。8. 参考文档PCI Express Base Specification Revision 5.0DWC_pcie_ctl_dm_databookSynopsys PCIe IP 数据手册DWC_pcie_ctl_overviewSynopsys PCIe IP 概述PCI Express System ArchitectureMindShare

更多文章