[PCIE] 1 - PCI Express 简介

本文介绍了PCI Express(PCIe)的基础知识,包括其向后兼容PCI的软件特性,串行传输的优势,如高速、差分信号和无公共时钟设计。PCIe使用双单工连接,支持多个车道(lanes)以提供可扩展的带宽,允许灵活的系统拓扑。文章还探讨了带宽计算、数据包协议和系统中各种组件的角色,如Root Complex、Switches和Bridges。
摘要由CSDN通过智能技术生成

本系列文章目录:
[PCIE] 1 - PCI Express 简介
[PCIE] 2 - 设备层简介
[PCIE] 3 - 协议回顾示例


PCI Express 简介

PCI Express 代表了其前身并行总线模型的重大转变。 作为串行总线,它与早期的串行设计(如 InfiniBand 或光纤通道)有更多共同点,但它在软件上仍与 PCI 完全向后兼容。

与许多高速串行传输一样,PCIe 使用双向连接并且能够同时发送和接收信息。 使用的模型被称为双单工连接,因为每个接口都有一个单工发送路径和一个单工接收路径,如图 2-1 所示。由于同时允许双向通信,因此 两个设备之间的通信路径在技术上是全双工的,但规范使用术语双单工,因为它更能描述实际存在的通信通道。
在这里插入图片描述
设备之间的这条路径的术语是链路,由一个或多个发送和接收对组成。 一对这样的对称为车道,规范允许链接由 1、2、4、8、12、16 或 32 条车道组成。 车道数称为链路宽度,表示为 x1、x2、x4、x8、x16 和 x32。 在给定设计中使用的通道数量的权衡是直接的:更多的通道增加了链路的带宽,但增加了它的成本、空间需求和功耗。
在这里插入图片描述

软件向后兼容性

PCIe 最重要的设计目标之一是向后兼容 PCI 软件。鼓励从已经安装并在现有系统中工作的设计迁移需要两件事:首先,令人信服的改进,即使考虑更改也能激励;其次,最小化更改的成本、风险和工作量。在计算机中帮助第二个因素的一种常见方法是保持为旧模型编写的软件在新模型中的可行性。为了在 PCIe 上实现这一点,所有用于 PCI 的地址空间都保持不变或简单地扩展。内存、IO 和配置空间仍然对软件可见,并以与以前完全相同的方式进行编程。因此,多年前为 PCI 编写的软件(BIOS 代码、设备驱动程序等)今天仍然适用于 PCIe 设备。配置空间已显着扩展,包括许多新寄存器以支持新功能,但旧寄存器仍然存在并且仍可通过常规方式访问。

串行传输

速度的必要性

当然,串行模型必须比并行设计运行得快得多才能实现相同的带宽,因为它一次只能发送一个比特。不过,事实证明这并不困难,而且过去 PCIe 以 2.5 GT/s 和 5.0 GT/s 的速度可靠地工作。可以达到这些速度和更高速度(8 GT/s)的原因是串行模型克服了并行模型的缺点。

克服问题

回顾一下,有一些限制并行总线性能的问题,其中三个在图 2-3 中进行了说明。首先,请回想并行总线使用公共时钟;输出在一个时钟沿输出,并在下一个时钟沿输入接收器。这个模型的一个问题是从发射器向接收器发送信号所花费的时间,称为飞行时间。飞行时间必须小于时钟周期,否则模型将无法工作,因此选择更小的时钟周期是具有挑战性的。为了使这成为可能,走线必须变得更短并减少负载,但最终这变得不切实际。另一个因素是时钟到达发送方和接收方的时间不同,称为时钟偏差。电路板布局设计师努力将这个值最小化,因为它会减少时序预算,但它永远不会被消除。第三个因素是信号偏移,即给定时钟所需的所有信号的到达时间差异。显然,在所有位都准备好且稳定之前无法锁存数据,因此我们最终会等待最慢的位。
在这里插入图片描述
像 PCIe 这样的串行传输如何解决这些问题?首先,飞行时间不再是问题,因为将数据锁存到接收器的时钟实际上是内置在数据流中的,不需要外部参考时钟。结果,时钟周期有多小或信号到达接收器需要多长时间都没有关系,因为时钟是同时到达的。出于同样的原因,没有时钟偏移,同样是因为锁存时钟是从数据流中恢复的。最后,信号偏差在通道内被消除,因为只有一个数据位被发送。如果使用多通道设计,信号偏斜问题会再次出现,但接收器会自动对此进行校正,并且可以修复大量偏斜。尽管串行设计克服了并行模型的许多问题,但它们也有其自身的复杂性。尽管如此,正如我们稍后将看到的,这些解决方案是易于管理的,并且允许高速、可靠的通信。

