目录
概述
链路训练的目的
几个关键概念
Lane reveral :
Polarity inversion:
De-skew:
link number:
Lane number:
Bit lock:
Symbol lock:
几个特殊序列:
TS1和TS2:
IDLE;
FTS:
Skip:
LTSSM状态机
Detect状态:
Polling:
Cfg:
概述
PCie链路的初始化过程较为复杂,Pcie总线进行链路训练时,将初始化Pcie设备的物理层,发送接收模块和相关的链路状态信息,当链路训练成功结束后,PCIe链路两端的设备可以进行通讯。
链路训练主要由硬件逻辑完成,而无需系统软件的参与。此外当PCie设备从低功耗状态返回到正常工作模式时,或者PCie出现错误时,也需要进行重新连接。
链路训练的目的
主要是进行PCie物理层,端口配置信息,相应的链路状态,并了解链路对端的拓扑结构,以便PCie链路两端的设备进行通信。
几个关键概念
Lane reveral :
PCie链路两端的设备所使用的的lane可以错序进行连接
Polarity inversion:
在单lane上,差分的极性也可以进行错序连接
De-skew:
PCI总线可以使用多个lane进行数据交换,而数据报文经过不同的lane的延时并不完全相同,PCie总线进行训练时,需要处理这些不通lane的延时差异,并进行补偿
link number:
在一个switch中存在多个下游,并使用0~n,进行编号,这些编号存在swith的硬件逻辑中,而不再配置空间中,
Lane number:
分为两类,一类时物理lane number(链路训练之前) 另一类是逻辑lane number(链路训练之后,)应为PCIE容许错序连接,因此,逻辑lane和物理lane并不一定相同,因此在总线链路训练时,需要对rc或者sw的link初始化。
Bit lock:
pcie总线进行数据传输时,需要进行时钟同步,但是pcie链路并没有这个时钟信号,因此在进行总线训练时,接收端需要从发送端的数据报文中提取接受时钟,这个过程称为bit lock
Symbol lock:
在链路训练中,PCIe链路需要首先确认COM字符。11000001010,00111110101
几个特殊序列:
TS1和TS2:
TS1主要检测PCie的链路配置信息,而ts2确认TS1序列的检测结果;
(仅仅时第6到15的字符含义不通)
0:COM控制字符,表示ts1和ts2序列的开始,字符序列将复位LF-SR序列。
1:在链路的初始化阶段,第一个字符放置pad,即为空;而在链路配置阶段,该字符放置
端口的link number。
2:在链路训练阶段,第一个字符放置pad,即为空,而在链路配置阶段,该字符放置端口的lane number;
3:FTS的个数,不通的PCIe链路需要使用不通德FTS序列,才能使接收端的PLL锁定接受时钟。
4:存放当前PCie设备支持的数据速率。
5:存放命令,第一位为hot reset; 第二位式:loopback;第三位式:disable scrambling 第四位是:compliance receive。当接受逻辑收到TS1/TS2序列后,将根据该字符进行对应操作。
IDLE;
在正常情况下,在发送端进入到electrical idle 状态,必须向对端进行eios序列。
FTS:
单个FTS序列由一个com和三个FTS组成,该序列的主要目的是使接受逻辑重新获得bit/symbol lock;
Skip:
由一个com和三个skip、字符组成,主要目的是进行时钟补偿,PCIe的时钟2.5G+-300ppm,其中300ppm意味着。一百万个时钟,会出现300个偏移。如果PCIE不使用skip序列,本地时钟与从报文中提取存在飘逸,可能导致数据传输失败。
在PCIe设备接受逻辑中,使用了两个时钟,一个时钟是从PLL报文中恢复,一个是本地时钟。在总线中,使用elastic buffer 技术处理者这两个时钟之间的频率差和相位差,elastic buffer由一个buff组成,该FIFO的一端使用本地时钟域,另一端使用恢复的时钟域。由于时钟的不匹配,将出现overrun和underrun。总线规定在1190-1538字符之后,必须发送skip序列进行补偿。
LTSSM状态机
LTSSM是链路训练里面一个比较重要的状态机。
在进行总线链路训练时,将使用LTSSM状态机。总共由11个状态组成,如下图。
各个状态:
Detect状态:
简介:当PCie链路被复位或者数据链路层通过填写某些寄存器后,ltssm将进入该状态,该状态也是LTSSM的初始状态,当PCIe链路处于该状态时,发送逻辑TX并不知道对端接受逻辑RX的存在,因此使用Receive Detect识别逻辑判断对端接受逻辑rx是否可以正常工作,之后进入其他状态。
详情:detect由detect.quiet/ detect.active 两个子状态组组成,当PCIe设备进入复位,首先进入quiet状态,(发送逻辑处于idle,差分线为共模电压状态,为相同的值,此时发送逻辑功耗最低),当PCie设备处于quiet状态时,缺省使用2.5G速率,当12ms过后或者任何一个lane退出idle时,PCIe进入active阶段,
Polling:
当PCie链路进入该阶段时,将向对端发送ts1和ts2,并接受对端的ts1和ts2
以确定bit/symbol,lane的极性,处于该状态,将进行loop测试,确定当前pcie可以正常工作。
Cfg:
当进入该状态时,将确定链路的宽度,link number,lane reveral/porarity inverion,laneto lane的延时,该状态ltssm状态机最重要的状态,值得注意的时,在cfg状态。统一使用2.5g,知道进入l0状态。
L0状态:PCie正常工作状态。