PCIe体系架构详解:从基础概念到系统拓扑
PCIe体系架构详解:从基础概念到系统拓扑
PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,主要用于连接高性能设备,如显卡、网络适配器和存储设备。本文将详细介绍PCIe的基本架构和工作原理。
PCIe简介
PCIe采用双向连接方式,支持同时收发数据,是一种双单工连接。PCIe设备之间的信号传输路径称为链路(Links),一个链路由一个或多个收发通道(Lanes)组成。链路宽度可以是x1、x2、x4、x8、x16或x32,表示链路中包含的lane数量。系统设计时可以在成本和性能之间做出适当的权衡——采用更多的lane可以提供更高的通信带宽,但成本、空间和功耗相应增加。
串行传输
相对于并行传输的优化
并行传输存在时钟偏斜和数据偏斜的问题,而串行传输通过将时钟信号包含于数据流中,解决了这些问题。串行传输中单通道单次传输单比特信号,也不存在数据偏斜的问题(多通道设计中需要引入对齐机制)。
带宽计算
PCIe各版本规范特性如下表所示:
版本 | 发布年份 | 编码方式 | 比特率(GT/s/lane) | 带宽(GB/s/lane) |
---|---|---|---|---|
1.X | 2003 | 8b/10b | 2.5 | 0.5 |
2.X | 2007 | 8b/10b | 5.0 | 1.0 |
3.X | 2010 | 128b/130b | 8.0 | 2.0 |
4.0 | 2017 | 128b/130b | 16.0 | 4.0 |
5.0 | 2019 | 128b/130b | 32.0 | 8.0 |
6.0 | 2022 | 1b/1b | 64.0 | 16.0 |
差分信号传输
PCIe总线中每个lane都采用差分信号进行传输,包含一对发送差分信号对和一对接收差分信号对。虽然这会导致设备的引脚数增加一倍,但其收益非常明显:提高噪声容限、降低信号电压。
基于数据包的传输协议
PCIe中定义了传输事务数据包(Packets)的结构,该结构中包含了事务类型等关键信息,接收方可以通过解析数据包来获取传输事务的类型,从而获悉需要执行什么操作。
PCIe的系统拓扑结构
一条 PCIe 链路必须是一个点对点的连接,但可以通过通过交换机(Switches)和桥(Bridges)来构建灵活的系统拓扑,下图为一个简单的示例。
PCIe只允许树结构,不允许出现循环或其他复杂拓扑结构,这么做是为了保持与PCI软件的向后兼容性。CPU通常为PCIe层次结构的顶端。
根组件(Root Complex,RC)
CPU与PCIe总线之间的接口可能包含一系列的组件(处理器接口,DRAM 接口等等),甚至是包含多个芯片。将这些组件合起来,称这一组组件为根组件(Root Complex,RC,Root),位于树状拓扑的“根部”,并代表 CPU 与系统的其余部分通信。
上行端口与下行端口
- 上行端口(Upstream Port)指的是拓扑结构的向上的端口,如图中endpoint向上连接switch的端口,PCIe中的设备必须且仅能有1个上行端口;
- 下行端口(Downstream Port)与上行端口在拓扑意义上相反,PCIe中的设备必可以有若干个下行端口。
交换机与桥 (Switches and Bridges)
- 交换机(Switches)使得单个 PCIe 端口上可以连接更多的设备,它作为数据包的路由器,可根据数据包提供的路由信息来识别其路由路径。Switch可以有若干个下行端口;
- 桥(Bridges)提供了一个通往其他总线的接口,例如 PCI 或者 PCI-X,或其他的 PCIe 总线。
端点(Endpoints)
Endpoints是系统中即不是switches也不是bridges的设备,位于树状拓扑分支底部,只能有1个上行端口。Endpoints可以作为总线上事务的发起者或完成者。
PCIe端点分为原生PCIe端点(Native PCIe Endpoints)和传统PCIe端点(Legacy PCIe Endpoints)。原生 PCIe 端点是从一开始就被设计用来在 PCIe 系统中使用的,是内存映射设备;而传统 PCIe 端点则是用于老式总线(例如 PCI-X)的设备,在PCIe系统中可能使用了在 PCIe 设计中被禁止的东西,例如 IO 空间、支持 IO 事务以及支持锁定请求,在此暂不讨论。