PCIe Gen4 ltssm协商过程

2024-09-01 13:28
文章标签 过程 pcie 协商 gen4 ltssm

本文主要是介绍PCIe Gen4 ltssm协商过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本章节我们以gen4 Endpoint为例介绍PCIe ltssm(链路状态机)协商过程。

正常PCIe设备链路状态跳变为   detect-->polling-->configuration-->L0(gen1)-->recovery-->L0(gen3)-->recovery-->L0(gen4)。

需要注意的是在进入configuration状态之前,因为物理层还未收到有效数据(例如在PIPE接口的时钟pclk稳定之前),ltssm会在detect和polling之间反复跳转。

图片

链路状态机首次进入L0时是2.5 GT/s速率,接着从L0进入recovery(步骤4)状态,在recovery状态将速率切换到8 GT/s,然后再回到L0(步骤5),接着从gen3 L0跳转到recovery状态(步骤6),在recovery状态将速率切换到16 GT/s,然后再回到gen4 L0(步骤7),至此链路协商已完成,后续使用DLLP完成credit初始化后就能发送TLP了。    

1.Detect  

detect目的是检测对端设备是否存在。

图片

1.1.Detect.Quiet  

Detect.Quiet 状态是上电、复位(Function Level Reset 除外)、power‐up event之后进入的初始状态。

设备发送侧逻辑Transmitter 处于 Electrical Idle state.

Detect.Quiet 状态下,默认使用 2.5 GT/s 的数据传输速率。

物理层状态信号LinkUp = 0通知数据链路层当前链路无法正常工作

之前已更新的均衡(equalization )状态会被清零

l何时进入Detect.Active?

在Detect.Quiet状态超过12ms或者任意lane退出了Electrical Idle,则会进入Detect.Active

l如何进入Detect.Quiet 状态?

ltssm可以从Disabed、Loopback、L2、Polling、Configuration 或者 Recovery 状态进入 Detect.Quiet 状态。

1.2.Detect.Active  

只有从Detect.Quiet才能进入Detect.Active。在Detect.Active状态,使用Receiver Detection机制检测是否存在对接的lane。发送侧通过改变共模电压检测对端是否存在对接设备,如果链路如果存在对接设备,则电压变化较慢,反之,则电压变化很快。

  • 进入 “Detect.Quiet”

如果任意lane均没有检测到对端设备,则等待12ms后,进入Detect.Quiet

  • 进入“Polling State”

如果在所有lane均检测到对端设备,则进入polling状态。

  • 只有部分lane检测到对端设备

    • 等待12ms,再执行一次Receiver Detection,如果检测结果与首次检测结果相同则进入polling状态,否则进入Detect.Quiet

              

图片

          

2.Polling  

在此状态,端口TX逻辑发送TS1 和 TS2 Ordered Sets(2.5 GT/s)、RX逻辑接收TS1 和 TS2 Ordered Sets(2.5 GT/s)

通过接收到的 TS1 和 TS2 序列,完成如下操作:

l完成bit lock、

l完成Symbol lock 或者 Block Lock

l完成Lane polarity配置

Gen4协商过程在此状态会依次经过Polling.Active和Polling.Configuration。在Polling.Active阶段,完成bit lock、Symbol lock,在Polling.Configuration阶段完成Polarity Inversion。    

图片

          

3.Configuration  

发送逻辑 TX 和 接收逻辑 以在 2.5 GT/s 的速度交换 TS1 和 TS2 Ordered Sets,完成如下功能

— Determine Link width

— Assign Lane numbers

— Optionally check for Lane reversal and correct it

— Deskew Lane‐to‐Lane timing differences

Endpoint设备在gen4链路协商过程中在Configuration状态经过的子状态分别是CFG_LINKWIDTH_START、CFG_LINKWIDTH_ACCEPT、CFG_LANENUM_WAIT、CFG_LANENUM_ACCEPT、CFG_COMPLETE和CFG_IDLE。

因为有些PCIe port支持bifucation,可以同时对接多个PCIe设备,因此需要在CFG_LINKWIDTH_START和CFG_LINKWIDTH_ACCEPT阶段确认Link width,而很多PCIe设备支持lane reversal并且支持部分lane对接设备(例如:x16lane的PCIe设备可以使用lane4~lane7 对接一个x4的PCIe设备)因此需要在CFG_LANENUM_WAIT和CFG_LINKWIDTH_START阶段确认有效的lane number。PCIe设备在CFG_COMPLETE阶段通过TS2确认已协商好的 Link width和Lane numbers并且完成lane deskew,最后在CFG_IDLE阶段发送Idle data,然后进入L0。

图片

          

4.Recovery  

在recovery状态可以实现如下功能:

lchange the data rate

n例如从2.5 GT/s切换到8GT/s、从8GT/s切换到16 GT/s

lre-establish bit lock, Symbol lock or Block alignment

lLane-to-Lane de-skew

lEqualization Complete

从L0进入Loopback、Disabled和Hot Reset状态都需要先进入Recovery

例如从L0开始重新协商有效lane数量,则首先进入recovery再进入Configuration

8GT/s及其以上速率,均衡(Equalization )是非常重要的步骤,能够有效保证高速通信过程中的信号质量,均衡的协商在Recovery.Equalization状态完成。

Recovery.speed状态用于完成速率切换

Recovery.RcvrLock阶段完成bit lock、完成Symbol lock 或者 Block Lock

Recovery.Rcvrcfg: 通过TS2 协商speed change or link width change、指定均衡阶段需要使用的init Preset  

图片

    

5.L0  

L0正常工作状态,可以发送TLP

这篇关于PCIe Gen4 ltssm协商过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127063

相关文章

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

Spring Boot 整合 Apache Flink 的详细过程

《SpringBoot整合ApacheFlink的详细过程》ApacheFlink是一个高性能的分布式流处理框架,而SpringBoot提供了快速构建企业级应用的能力,下面给大家介绍Spri... 目录Spring Boot 整合 Apache Flink 教程一、背景与目标二、环境准备三、创建项目 & 添

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、