首页 理论教育PCIe链路训练简介:PCIExpress体系结构导读

PCIe链路训练简介:PCIExpress体系结构导读

【摘要】:PCIe总线进行链路训练的主要目的是初始化PCIe链路的物理层、端口配置信息、相应的链路状态,并了解链路对端的拓扑结构,以便PCIe链路两端的设备进行数据通信。此时该PCIe设备在进行链路训练时,必须通知对端链路该设备实际使用的链路状态。此外PCIe总线在链路训练过程中,还需要确定数据传送率。PCIe总线进行链路训练时,需要进行RC或者Switch的Link Number和Lane Number的初始化,在第8.2节中将详细介绍这些内容。

PCIe总线进行链路训练的主要目的是初始化PCIe链路的物理层、端口配置信息、相应的链路状态,并了解链路对端的拓扑结构,以便PCIe链路两端的设备进行数据通信。一条PCIe总线提供的链路带宽可以是×1、×2、×4、×8、×12或者×16,但是在这个PCIe链路上所挂接的PCIe设备并不会完全使用这些链路。如一个×4的PCIe设备可能会连接到×16的PCIe链路上。此时该PCIe设备在进行链路训练时,必须通知对端链路该设备实际使用的链路状态。

此外PCIe总线规定,PCIe链路两端的设备所使用的Lane可以错序进行连接,PCIe总线规范将该功能称为“Lane Reversal”。在相同的Lane上,差分信号的极型也可以错序连接,PCIe总线规范将该功能称为Polarity Inversion。这两种错序连接方式如图8-1所示。

978-7-111-29822-9-Part02-93.jpg

图8-1 PCIe设备的错序连接

PCIe总线提供这些连接方式的主要目的是为了方便PCB走线,因为差分信号要求在PCB中等长而且等距。在一个系统中,如果存在多路差分信号时,PCB布线较为困难。PCIe链路允许“Lane Reversal”和“Polarity Inversion”这两个功能,便于PCB Layout工程师根据实际情况为差分信号选择更为合理的走线路径,从而降低PCB的层数。除了PCIe链路,还有许多使用差分信号的串行总线也支持“Lane Reversal”和“Polarity Inversion”这两个功能,但是称呼上有所区别。在一条PCIe链路中,可以同时支持“Lane Reversal”和“Polari-ty Inversion”这两个功能。

PCIe链路进行链路训练时,需要了解PCIe链路两端的连接拓扑结构。一条PCI链路可能使用多个Lane进行数据交换,而数据报文经过不同Lane的延时并不完全相同。PCIe总线进行链路训练时,需要处理这些不同Lane的延时差异,并进行补偿。PCIe总线规范将这个过程称为De-skew。

此外PCIe总线在链路训练过程中,还需要确定数据传送率。PCIe V1.x总线使用的数据传送率为2.5GT/s,PCIe V2.0总线使用5.0GT/s,而PCIe V3.0总线使用8GT/s的数据传送率。当分属不同规范的PCIe设备使用同一个PCIe链路进行连接时,需要统一数据传送率。如一个V1.x的PCIe设备与一个V2.0的RC或者Switch连接时,需要将数据传送率统一为2.5GT/s。在PCIe总线中,如果一个PCIe链路的两端分别连接不同类型的PCIe设备时,将选择较低的数据传送率。值得注意的是,PCIe链路在进行初始化时,首先使用2.5GT/s的数据传送率,之后切换到更高的数据传送率,如5GT/s或者8GT/s。

在讲述PCIe链路训练之前,读者需要了解一些与Link Number和Lane Number相关的基本概念。在多端口RC和Switch中具有多个下游端口,而每个端口可以支持×1、×2、×4等不同宽度的Lane,如图8-2所示。

978-7-111-29822-9-Part02-94.jpg

图8-2 Link Number和Lane Number(www.chuimin.cn)

在一个Switch中存在多个下游链路,并使用0~n进行编号,其中n≤255。这些编号保存在Switch的硬件逻辑中,而不在Switch的配置空间中。这个编号也被称为Link Number,上图所示的Switch中含有两个Link Number,分别为1和2。

在Switch中,还有两类Lane Number,分别是物理“Lane Number”和逻辑“Lane Num-ber”。其中物理“Lane Number”是链路训练之前使用的Lane number。一个PCIe链路的物理“Lane Number”编号为0~n,其中n为PCIe链路的最大Lane Number,如果一个PCIe链路上有8个Lane,则n等于7。

而逻辑“Lane Number”是链路训练结束后使用的Lane Number。如图8-1左图所示,PCIe链路允许错序连接,因此物理“Lane Number”与逻辑“Lane Number”并不相同。物理“Lane Number”与逻辑“Lane Number”的对应关系在链路训练中确定。

除此之外,有些Switch支持多种链路配置方式,假设某个Switch的下游支持8个Lane。这8个Lane可以组成1个PCIe链路,其链路宽度为8;也可以组成2个PCIe链路,每个链路宽度为4;也可以组成4个链路,每个链路宽度为2。

该Switch的物理Lane Number的编号方法不变,都是从0~7,但是逻辑Lane Number的编号方法将有所区别。如图8-2所示的Switch中具有8个Lane,组成两个PCIe链路,其中每条PCIe链路的逻辑Lane Number的编号都为0~3。

PCIe总线进行链路训练时,需要进行RC或者Switch的Link Number和Lane Number的初始化,在第8.2节中将详细介绍这些内容。

PCIe总线进行数据传递时,需要使用时钟进行同步,但是PCIe链路并没有提供这个时钟信号,因此在进行链路训练时,接收端需要从发送端的数据报文中提取接收时钟。PCIe总线规范将这个获得接收时钟的过程称为“Bit Lock”。

在链路训练过程中,PCIe链路需要首先确定COM字符,该字符也标志着链路训练或者链路重训练的开始,PCIe总线规范将确定COM字符的过程称为“Symbol Lock”。如表7-6所示,COM字符为“0011111010”或者“1100000101”,该字符为2个“0”后5个“1”或者2个“1”后5个“0”,非常便于硬件识别。Bit Lock和Symbol Lock的过程也需要在PCIe总线的链路训练中进行。