带宽

PCIe 支持的高速和宽链路的组合可以产生一些令人印象深刻的带宽数字,如表 2-1 所示。这些数字来自比特率和总线特性。 其中一个特点是,与许多其他串行传输一样,前两代 PCIe 使用称为 8b/10b 的编码过程,该过程基于 8 位输入生成 10 位输出。 尽管这会带来开销,但我们稍后会看到这样做有几个很好的理由。现在知道发送一个字节的数据需要发送 10 位就足够了。第一代(Gen1 或 PCIe 规范版本 1.x)比特率为 2.5 GT/s,除以 10 意味着一个通道将能够发送 0.25 GB/s。由于 Link 允许同时发送和接收,总带宽可以是该数量的两倍,即每条通道 0.5 GB/s。将第二代(Gen2 或 PCIe 2.x)的频率加倍使带宽加倍。第三代(Gen3 或 PCIe 3.0)再次将带宽加倍,但这次规范编写者选择不加倍频率。相反,出于我们稍后将讨论的原因,他们选择仅将频率提高到 8 GT/s 并移除 8b/10b 编码,转而采用另一种称为 128b/130b 编码的编码机制(有关此内容的更多信息。表 2-1 总结了所有当前可能组合的可用带宽,并显示了链路在该配置中可以提供的峰值吞吐量。
在这里插入图片描述

PCIe 带宽计算

要计算上表中包含的带宽数,请参阅下面列出的计算。

  • Gen1 PCIe 带宽 =(2.5 Gb/s x 2 个方向)/每个符号 10 位 = 0.5 GB/s。
  • Gen2 PCIe 带宽 =(5.0 Gb/s x 2 个方向)/每个符号 10 位 = 1.0 GB/s。
    请注意,在上述计算中,我们除以每个符号 10 位而不是每个字节 8 位,因为 Gen1 和 Gen2 协议都要求在数据包传输之前使用 8b/10b 编码方案对数据包字节进行编码。
  • Gen3 PCIe 带宽 =(8.0 Gb/s x 2 个方向)/每字节 8 位 = 2.0 GB/s。

请注意,在 Gen3 速度下,我们除以每个字节 8 位而不是每个符号 10 位,因为在 Gen3 速度下,数据包不是 8b/10b 编码,而是 128b/130b 编码。 每 128 位增加 2 位开销,但不足以在计算中考虑。
这 3 个计算出的带宽数乘以链路宽度,得出多通道链路上的总链路带宽。

差分信号

每个通道使用差分信号,发送相同信号的正和负版本(D+ 和 D-),如图 2-4 所示。这当然会使引脚数加倍,但这是偏移量与单端信号相比对高速信号很重要的两个明显优势:提高抗噪能力和降低信号电压。
差分接收器获取两个信号并从正信号中减去负电压,以找出它们之间的差异并确定位的值。差分设计中内置了抗噪性,因为成对信号位于每个器件的相邻引脚上,并且它们的走线也必须彼此非常靠近,以保持适当的传输线阻抗。因此,任何影响一个信号的东西也会以相同的量和相同的方向影响另一个信号。接收器正在查看它们之间的差异,而噪声并没有真正改变这种差异,因此结果是影响信号的大多数噪声不会影响接收器准确区分比特的能力。
在这里插入图片描述

没有公共时钟

如前所述,PCIe 链路不需要公共时钟,因为它使用源同步模型,这意味着发送器将时钟提供给接收器以用于锁存输入数据。 PCIe 链路不包括转发时钟。相反,发送器使用 8b/10b 编码将时钟嵌入到数据流中。然后接收器从数据流中恢复时钟并使用它来锁存输入数据。尽管这听起来很神秘,但完成此操作的过程实际上相当简单。在接收器中,一个 PLL 电路(锁相环,参见图 2-5)将输入比特流作为参考时钟,并将其时序或相位与它创建的输出时钟的时序或相位进行比较指定的频率。根据该比较的结果,输出时钟的频率会增加或减少,直到获得匹配。此时,PLL 被锁定,输出(恢复)时钟频率与用于传输数据的时钟精确匹配。 PLL 不断调整恢复的时钟,因此影响发送器时钟频率的温度或电压变化将始终得到快速补偿。
关于时钟恢复需要注意的一件事是 PLL 确实需要在输入上进行转换才能进行相位比较。如果数据经过很长时间没有任何转换,则 PLL 可能会开始偏离正确的频率。为防止该问题,8b/10b 编码的设计目标之一是确保比特流中不超过 5 个连续的 1 或 0。
在这里插入图片描述
时钟恢复后,它用于将输入数据流的位锁存到解串器中。有时学生想知道这个恢复的时钟是否可以用来为接收器中的所有逻辑提供时钟,但事实证明答案是否定的。一个原因是接收器不能指望此参考始终存在,因为链路上的低功率状态涉及停止数据传输。因此,接收器还必须有自己的可以在本地生成的内部时钟。

基于数据包的协议

从并行传输到串行传输大大减少了传输数据所需的引脚。与大多数其他基于串行的协议一样,PCIe 也通过消除并行总线中常见的大多数边带控制信号来减少引脚数。然而,如果没有指示接收信息类型的控制信号,接收器如何解释输入比特? PCIe 中的所有事务都以定义的称为数据包的结构发送。接收器找到数据包边界,并知道预期的模式,解码数据包结构以确定它应该做什么。

Links和Lanes

如前所述,两个 PCIe 设备之间的物理连接称为 Link,由一个或多个 Lanes 组成。每个通道由一个差分发送和接收信号对组成,如图 2-2 所示。一个通道足以满足设备之间的所有通信,不需要其他信号。
可扩展的性能
然而,使用更多的 Lanes 会提高 Link 的性能,这取决于它的速度和 Link 宽度。例如,使用多个通道会增加每个时钟可以发送的比特数,从而提高带宽。如前面表 2-1 中所述,规范支持的通道数包括 2 到 32 通道的幂。还支持 x12 链路,这可能旨在支持早期串行设计 InfiniBand 使用的 x12 链路宽度。允许各种链接宽度允许平台设计人员在成本和性能之间做出适当的权衡,根据通道的数量轻松地放大或缩小。

灵活的拓扑选项

链路必须是点对点连接,而不是像 PCI 这样的共享总线,因为它使用的速度非常快。 由于链路因此只能连接两个接口,因此需要一种将连接散开的方法来构建一个重要的系统。 这是在 PCIe 中通过使用交换机和桥接器实现的,这允许灵活地构建系统拓扑 - 系统中元素之间的连接集。 下节给出了系统中元素的定义和一些拓扑示例。

一些定义

图 2-6 中显示了一个简单的 PCIe 拓扑示例,这将有助于说明此时的一些定义。
在这里插入图片描述

Topology特性

图的顶部是 CPU。这里要说明的是,CPU 被认为是 PCIe 层次结构的顶部。就像 PCI 一样,PCIe 只允许简单的树形结构,这意味着不允许循环或其他复杂的拓扑。这样做是为了保持与 PCI 软件的向后兼容性,该软件使用简单的配置方案来跟踪拓扑并且不支持复杂的环境。
为了保持这种兼容性,软件必须能够以与以前相同的方式生成配置周期,并且总线拓扑必须与以前相同。因此,软件期望找到的所有配置寄存器仍然存在,并且以它们一直具有的相同方式运行。在我们有机会定义更多术语之后,我们稍后会回到这个讨论。

Root Complex

CPU 和 PCIe 总线之间的接口可能包含多个组件(处理器接口、DRAM 接口等),甚至可能包含多个芯片。该组统称为Root Complex(RC 或 Root)。 RC 位于 PCI 倒树拓扑的“根”,代表 CPU 与系统的其余部分进行通信。不过,规范并没有仔细定义它,而是给出了一个必需和可选功能的列表。从广义上讲,Root Complex 可以理解为系统 CPU 和 PCIe 拓扑之间的接口,PCIe Ports 在配置空间中被标记为“Root Ports”。

Switches和Bridges

交换机提供扇出或聚合功能,并允许将更多设备连接到单个 PCIe 端口。它们充当数据包路由器,并根据其地址或其他路由信息识别给定数据包需要采用的路径。
桥接器为其他总线提供接口,例如 PCI 或 PCI-X,甚至是另一个 PCIe 总线。“示例 PCIe 拓扑”中显示的桥接有时称为“正向桥接”,它允许将较旧的 PCI 或 PCI-X 卡插入新系统。相反类型或“反向桥接”允许将新的 PCIe 卡插入旧的 PCI 系统。

原生PCIe Endpoints和传统PCIe Endpoints

端点是 PCIe 拓扑中的设备,它们不是交换机或桥接器,并且充当总线上事务的发起者和完成者。它们位于树拓扑分支的底部,仅实现一个上游端口(面向根)。相比之下,一台交换机可能有多个下行端口,但只能有一个上行端口。为运行 PCI-X 等旧总线而设计但现在具有 PCIe 接口的设备在配置寄存器中将自己指定为“传统 PCIe 端点”,并且此拓扑包括一个。它们利用了较新的 PCIe 设计中禁止使用的东西,例如 IO 空间和对 IO 事务或锁定请求的支持。相比之下,“原生 PCIe 端点”是从头开始设计的 PCIe 设备,而不是在旧的 PCI 设备设计中添加 PCIe 接口。 Native PCIe Endpoints 设备是内存映射设备(MMIO 设备)。

Software Compatibility特征

与旧软件保持兼容性的一种方法是端点和桥接器的配置头,如图 2-7 所示,与 PCI 保持不变。现在的一个区别是网桥通常被聚合到交换机和根中,但遗留软件没有意识到这种区别,并且仍然简单地将它们视为网桥。在这一点上,我们只是想熟悉概念,所以我们不会在这里深入研究寄存器的细节。
在这里插入图片描述
为了说明系统对软件的显示方式,请考虑图 2-8 中所示的示例拓扑。和以前一样,根位于层次结构的顶部。 Root 内部可能相当复杂,但它通常会实现一个内部总线结构和几个桥接器,以将拓扑扇出到多个端口。 该内部总线将在配置软件中显示为 PCI 总线编号为零,而 PCIe 端口将显示为 PCI 到 PCI 桥。 这种内部结构不太可能是实际的 PCI 总线,但对于为此目的的软件来说,它会以这种方式出现。 由于这个总线在根内部,它的实际逻辑设计不必符合任何标准,并且可以是特定于供应商的。
在这里插入图片描述
以类似的方式,交换机的内部组织,如图 2-9 所示,对于软件来说将显示为共享公共总线的桥的集合。 这种方法的一个主要优点是它允许事务路由以与 PCI 相同的方式发生。 枚举,配置软件发现系统拓扑并分配总线编号和系统资源的过程,也以相同的方式工作。 稍后我们将看到枚举如何工作的一些示例,但一旦完成,系统中的总线号将全部按照图 2-9 所示的方式分配。
在这里插入图片描述

系统示例

图 2-10 展示了一个基于 PCIe 的系统示例,该系统专为消费台式机等低成本应用而设计。 实现了一些 PCIe 端口以及一些附加卡插槽,但基本架构与旧式 PCI 系统没有太大区别。
相比之下,图 2-11 所示的高端服务器系统显示了系统中内置的其他网络接口。 在 PCIe 的早期,人们曾考虑过将其作为网络运行的电缆,以取代那些旧型号。 毕竟,如果 PCIe 基本上是其他网络协议的简化版本,它不能满足所有需求吗? 由于各种原因,这个概念从未真正获得过很大的推动力,基于 PCIe 的系统通常仍然使用其他传输方式连接到外部网络。
这也让我们有机会重新审视什么是根复合体的问题。 在此示例中,标记为“英特尔处理器”的块包含许多组件,大多数现代 CPU 架构都是如此。 这个包括一个用于访问图形的 x16 PCIe 端口和 2 个 DRAM 通道,这意味着内存控制器和一些路由逻辑已集成到 CPU 封装中。 总的来说,这些资源通常被称为“Uncore”逻辑,以将它们与封装中的几个 CPU 内核及其相关逻辑区分开来。 由于我们之前将 Root 描述为 CPU 和 PCIe 拓扑之间的接口,这意味着 Root 的一部分必须在 CPU 封装内。 如图 2-11 中的虚线所示,这里的 Root 由几个包的一部分组成。 这可能是许多未来系统设计的情况。
在这里插入图片描述

在这里插入图片描述


如果你想了解更多
[PCIE] 2 - 设备层简介
[PCIE] 3 - 协议回顾示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山猫Show

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值