首页 理论教育PCIExpress链路训练字符序列简介

PCIExpress链路训练字符序列简介

【摘要】:这两种PLP在链路训练的多个状态机中使用,下文将进一步介绍这两种字符序列。其中TS1序列的主要作用是检测PCIe链路的配置信息,而TS2序列确认TS1序列的检测结果。不同的PCIe链路需要使用不同数目FTS序列,才能使接收端的PLL锁定接收时钟。PCIe设备可以根据链路的使用情况确定当前链路是否处于Electrical Idle状态,而不是必须收到Idle序列后进入该状态。

PCIe总线进行链路训练时,需要发送一些特殊的字符序列(Ordered-Sets),这些Oder-er-Sets将在下文中详细介绍,PCIe总线规范定义了以下几类Ordered-Sets。有的书籍也将这些Order d-Sets称为PLP,即物理层报文。

●Training Sequence 1和2,简称为TS1和TS2序列。这两种PLP在链路训练的多个状态机中使用,下文将进一步介绍这两种字符序列。

●Idle序列。在正常情况下,发送端进入Electrical Idle状态时,将首先向对端发送若干Idle序列,才能进入。Electrical Idle状态是PCIe链路的一个低功耗状态,第8.1.2节将详细介绍该状态。

●Fast Training Sequence,简称为FTS。该字符序列协助接收逻辑获得Bit/Symbol Lock,接收逻辑需要获得多个FTS后,才能确定Bit/Symbol Lock。

●SKIP序列。该字符序列的主要作用是进行时钟补偿。

在PCIe总线中,字符序列的发送方式与TLP和DLLP有较大不同。假设一条PCIe链路由多个Lane组成,那么TLP和DLLP报文将分散到多个Lane中。而字符序列必须同时出现在这些不同的Lane,这几个Lane必须“在同一个时间点”发送字符序列。而不能出现一个Lane正在发送这个字符序列进行与链路训练相关的操作,而其他Lane进行其他数据传递的情况。PCIe链路发送TLP与发送字符序列的过程如图8-3所示。

如在一个×4的PCIe链路中发送SKIP序列时,每一个Lane中都要出现“COM、SKP、SKP、SKP”这样的数据流。其他字符序列的发送方法也与此类似。而TLP或者DLLP的发送分散到各个Lane上。

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

图8-3 特殊字符序列的发送

1.TS1和TS2序列

在物理层的LTSSM状态机中,TS1和TS2序列的使用方法不同。其中TS1序列的主要作用是检测PCIe链路的配置信息,而TS2序列确认TS1序列的检测结果。

TS1和TS2序列由16个字符组成,单纯从结构上看,TS1和TS2仅仅是第6~15个字符的含义不同,但是这两个序列在LTSSM状态机中的使用方法不同。TS1的第6~15个字符为D10.2,而TS2的第6~15个字符为D5.2,其中D10.2和D5.2也是TS1和TS2的标识号。TS1和TS2序列的其他字符如下所示。

●第0字符为COM控制字符,表示TS1/TS2序列的开始。TS1/TS2字符序列将复位LF-SR寄存器。

●在链路训练的初始阶段,第1字符存放控制字符PAD,即为空。而在链路的配置阶段,该字符存放端口使用的Link Number。

●在链路训练的初始阶段,第2字符为控制字符PAD,即为空。而在链路的配置阶段,该字符存放端口使用的Lane Number。

●第3个字符为FTS序列的个数(N_FTS)。不同的PCIe链路需要使用不同数目FTS序列,才能使接收端的PLL锁定接收时钟。

●第4个字符存放当前PCIe设备支持的数据传送率,第1位为1表示支持2.5GT/s传送率;第2位为1表示支持5GT/s传送率;第3位为1表示支持8GT/s的数据传送率(在PCIe V3.0规范中使用);第4~5位保留;第6位是一个多功能位,当PCIe链路的没有配置成功时可以作为Notification位,也可以用作发送链路De-emphasis的使能位;第7位为speed_change位,当该位为1时,通知PCIe链路对端设备需要改变传送速率。

●第5个字符存放命令。第0位为“Hot Reset”,第1位为“Disable Link”,第2位为“Loopback”,第3位为“Disable Scrambling”,第4位为“Compliance Receive”。当接收逻辑RX收到TS1或者TS2序列后,将根据该字符的命令进行对应的操作。(www.chuimin.cn)

2.Idle序列

