【PCIE链路训练介绍】

news/2024/11/22 13:55:02/

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


http://www.ppmy.cn/news/1549048.html

相关文章

近几年新笔记本重装系统方法及一些注意事项

新笔记本怎么重装系统? 近几年的新笔记本默认开启了raid on模式或vmd选项,安装过程中会遇到问题,新笔记本电脑重装自带的系统建议采用u盘方式安装,默认新笔记本有bitlocker加密机制,如果采用一键重装系统或硬盘方式安装…

华为openEuler考试真题演练(附答案)

【单选题】 以下关于互联网的描述,哪个选项是正确的? A:Nginx 在万维网中可以作为 ftp 服务器的反向代理,并与ftp服务器的数量--对应 B:Nginx 在互联网中可以作为 web服务器端,成为万维网的一个节点 C:互联网上的的资源需使用 Nginx进行七层…

AI 大模型重塑软件开发的未来

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

241121学习日志——[CSDIY] [InternStudio] 大模型训练营 [11]

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…

设计模式之 享元模式

享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少系统中对象的数量,从而节省内存和提升性能。它通过共享相同的对象来避免重复创建类似的对象。该模式尤其适用于对象数量庞大、且重复内容较多的场景。 核心思想&#x…

基于 RBF 神经网络整定的 PID 控制

基于 RBF 神经网络整定的 PID 控制 是结合了传统 PID 控制和 RBF(径向基函数)神经网络的自适应控制方法。在这种方法中,RBF 神经网络用于自适应地调整 PID 控制器的增益(比例增益 KpK_pKp​,积分增益 KiK_iKi​ 和微分…

Vue实战案例:一步步构建企业级项目1

一、Vue程序的概述 Vue是一个能用于构建用户界面的渐进式框架框架,主要用于开发单页应用程序(SPA)和动态用户界面。‌ Vue由尤雨溪(Evan You)在2014年创建,是前端三大主流框架之一,其他两个是A…

ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)

ROSSERIAL与Arduino IDE交叉开发 一、简介二、安装1、Ubuntu下的Arduino IDE安装 **针对ESP32报错问题原因溯源和修改**三、运行结点 一、简介 这个教程展示在ubuntu环境下如何利用Arduino IDE配合rosserial开发机器人部件。通过Arduino IDErosserial实现arduino/esp32开发板通…