这两种PLP在链路训练的多个状态机中使用,下文将进一步介绍这两种字符序列。其中TS1序列的主要作用是检测PCIe链路的配置信息,而TS2序列确认TS1序列的检测结果。不同的PCIe链路需要使用不同数目FTS序列,才能使接收端的PLL锁定接收时钟。PCIe设备可以根据链路的使用情况确定当前链路是否处于Electrical Idle状态,而不是必须收到Idle序列后进入该状态。......
2023-10-20
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所示。
图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所示。
图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总线的链路训练中进行。
有关PCI Express体系结构导读的文章
这两种PLP在链路训练的多个状态机中使用,下文将进一步介绍这两种字符序列。其中TS1序列的主要作用是检测PCIe链路的配置信息,而TS2序列确认TS1序列的检测结果。不同的PCIe链路需要使用不同数目FTS序列,才能使接收端的PLL锁定接收时钟。PCIe设备可以根据链路的使用情况确定当前链路是否处于Electrical Idle状态,而不是必须收到Idle序列后进入该状态。......
2023-10-20
图12-11 Capric卡的DMA写过程首先处理器填写Capric卡的WR_DMA_ADR、WR_DMA_SIZE和DCSR2寄存器,经过延时D0之后,这些命令陆续到达Capric卡。Capric卡收到处理器的DMA写请求后,将向RC连续发送存储器写TLP,并由RC将数据写入到主存储器。处理器收到MSI报文后,将执行中断处理程序,Capric卡的中断处理例程通过RC读取中断控制状态寄存器INT_REG,并结束整个DMA写操作。首先处理器填写Capric卡的寄存器启动DMA读。......
2023-10-20
目前虚拟化技术在处理器体系结构中,已经占据一席之地。本章所强调的虚拟化技术是指在一个处理器系统[109]中运行多个虚拟处理器系统的技术。因此处理器需要为虚拟化环境设置专门的硬件,以支持多个虚拟处理器系统在一个物理环境中的资源共享。虚拟化技术的核心是通过VMM集中管理物理资源,而每个虚拟处理器系统通过VMM访问实际的物理资源。本章重点关注的是VMM对外部设备的管理,而在外部设备中重点关注对PCI设备的管理。......
2023-10-20
PCIe设备必须支持L0s状态。L0s状态是一个低功耗状态,PCIe设备进入或者退出该状态不需要系统软件的干预,其状态转换由硬件控制完成。图8-13 L0s的接收状态机接收逻辑RX处于L0状态时,如果收到1个EIOS序列后,将进入Rx_L0s.Entry状态。接收逻辑RX在Rx_L0s.Idle状态中将持续监测接收链路,如果发现对端设备的发送逻辑TX退出“Electrical Idle”状态时,接收逻辑RX将进入Rx_L0s.FTS状态。......
2023-10-20
在一段程序中,存在大量的分支预测指令,因而在某种程度上增加了指令Fetch的难度。但是分支预测单元并不会每次都能正确判断分支指令的执行路径,这为指令Fetch制造了不小的麻烦,在这个背景下许多分支预测策略应运而生。在PowerPC处理器中,条件转移指令“bc”表示Taken;而“bc-”表示Not Taken。BTB的功能相当于存放转移指令的Cache,其状态机转换也与Cache类似。转移指令B执行完毕后,将实际执行结果Rc更新到BHR寄存器中,并同时更新PHT中对应的Entry。......
2023-10-20
如图8-6所示,Detect状态由Detect.Quiet、Detect.Active两个子状态组成。在正常情况下,PCIe链路将从Detect状态迁移到Polling状态。而在Detect状态中,PCIe设备的发送逻辑TX将直接进入到“Electrical Idle”状态,并不会使用Idle序列通知对端设备的接收逻辑RX。当PCIe设备处于Detect.Quiet状态超过12ms之后,或者检测到PCIe链路上的任何一个Lane退出“Electrical Idle”状态时,PCIe设备将进入Detect.Active状态。......
2023-10-20
而PCI总线的突发传送仍然存在缺陷。为此PCI-X总线使用基于数据块的突发传送方式,发送端以ADB为单位,将数据发送给接收端,一次突发读写为一个以上的ADB。采用这种方式,接收端可以事先预知是否有足够的接收缓冲,接收来自发送端的数据,从而可以及时断连当前总线周期,以节约PCI-X总线的带宽。因此在PC领域和嵌入式领域很少有基于PCI-X总线的设备,PCI-X设备仅在一些高端服务器上出现。因此本节不对PCI-X总线做进一步描述。......
2023-10-20
MSI-X Capability中断机制与MSI Capability的中断机制类似。在MSI-X Capability结构中,每一个中断请求都使用独立的Message Address字段和Message Data字段,从而中断控制器可以更加合理地为该设备分配中断资源。与MSI Capability寄存器相比,MSI-X Capability寄存器使用一个数组存放Message Ad-dress字段和Message Data字段,而不是将这两个字段放入Capability寄存器中,本书将这个数组称为MSI-X Table。图10-2 MSI-X Capability结构的组成方式上图中各字段的含义如下所示。该字段存放MSI-X Table所在的位置,PCIe总线规范规定MSI-X Table存放在设备的BAR空间中。......
2023-10-20
相关推荐