在正常情况下,当发送端进入Electrical Idle状态之前,必须向对端发送EIOS序列。如果PCIe设备使用2.5GT/s的传送率时,Idle序列由1个COM字符加3个IDL字符组成,即“COM IDL IDL IDL”;如果PCIe设备使用5GT/s的传送率时,Idle序列由两组这样的字符序列组成,即“COM IDL IDL IDL COM IDL IDL IDL”。Electrical Idle状态是一种特殊的Idle状态,处于该状态时,PCIe链路使用的功耗最低,该状态的详细解释见第8.1.2节。

当发送端退出IDLE状态时,必须向对端发送EIEOS序列。EIEOS序列仅在链路传送率大于2.5GT时使用,该序列由1个COM字符、14个EIE字符和D10.2(TS1识别符)组成。

PCIe设备可以根据链路的使用情况确定当前链路是否处于Electrical Idle状态,而不是必须收到Idle序列后进入该状态。如一个PCIe设备在很长一段时间没有收到流量控制报文或者链路处于Electrical Idle状态时,也可以推断出对端设备处于Idle状态。

3.FTS序列

单个FTS序列由1个COM字符加3个FTS字符组成,该序列的主要目的是使接收逻辑RX重新获得Bit/Symbol Lock。发送逻辑需要向对端发送多少个FTS序列由接收到的TS1/2序列决定,TS1/2序列的第3个字符为需要发送FTS序列的个数。

4.SKIP序列

SKIP序列由一个COM字符加3个SKP字符组成。物理层提供SKIP序列的主要原因是进行时钟补偿。假设一个PCIe设备使用的时钟频率为2.5GHz±300ppm,其中300ppm意味着这个时钟源每发出1百万个时钟可能产生300个时钟漂移,即每3333个时钟将可能产生一个时钟漂移。如果PCIe链路不使用SKIP序列,本地时钟与“从报文中提取”的时钟存在的漂移,可能导致数据传送失败。

在PCIe设备的接收逻辑RX中,使用了两个时钟,一个时钟是通过PLL从接收报文中恢复的时钟,另一个时钟是接收逻辑RX使用的本地时钟。这两个时钟间的关系如图8-4所示。值得注意的是这两个时钟并不完全同步。

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

图8-4 本地时钟域与从报文中恢复的时钟域

在PCIe总线中,使用Elastic Buffer[37]技术处理这两个时钟之间的频率差和相位差。Elas-tic Buffer处于本地时钟域与“被恢复的”时钟域之间,由一个同步FIFO组成。该FIFO的一端使用本地时钟域、而另一端使用“被恢复的”时钟域。其中本地时钟与“被恢复的”时钟频率都为2.5GHz±300ppm。

但是如果PCIe设备从数据报文中恢复的时钟频率为2.5GHz-300ppm,而本地时钟频率为2.5GHz+300ppm时,Elastic Buffer两端的时钟频率并不匹配,Elastic Buffer将出现Over-run的现象;而如果本地时钟频率小于“被恢复的”时钟时,Elastic Buffer将可能出现Un-derrun的现象。如果PCIe总线不采取一些必要的补救措施,那么无论Elastic Buffer的容量有多么大,都可能出现Overrun和Underrun的现象。

为此,PCIe总线规定,物理层的每个Lane发送1180~1538个字符之后,必须发送一个SKIP序列进行时钟补偿。因为在最恶劣的情况下,接收逻辑RX每过1667个时钟周期,本地时钟就可能与“被恢复的”时钟相差一个时钟周期[38]。在PCIe总线中,当Elastic Buffer收到SKIP序列时,可以根据自身的状态选择是增加还是减少1~2个SKIP序列,从而补偿本地时钟与“被恢复的”时钟之间的频率与相位差。

在一个具体的实现中,可以通过计算,得到Elastic Buffer不出现Overrun和Underrun所需要的最小尺寸。这个最小尺寸与SKP序列的发送间隔(多少个时钟周期发送一次SKP序列),Max_Payload_Size参数和PCIe链路的数据传送率相关。对此有兴趣的读者可以参考Elastic Buffer Implementations in PCI Express Devices,以获得详细的量化分析结果,本节对此不做进一步说明。

Elastic Buffer技术由来已久,除了PCIe总线之外,USB总线、In finiBand、Fibre Channel和Gigabit Ethernet中也使用该技术处理分属不同时钟域的数据传递。