不用通用时钟
(关于Common Clock和Forwarded Clock参阅时钟架构类型)
如前所述,PCIe Link不需要通用时钟(Common Clock),因为它使用源同步模型,这意味着发送器将时钟提供给接收器以用于锁存输入数据。PCIe链路不包含前向(Forwarded Clock)的时钟。相反,发送器使用8b/10b编码将时钟嵌入数据流中。然后,接收器从数据流中恢复时钟,并使用它来锁存传入的数据。这听起来可能很神秘,但实际上完成这一过程非常简单。在接收器中,PLL电路(锁相环,参见图2-5)将进入的位流作为参考时钟,并将其时序或相位与其所创建的具体频率的输出时钟的时序或相位进行比较。根据比较结果,可以提高或降低输出时钟的频率,直到获得匹配为止。那时,PLL被锁定,并且输出(恢复的)时钟频率与用于传输数据的时钟精确匹配。PLL不断调整恢复的时钟,因此,影响发射器时钟频率的温度或电压变化将始终得到快速补偿。
关于时钟恢复要注意的一件事是,PLL确实需要在输入上进行转换以进行相位比较。如果经过很长时间而没有任何数据跃迁,则PLL可能会开始偏离正确的频率。为避免该问题,8b/10b编码的设计目标之一是确保位流中的连续的1或零不超过5个。
由于串行链路中会有交流耦合电容,理想电容的阻抗公式是Zc=1/2πf*C。因此信号频率越高,阻抗越低,反之频率越低,阻抗越高。当码型是为“0”、“1”交替出现时,码型的频率,则电容阻抗低,信号基本上可以不损耗的传输过去;但是当码型为连续“0”或者“1”的情况时,码型的频率低,则电容阻抗大,导致信号幅度不断降低,带来的严重后果是无法识别到底是“1”还是“0”。因此编码就是为了尽量把低频的码型优化成较高频的码型,从而保证低损耗的传输过去。
CSDN番茄很甜的文章:8b/10b编码
图2-5 简单的PLL框图
时钟恢复后,就可以将传入数据流的位锁存到解串器(deserializer)中。有时,学生会想知道是否可以使用此接收到的时钟来为接收器中的所有逻辑提供时钟,但事实证明答案是否定的。原因之一是接收器不能指望始终存在该参考,因为链路上的低功耗状态会导致数据传输停止。因此,接收器还必须具有自己的内部时钟,可以在本地生成。
基于数据包的协议
从并行传输到串行传输大大减少了传输数据所需的引脚。与大多数其他基于串行的协议一样,PCIe也通过消除通常在并行总线中有的大多数边带(sideband,边带指调制后的信号)控制信号来减少引脚数。但是,如果没有控制信号表示接收到的信息类型,那么接收器如何解析输入的比特?PCIe中的所有事务都以定义的结构(称为数据包)发送。接收器找到数据包边界,并知道期望的模式,对数据包结构进行解码以确定其应采取的措施。
在“ TLP元素”一章中介绍了基于数据包的协议的详细信息,但是可以在本章中找到各种数据包类型及其用途的概述。
Links 和Lanes
如前所述,两个PCIe设备之间的物理连接称为链路(link),由一个或多个通道(lane)组成。每个通道(lane)包含一对差分发送和一对差分接收信号,如图2-2所示,一个通道足以满足设备之间的所有通信,并且不需要其他信号。
可扩展的性能
但是,使用更多的通道会提高链路(link)的性能,这取决于它的速度和链路宽度。例如,使用多个通道(lane)会增加每个时钟可以发送的位数,从而提高带宽。如之前表2-1中所述,规范支持的通道数包括2的幂,最高为32通道。还支持x12链路,该链路可能旨在支持早期串行设计InfiniBand使用的x12链路宽度。允许各种链路宽度允许平台设计人员在成本和性能之间进行适当的折衷,并可以根据通道数轻松地扩大或缩小规模。
灵活的拓扑选项
链路必须是点对点连接,而不是像PCI这样的共享总线,因为它使用的速度很高。由于Link只能连接两个接口,因此需要一种散布连接的方法来构建非琐碎的系统。这是通过使用交换器和网桥在PCIe中完成的,这可以灵活地构建系统拓扑-系统中元素之间的连接集。下一节给出了系统中元素的定义和一些拓扑示例。
一些定义
图2-6中显示了一个简单的PCIe拓扑示例,这将有助于说明此时的一些定义。
图2-6 PCIe拓扑示例
拓扑特征
该图的顶部是一个CPU。这里要说明的是,CPU被视为PCIe层次结构的顶部。与PCI一样,PCIe只允许使用简单的树结构,这意味着不允许使用循环或其他复杂的拓扑。这样做是为了保持与PCI软件的向后兼容性,后者使用简单的配置方案来跟踪拓扑,并且不支持复杂的环境。
为了保持这种兼容性,软件必须能够以与以前相同的方式生成配置周期,并且总线拓扑必须与以前相同。因此,软件希望找到的所有配置寄存器仍然存在并且以它们始终具有的相同方式运行。我们将会稍后讨论这一块的内容,在此之前,我们需要先定义一些术语。
根复合体(Root Complex)
CPU和PCIe总线之间的接口可能包含多个组件(处理器接口,DRAM接口等),甚至可能包含多个芯片。该组统称为根复合体(RC或Root)。RC驻留在PCI倒置树的拓扑的“根部”,并代表CPU来与系统的其余部分通信。但是,规范并未完全定义它,而是提供了必需功能和可选功能的列表。从广义上讲,根复合体可以理解为系统CPU与PCIe拓扑之间的接口,在配置空间中PCIe端口标记为“根端口”(Root Ports)。
交换器和桥(Switches and Bridges)
交换器(switch暂译为交换器,按照文意,就是交换结构)提供扇出或聚合功能,并允许将更多设备连接到单个PCIe端口。它们充当数据包路由器,并根据其地址或其他路由信息识别给定数据包需要走的路径。
桥接器(Bridges)提供到其他总线的接口,例如PCI或PCI-X,甚至是另一个PCIe总线。上文图2-6“PCIe拓扑示例”中显示的桥有时也称为“前向桥”(forward bridge),并允许将较旧的PCI或PCI-X卡插入新系统。和“前向桥”类型相反的桥或者叫“反向桥接”(reverse bridge)的桥允许将新的PCIe卡插入旧的PCI系统。
原生(Native)PCIe端点和旧式PCIe端点
注:Native一词暂译为原生,找了一个英文对Native放在此处合适解释是:designed for or built into a given system, especially denoting the language associated with a given processor, computer, or compiler, and programs written in it.词根的大致意思是非移民,原本就有,就出生在这里的人。根据前后文就是专门为PCIe设计的端点的意思。
端点(Endpoints)是PCIe拓扑中的设备,既不是交换器或桥接器,而是充当总线上的事务的发起者和完成者。它们位于树形拓扑分支的底部,并且仅实现单个上游端口(面向根(Root))。相比之下,一台交换机可能有多个下行端口,但只能有一个上行端口。专为运行较早的总线(如PCI-X)而设计的设备,现在具有可以使用的PCIe接口,它们在配置寄存器中将自己指定为“传统PCIe端点”。它们使用了新的PCIe设计中禁止的功能,例如IO空间以及对IO事务或锁定请求的支持。相反,“原生PCIe端点”是从头开始为PCIe设备设计的,而不是将PCIe接口添加到旧的PCI设备设计中。原生PCIe端点设备是内存映射设备(MMIO设备)。
软件兼容性特征
保持与旧软件的兼容性的一种方法是,端点(Endpoints)和网桥(bridges/或叫桥)的配置头(如图2-7所示)与PCI相同。现在的一个区别是,网桥通常被汇总到交换器和根(Roots)中,但是旧版软件并不能区分这种差别,仍然会简单地将它们视为网桥。在这一点上,我们只需熟悉这些概念,因此在这里我们将不讨论寄存器的详细信息。
图2-7 配置头
为了说明系统在软件显示的方式,图2-8中所示的示例拓扑。像以前一样,根(Root)位于层次结构的顶部。Root内部可能非常复杂,但通常会实现内部总线结构和多个网桥,以将拓扑散布到多个端口。在配置软件中,该内部总线将被视为为PCI总线编号0,而PCIe端口将显示为PCI到PCI的桥接器。这种内部结构不太可能是实际的PCI总线,但为此目的,它将以这种方式出现在软件中。由于该总线是Root的内部总线,因此它的实际逻辑设计不必符合任何标准,并且可以是供应商特定的。
图2-8 拓扑示例
以类似的方式,图2-9所示的Switch的内部组织在软件上看起来就像是共享公共总线的桥的集合。这种方法的主要优点是,它允许事务路由以与PCI相同的方式进行。枚举(配置软件发现系统拓扑并分配总线号和系统资源的过程)也以相同的方式工作。我们将在以后看到枚举的工作方式的一些示例,但是一旦完成枚举,系统中的总线编号将按照图2-9所示的方式进行分配。
图2-9 系统枚举的示例结果
系统实例
图2-10展示了一个为低成本应用(如消费类台式机)设计的,基于PCIe的系统的示例。虽然在实现了一些PCIe端口时附加卡插槽,但是基本体系结构与旧式PCI系统并没有太大区别。
相比之下,图2-11所示的高端服务器系统展示了系统中内置的其他网络接口。在早期的PCIe中,人们曾考虑过将其作为网络来操作用以替代那些旧型号。毕竟,如果PCIe本质上是其他网络协议的简化版本,难道它不能满足所有需求吗?出于各种原因,该概念从未真正被大力发展,基于PCIe的系统通常仍使用其他传输器连接到外部网络。
这也使我们有机会重新探讨什么是根复合体(RC)。在此示例中,标记为“英特尔处理器”的块包含许多组件,这与大多数现代CPU架构一样。这包括一个用于访问图形设备的x16 PCIe端口和2个DRAM通道,这意味着内存控制器和某些路由逻辑已集成到CPU封装中。总的来说,这些资源通常称为“ Uncore”逻辑,以将它们与包中的多个CPU内核及其关联的逻辑区分开。由于我们之前将根(Root)描述为CPU与PCIe拓扑之间的接口,因此这意味着根的一部分必须位于CPU封装内。如图2-11中的虚线所示,此处的根由几个软件包的一部分组成。对于许多将来的系统设计,情况可能就是这样。
图2-10 低成本PCIe系统
图2-11 服务器PCIe系统
没有回复内容