PCIE链路训练介绍
- 1 PCIE链路初始化与训练
- 1.1 链路训练达成目标
- 1.1.1 位锁定
- 1.1.2 字符锁定(Gen1 & Gen2 Only)or 块锁定(Gen3 only)
- 1.1.3 确定链路宽度
- 1.1.4 通道位置翻转(Lane Reversal)
- 1.1.5 信号极性翻转(Polarity Inversion)
- 1.1.6 确定链路的数据率(Data Rate)
- 1.1.7 通道对齐(Lane-to-Lane De-skew)
- 1.2 LTSSM--链路训练状态机
- 1.2.1 Detect转态
- 1.2.2 Polling状态
- 1.2.3 Configura转态
- 1.2.4 L0状态
- 1.2.5 Recovery状态
- 1.2.6 L0s
- 1.2.7 L1
- 1.2.8 L2
- 1.2.9 Loopback
- 1.2.10 Disable
- 1.2.11 Hot Reset
- 1.3 与LTSSM相关的寄存器
【博客首发于微信公众号《漫谈芯片与编程》,欢迎专注一下,多谢大家】
本篇博客主要介绍PCIE物理层的链路初始化与训练过程;
PCIE_5">1 PCIE链路初始化与训练
PCIE中的链路初始化与训练过程是一种完全由硬件来实现的功能,整个过程都是由链路训练状态机(Link Trainning and status State Machine, LTSSM)自动完成;不涉及数据链路层和事务层;主要流程为上电后两侧根据PCIe总线协议进入LTSSM流程;该过程是一套硬件自动化的流程,链路双方自动协商速率和宽度,调节发送和接收参数,从而达到最佳信号质量。链路训练过程包括多个状态,每个状态有其特定的任务和目标;
1.1 链路训练达成目标
首先初始状态,探测对方是否存在;互发Training Sequence,实现位锁定(Bit Lock)、字符锁定(Symbol Lock,Gen1 & Gen2 Only)、块锁定(Block Lock,Gen3 Only);互发TS,确定链路宽度、速度,通道位置翻转(Lane Reversal)、信号极性翻转(Polarity Inversion)、确定链路的数据率(Data Rate),确定lane-to-lane Deskew;进行链路重新训练
最后正常工作状态。
1.1.1 位锁定
目标:确保接收方能够正确识别和解码发送方的位流。
过程:
- 发送方发送连续的 101010… 序列(称为 Jitter Tolerance Pattern 或 JTP)。
- 接收方通过时钟恢复电路(Clock and Data Recovery, CDR)锁定发送方的位时钟,确保能够正确采样每一位
1.1.2 字符锁定(Gen1 & Gen2 Only)or 块锁定(Gen3 only)
字符锁定:
目标:确保接收方能够正确识别和解码发送方的 8b/10b 编码字符。
过程:
- 发送方发送 8b/10b 编码的字符序列。
- 接收方通过 8b/10b 解码器识别和解码这些字符,确保能够正确解码每一个字符。
块锁定:
目标:确保接收方能够正确识别和解码发送方的 128b/130b 编码块。
过程:
发送方发送 128b/130b 编码的块序列。
接收方通过 128b/130b 解码器识别和解码这些块,确保能够正确解码每一个块。
1.1.3 确定链路宽度
目标:确定链路的实际宽度,如 x1, x4, x8, x16。
过程:
- 发送方和接收方通过交换 Training Sequence(TS)包来协商链路宽度。
- 双方根据各自的硬件能力和配置选择最佳的链路宽度。
1.1.4 通道位置翻转(Lane Reversal)
目标:确保链路中的通道顺序正确,即使物理连接顺序不正确。
过程:
- 发送方和接收方通过交换 Lane Reversal 训练序列来确定通道的正确顺序。
- 如果物理连接顺序不正确,双方会进行通道位置翻转,以确保数据在正确的通道上传输。
1.1.5 信号极性翻转(Polarity Inversion)
目标:确保发送方和接收方之间的信号极性一致。
过程:
- 发送方和接收方通过交换 Polarity Inversion 训练序列来检测信号极性。
- 如果检测到信号极性不一致,接收方会进行极性翻转,以确保信号的正确性。
1.1.6 确定链路的数据率(Data Rate)
目标:确定链路的工作速度,如 Gen1 (2.5 GT/s), Gen2 (5.0 GT/s), Gen3 (8.0 GT/s), Gen4 (16.0 GT/s) 等。
过程:
- 发送方和接收方通过交换 Training Sequence(TS)包来协商链路速度。
- 双方根据各自的硬件能力和配置选择最佳的链路速度。
1.1.7 通道对齐(Lane-to-Lane De-skew)
目标:消除链路中各通道之间的时延差异,确保数据在所有通道上同步传输。
过程:
- 发送方发送 De-skew 训练序列,这些序列包含已知的时延信息。
- 接收方通过测量各通道的时延差异,调整接收时钟以对齐所有通道。
- 双方通过交换 De-skew 训练序列来确保所有通道的时延一致。
1.2 LTSSM–链路训练状态机
上述目标如何实现,就是具体依靠链路训练状态机来实现的;上述目标分配在状态机的某些状态来完成。
LTSSM具体有11个状态,分别是Detect、Polling、Configuration、Recovery,L0、L0s、L1、L2(L3是可选的)、Hot Reset、Loopback和Disable状态。系统进行复位操作(Cold, Hot or Warm Reset)后,会自动进入Detect状态。
这11个状态又可以被分为下面五个类别:
1、链路训练状态(Link Training State);
2、重训练状态(Re-Training(Recovery) State);
3、软件驱动功耗管理状态(Software Driven Power Management State);
4、活动状态功耗管理状态(Active-State Power Management State,ASPM State);
5、其他状态(Other State);
1.2.1 Detect转态
系统进行复位操作就会进入到该Detect状态;在这个状态中,PCIe设备会去检测自己Link的另一端是否存在其他PCIe设备。换句话说,就是检测有没有其他的PCIe设备与其相连接。
- Detect.Quiet:链路处于静默状态,等待检测到对端设备。
- Detect.Active:发送 Polling TLP(事务层包)以检测对端设备的存在。
1.2.2 Polling状态
Polling:
在该状态中,PCIe设备会依次发送TS1OS和TS2OS以实现以下目标:
1、位锁定(Bit Lock);
2、字符锁定(Symbol Lock);
3、信号极性翻转(Polarity Inversion),如果需要的话;
4、确定各个设备支持的速率(Data Rates)。
1.2.3 Configura转态
在该状态中,PCIe设备会依次发送TS1OS和TS2OS以实现以下目标:
1、确定链路宽度(Link Width);
2、分配通道(Lane)号;
3、通道位置翻转(Lane Reversal),如果需要的话;
4、通道对齐(Lane-to-Lane De-skew)。
1.2.4 L0状态
L0状态:它表示PCIe的链路进入正常工作状态,在这个状态下,PCIe链路可以正常的收发TLP、DLLP、PLP。 PCIe链路可以从该状态进入到Recovery 状态,以改变数据传送率。
1.2.5 Recovery状态
这个状态用于Re-Trainning,因此Re-Trainning可能会改变原有的速率,所以位锁定(Bit Lock)和符号锁定(Symbol Lock)操作都会被重新进行,但是花费的时间要比第一次少很多。进入该recovery状态的几种情况:
当PCIe链路需要重新训练时,进入Recovery状态。主要有以下几种情况:
- PCIe链路信号发现error,需要调整Bit Lock和Symbol Lock;
- 从L0s或者L1低功耗电源状态退出;
- Speed Change。因为第一次进入L0状态时,速率是2.5GT/s. 当需要进行速率调整5.0GT/s或者8.0GT/s时,需要进入Recovery状态进行Speed Change. 这个阶段,Bit Lock、Symbol Lock等都需要重新获取;
- 需要重新调整PCIe链路的Width;
- 软件触发retrain操作;
- 仅在Gen3和Gen4,需要重新进行Equalization
1.2.6 L0s
该ASPM状态主要用于降低功耗,在总线空闲的时候可以进入该状态,且从该状态可以迅速地重新切换回L0状态。当在L0状态是,链路上出现EIOS时,则表明即将进入L0s状态。
1.2.7 L1
相对于L0s状态,L1状态下的功耗更低。进入L1状态需要链路两端的PCIe进行“沟通”,只有双方都“同意”进入该状态,链路才会进入该状态。
1.2.8 L2
L2状态下的链路功耗更低,因为其只保留了Vaux,关闭了链路的其他功能。此时,需要Beacon信号或者WAKE#边带信号来唤醒系统。
1.2.9 Loopback
回环是一种测试和调试功能,并不用于正常运行中,将回环设备连接到设备的链路(处于回环状态中时,接受测试的设备是回环从设备),即可将链路和回环从设备置于回环状态,方法是发送已声明回环比特的TS1有序集,回环主设备作为内置测试引擎。
1.2.10 Disable
该状态中链路被禁止,此时发送端处于电气空闲状态(Electrical Idle State),而接收端处于低阻状态(Low Impedance State)。进入该状态的原因可能是链路连接不稳定,或者链路中的某个设备被移除,如PCIe卡从插槽中拔出。
1.2.11 Hot Reset
软件可以通过将桥控制寄存器(Bridge Control Register)中的Secondary Bus Reset位置位来复位链路。随后,桥下端的PCIe设备发送TS1OS,其中的Training Control中包含了Hot Reset的信息。当接收端发现连续的两个TS1OS中都包含Hot Reset时,链路随后进入复位状态。
1.3 与LTSSM相关的寄存器
以下是一些与LTSSM相关的寄存器:
Link Control Register:这个寄存器包含了控制链路状态的位,如链路速度、宽度和链路训练的启用/禁用。
Link Status Register:这个寄存器提供了链路的当前状态信息,包括链路速度、宽度、训练状态等。
Link Training Control Register:这个寄存器用于控制链路训练的过程,如发送训练序列、选择训练模式等。
Link Training Status Register:这个寄存器提供了链路训练的当前状态信息,包括训练进度、错误状态等。
Equalization Control Register:这个寄存器用于控制信号均衡的参数,以优化链路性能。
Equalization Status Register:这个寄存器提供了信号均衡的当前状态信息,包括均衡参数、均衡效果等。
【REF】
1.https://aijishu.com/a/1060000000288493
2.https://blog.csdn.net/sinat_43629962/article/details/123735296