PCIE链路训练-状态机描述4

news2024/11/28 16:28:40

Recovery

Recovery.RcvrLock

1)如果link是在8.0GT/s或以上的速率工作,那么rx只会认为当前lane获得Block alignment之后收到的TS0TS1TS2是有效的。如果进入当前状态是从L1recovery.speedL0s,获取Block alignment的过程必须在发生退出Electrical Idle的条件之后;如果当前状态是从L0状态进入的,那么Block alignment的过程必须在获取last data streamend之后。

2如果link是在8.0GT/s或以上的速率工作,且start_equalization_w_preset为1:

针对使用preset value的情况:

a:一旦开始了数据传输,并且要求执行equalization,Usp必须在tx使用rx收到的连续8个TS2中的preset value(黄色字体???)。lane上如果收到了不持的或者是reserve的preset value,那么可以根据实现具体使用一种方式来处理tx端发送的preset value。

b:如果需要执行equalization,dsp根据如下准则在tx端执行preset value:

如果当前数据传输速率是16.0GT/s或32.0GT/s,那么会在最近从Recovery.Rcvrcfg状态转变到当前状态过程中收到的八个连续的EQ TS2(针对equalization bypass to 32.0 GT/s is to be performed)或者128b/130b EQ TS2中收到的支持的tx preset value。否则的话,如果tx preset value在Lane Equalization Control Register Entry中的Downstream Port Transmitter Preset field中有定义,可以使用其中的值。

针对8.0GT/s -> tx preset value定义在每一个lane中的Lane Equalization Control Register Entry。如果当前寄存器中的值不是reserved的话,那么8.0GT/s下的dsp receiver可以使用lane Equalization Control Register Entry中的preset hint field。

针对16.0GT/s、32.0GT/s、64.0GT/s,dsp在16.0GT/s、32.0GT/s、64.0GT/s速率下的tx preset value分别在16.0GT/s、32.0GT/s、64.0GT/s Equalization Control Register Entry中。

注意不采用a、b两种方式的话,需要根据具体的实现决定一种决定tx preset value的方式,下个状态是Recovery.Equalization。

针对使用pre-cursorcursorpost-cursor来说

a:如果当前状态是从recovery.equalization状态进入的,在发送的TS1中,dsp必须要设置pre-cursor,cursor,post-cursor域,注意如果在recovery.equalization状态下收到的最后一个请求是含有preset的request,那么tx必须在将Transmitter Preset bits设为收到的request中的preset值。

b:建议的做法是在发送的TS1中把pre-cursor,cursor,post-cursor均设置为当前的cursor设置,将Transmitter Preset bits设置为最近的tx preset设置。

c:Recovery.RcvrLock 状态满足下述条件后,转移至 Recovery.RcvrCfg 状态。如果双方接收到 8 个连续的 TS1 或者 TS2 序列,其中链路与通道编号与发送的数值一致,并且序列中的 speed_change 比特为0;收到8个连续的TS0,并且是从Recovery.speed状态下进入当前状态;收到了8个连续的TS1,其中EC位为0;

d:如果dsp的当前状态不是从configuration.idle状态或者recovery.idle状态下进入,并且link control3寄存器中的perform equalization位设为1,那么下个状态时Recovery.Equaliztion状态;

e:如果当前速率是8.0GT/s,16.0GT/s,32.0GT/s,那么当前port必须确保在recovery.rcvlock状态下在在发送TS1(这个TS1是进入recovery.equalization状态需要的TS1)前不能发送超过两个EC为0的TS1;

f:如果当前速率是64.0GT/s,那么当前port必须确保在recovery.rcvlock状态下在在发送TS0(这个TS0是进入recovery.equalization状态需要的TS0)前不能发送超过两个EC为0的TS0;

(3)在离开configuration状态后,tx在所有的配置lane上发送link num和lane num均相同的TS1。如果directed_speed_change设为1,那么speed_change 位(bit 7 of the Data Rate Identifier Symbol in TS1 Ordered Set)必须设为1。如果接收到8个连续的 speed_change 比特为 1 的 TS1 序列后,也会同样将其内部变量 directed_speed_change 设置为 1。Non-flit mode下,TS1中的N_FTS值反应了当前操作下的速率。设备在进入当前状态时允许改变其advertise的data rate。

Dsp如果是从2.5GT/s或5.0GT/s转化到8.0GT/s或者32.0GT/s并且Equalization Bypass to Highest NRZ Rate是支持的,那么dsp准备重做equalization过程。整个过程如下:a:发送EQ TS1,其中speed_change为1,并且根据转变的目标速率在Data Rate Identifier上设定相应的值;b:如果硬件发起的equalization的重做过程,那么硬件必须确定2.5GT/s5.0GT/sdata rate;c:如果软件发起的equalization的重做过程,那么软件必须确定2.5GT/s5.0GT/sdata rate??

4)如果dsp是从8.0GT/s16.0GT/s,或者16.0GT/s32.0GT/s或者32.0GT/s64.0GT/s的速率变化引起的重做equalization过程,那么需要执行如下步骤:a发送TS1,Equalization Redo为1,speed_change为1,并且根据转变的目标速率在Data Rate Identifier上设定相应的值;b:如果硬件发起的equalization的重做过程,那么硬件必须确定16GT/s32GT/s64GT/sdata rate;c:如果软件发起的equalization的重做过程,那么软件必须确定16GT/s32GT/s64GT/sdata rate??

5Usp需要在recovery.rcvrcfg中发送的TS2advertise最高的支持速率,而在TS1中是否advertise是一个可选项。除非usp确认在该速率下存在可靠性问题,并且无法靠均衡解决,如果一个usp

a:连续接收到 8 speed_change 比特置为1EQ TS1/EQ TS2

b:或者收到的TS1/TS2Equalization Redo bit为1或128b/130b EQ TS2 Ordered Sets中的speed_change为1.收到两个条件之一能改变支持的速率 在其他条件下,设备不能改变在此状态下(或者Recovery.RcvrCfg 或 Recovery.Equalization)支持的速率。进入此状态后successful_speed_negotiation清为0。

注意,以下几点:

aDSP 如果想将速率切换到 8GT/s 并且重新进行均衡的话,需要发送 speed_change 比特置为 1,并且速率声明为 8GT/s EQ TS1 序列。如果一个 USP 连续接收到 8 speed_change 比特置为 1,并且速率声明支持 8GT/s EQ TS1 或者 EQ TS2 序列后,USP 也会宣告支持使用 8GT/s 速率,除非 USP 确认在该速率下存在可靠性问题,并且无法靠均衡解决。值得注意的是,任意端口可以在进入 Recovery 状态时,改变其通告支持的速率,但需要确保自身可以稳定可靠地支持这一速率。除了上述这种情形外,端口在 Recovery.RcvrLock 状态,Recovery.RcvrCfg 状态以及 Recovery.Equalization 状态中,不得改变自己通告的支持速率。

b:在 Recovery.RcvrLock 状态中,USP可以指定DSP 5GT/s 速率下使用的去加重等级系数(de-emphasis level)。USP 通过 TS1 序列中的Selectable De-emphasis bit (bit 6 of Symbol 4),来指定 DSP 的数值设置。但是 DSP 有可能会因为链路上的比特错误,无法接收到 USP 发送的这一信息,所以 USP 可以在因为速率切换进入 Recovery 状态后,可以再次指定 DSP 的去加重等级。如果 DSP 打算采用 USP 所要求的的数值,那么 DSP 必须在 Recovery.RcvrLock 状态中记录接收到的Selectable De-emphasis bit数值

c:在进入 Recovery.RcvrLock 状态时,TS1 序列接收方也可以被指定新的发送电压数值。接收方会在进入该状态时采样一次链路控制寄存器2 Link Control 2 register)中的 Transmit Margin 比特,并且保持该数值有效,直到下一次从 L0, L0s, 或者 L1 进入到 Recovery 状态,采样到新的数值为止。

6)在将inactivelane进行activating之后,tx需要在exiting Electrical Idle和发送TS1之前等待其tx端的共模电压稳定(除了退出L1.2L1pm状态,此时PCIe链路可以在L1.0期间被动地尝试重新建立同步,并在recovery期间主动地尝试恢复同步。为了确保common mode在recovery.rcvrlock状态下已经建立,dsp需要做一个timer,dsp只有在自从在任意的配置lane上检测到electrical idle exit之后timer达到最小的TCOMMONMODE值之后才可以发送TS1)。

 

需要注意的是,在上述192ns之内、对端进入Recovery.Rcvrlock之后,在一个新的Transmit Margin field变为有效之前,bit lock和symbol/block alignment执行完之后电压水平可能会发生变化。在这情况下rx需要重新获取bit lock和symbol/block alignment。

注意:a:针对发起速率变化的那一侧,在L0或L1状态下directed_speed_change变量设为1。针对没有主动发起速率变化的那一侧,如果收到了TS中的speed change位设为1,那么directed_speed_change变量也设为1,如果进入recovery.speed状态下,directed_speed_change变量设为0;b:如果是收到第一个TS之前就进入到L0,设备需要接收所有正确的TLP和DLP。如果是在128/130b的模式下,收到的TLP/DLP遵循128b/130b解码规则。

(7)Recovery.RcvrLock 状态满足下述条件后,转移至 Recovery.RcvrCfg 状态:如果双方接收到 8 个连续的 TS1 或者 TS2 序列,其中链路与通道编号与发送的数值一致,并且序列中的 speed_change 比特与本地变量 directed_speed_change 一致,并且 EC 域数值为 00b (即无需进行均衡训练),并且当前速率是8.0GT/s或者更高的速率。

a:如果设置了 Extended Synch 比特,那么在进入 Recovery.RcvrCfg 状态之前,必须最少发送 1024 个连续的 TS1 序列。

b:如果原先是从 Recovery.Equalization 状态进入当前次状态,那么 USP 需要比较所有通道上接收的equalization coefficients或者 preset值,将他们和均衡的 Phase2 中所接收的最终系数集(final set of coefficient)或者 preset 进行比较。如果他们数值不一致,那么 USP 会将其发送的 TS2 序列中的 Request Equalization 比特设置为 1。

24ms 超时后,根据下列条件进行状态跳转:

(8)转移至 Recovery.RcvrCfg 状态

如果同时满足下述两个条件,那么接下来转为 Recovery.RcvrCfg 状态:

a:接收到 8 个连续的 TS1 或者 TS2 序列,其中链路与通道编号与发送的数值一致,并且序列中的 speed_change 比特为 1。

b:当前速率高于 2.5 GT/s,或者 TS1/TS2 中表示还支持至少一种更高的速率设置,也就是发送的TS1中的data rate identifiers或者接收的8个连续的TS1/TS2中支持高于2.5GT/s的速率。

(9)转移至 Recovery.Speed 状态

如果满足下述两个条件中的一个,那么接下来转为 Recovery.Speed 状态:

a:如果当前速率设置高于 2.5 GT/s,但是自从进入 Recovery 状态后,从来没能在该速率下正常工作过,(变量 changed_speed_recovery 被清除为 0 揭示了这种现象)。此时,待离开 Recovery.Speed 状态后,速率会重新降低为 2.5 GT/s(针对8b/10b或128b/130b是2.5 GT/s,针对1b/1b是32 GT/s)。

b:如果变量 changed_speed_recovery 被设置为 1,表示某个高于 2.5 GT/s 的速率已经能够正常工作,但是在切换到新的协商速率后,链路不能工作,这种情况下速率会被恢复为由 L0 或者 L1 进入 Recovery 状态前的数值。

 

(10)转移至 Configuration 状态(下列条件满足的情况下directed_speed_change设为0)

a:如果没有发起速率改变请求,(即自从进入Recovery 状态之后directed_speed_change 变量为 0,并且 TS1/2 中的 speed_change 比特也为 0),并且任何配置的lane上收到了至少一个TS1或TS2,并且受到的TS1/TS2的link num和lane num和tx在这些所对应的lane上发送的一致。

b:双方协商后发现彼此同时支持的最高速率只是 2.5 GT/s(根据受到的TS1或TS2),并且directed_speed_change变量为0,收到的TS1/TS2中的speed_change为0;

(11)转移至 Detect 状态

如果上述条件都没能满足,那么接下来转移至 Detect 状态

(12)转移至 Recovery.Equalization 状态

当数据速率为 8 GT/s 时,数据通道必须采取合适的均衡参数,以获得良好的信号完整性。本节的内容并不适用于更低速的速率。对于运行在 8GT/s 速率的链路来说,他们并不是每次进入 Recovery 状态时,都需要经过 Recovery.Equalization 次状态。链路只会在满足下述情况时,才会进入 Recovery.Equalization 状态:

如果内部变量 start_equalization_w_preset 设置为 1,那么:

a:USP 需要在转为 8.0 GT/s 速率之前,采样其接收的连续 8 个 TS2 中的 preset 数值。USP 必须采用其中的发送端 preset,可以选择是否采用其中的接收端 preset。

b:DSP 进入 8.0 GT/s 速率后,必须采用其通道均衡控制寄存器( Lane Equalization Control register )中的发送端 preset,可以选择是否采用其中的接收端 preset。

否则(即该变量不为 1),发送端必须采用在上一次均衡过程中协商一致的参数(coefficient)设置。

a:如果 USP 接收到 8 个连续的 TS1 序列,其中链路与通道编号与发送的数值一致,并且序列中的 speed_change 比特为 0,但是 EC 域数值不为零时,下一个状态为 Recovery.Equalization。因为接收到上述 TS1 序列表示 DSP 希望重新进行均衡中的部分流程。协议中提到,DSP 可以在上层软件要求,或者其他具体实现决定的情况下,发起该请求。当然,DSP 必须保证进行该操作的时间,不能导致该传输超时,也就是说,DSP 需要保证发起该请求前,链路上没有正在进行中的传输。

b:在上层协议要求后,DSP 即进入 Recovery.Equalization 状态,但是不能由 Configuration.Idle 或者 Recovery.Idle 状态直接进入 Recovery.Equalization 状态。(译注:需要通过 Recovery.RcvrLock 次状态进入)协议规定在 DSP 通过发送 EC 不为 0 的 TS1 要求对端重新进行均衡过程之前,不能发送超过两个 EC=00b 的 TS1 序列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1256756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STK Components 二次开发-地面站传感器

上一篇我们说了创建地面站,那么这次我们在地面站添加一些特效。 1. 创建地面站 var locationPoint1 new PointCartographic(m_earth, new Cartographic(Trig.DegreesToRadians(117.17066), Trig.DegreesToRadians(31.84056), 240.359)); m_facility new Platfor…

大型网站系统架构演化(Web)

大型网站系统架构演化 大型网站系统架构演化需要关注的维度涉及的技术演进过程单体架构垂直架构使用缓存改善网站性能缓存与数据库的数据一致性问题缓存技术对比Redis分布式存储方案Redis集群切片的常见方式Redis数据类型Redis 淘汰算法 大型网站系统架构演化 需要关注的维度 …

【虚拟机Ubuntu 18.04配置网络】

虚拟机Ubuntu 18.04配置网络 1.配置网络连接方式,查看自己网关 2.修改主机名 3.修改系统配置1.配置网络连接方式,查看自己网关 选择虚拟机镜像设置网络连接模式,可以选择桥接或者NAT连接(我这里选择是NAT连接) 确定自己网关,可以在虚拟机 -》 编辑 -》虚拟网络编…

Android 10.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在10.0的系统开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删除copy重命…

微信小程序开发学习——小程序基本架构

1.创建一个包含:首页、咨询、关于我们 3个标签的小程序,每个标签都有对应的页面、图标和标签文字。 知识点:app.json文件对小程序进行全局配置,同名.json文件对本窗口进行配置 app.json属性: pages用于指定小程序由哪…

sql语句在字段中使用select

有两个表如下;产品表,产品评论表; 查询全部产品信息和每种产品的评论数量; 这也是子查询的一种; select * from product1; select * from comment; SELECT product1.*,(select count(id) from comment where product1…

docker打包前端镜像

文章目录 一、构建镜像二、查看本地镜像三、启动容器四、查看启动的容器五、保存镜像六、读取镜像七、创建镜像八、最后 docker官网 一、构建镜像 -t是给镜像命名,.(点)是基于当前目录的Dockerfile来构建镜像 docker build -t image_web .二、查看本地镜像 docke…

nodejs微信小程序+python+PHP-婚纱摄影预约系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Ubuntu:安装VSCode

参考博客Ubuntu下安装VSCODE_ubuntu安装vscode-CSDN博客中的第二种方式【安装包方式安装】,即可,安装非常easy~~~ 安装包方式安装: 1. 从VSCode官网下载最新版的deb安装包: https://code.visualstudio.com/Download,…

手把手教会你--github的学习--持续更新

有什么问题,请尽情问博主,QQ群796141573 前言1.1 使用过程(1) 进入某个项目(2) 点击某个文件(3) 在源码区域下面(4) 源码区的头顶上 1.2 作者的其他项目1.3 搜索1.4 复制别人的代码(即项目)到自己的空间内1.5 上传自己的Bugs(bushi1.6 在线修改文件1.7 评…

JVM——垃圾回收算法(垃圾回收算法评价标准,四种垃圾回收算法)

目录 1.垃圾回收算法发展简介2.垃圾回收算法的评价标准1.吞吐量2.最大暂停时间3.堆使用效率 3.垃圾回收算法01-标记清除算法垃圾回收算法-标记清除算法的优缺点 4.垃圾回收算法02-复制算法垃圾回收算法-复制算法的优缺点 5.垃圾回收算法03-标记整理算法标记整理算法的优缺点 6.…

利用STM32和MFRC522 IC实现智能卡的读取和数据存储

利用STM32微控制器和MFRC522 RFID读写器芯片,可以实现智能卡的读取和数据存储功能。智能卡是一种集成了RFID技术和存储芯片的卡片,它可以用于身份验证、门禁控制、支付系统等应用场景。下面将介绍如何使用STM32和MFRC522芯片进行智能卡的读取和数据存储&…

【古诗生成AI实战】之四——模型包装器与模型的训练

在上一篇博客中,我们已经利用任务加载器task成功地从数据集文件中加载了文本数据,并通过预处理器processor构建了词典和编码器。在这一过程中,我们还完成了词向量的提取。 接下来的步骤涉及到定义模型、加载数据,并开始训练过程。…

如何申请永久免费的SSL证书

首先,让我们了解什么是SSL证书。 SSL(Secure Socket Layer)证书是一种数字证书,它提供了一种在互联网上安全地传输数据的方法。 这是一个必须的安全工具,可以加密您的网站和客户之间的所有信息。为了保护用户数据和确保…

消息队列使用场景、概念和原理

文章目录 1 使用消息队列的场景1.1 消息队列的异步处理1.2 消息队列的流量控制(削峰)1.3 消息队列的服务解耦1.4 消息队列的发布订阅1.5 消息队列的高并发缓冲 2 消息队列的基本概念和原理2.1 消息的生产者和消费者2.2 Broker2.3 点对点消息队列模型 ---…

059-第三代软件开发-巧用工控板LED指示灯引脚

第三代软件开发-巧用工控板LED指示灯引脚 文章目录 第三代软件开发-巧用工控板LED指示灯引脚项目介绍巧用工控板LED指示灯引脚第一种方式第二种方式 总结 关键字: Qt、 Qml、 Power、 继电器、 IO 项目介绍 欢迎来到我们的 QML & C 项目!这个项…

【Bootloader学习理解学习--加强版】

笔者在接着聊一下bootloader,主要针对MCU的Bootloader。 笔者之前介绍过一篇Bootloader文章,主要是其概念、一些升级包的格式和升级流程,本次接着来说一下。 1、MCU代码运行方式 之前文章也介绍过,MCU的代码运行方式有两种&…

二级分类菜单及三级分类菜单的层级结构返回

前言 在开发投诉分类功能模块时,遇到过这样一个业务场景:后端需要按层级结构返回二级分类菜单所需数据,换言之,将具有父子关系的List结果集数据转为树状结构数据来返回 二级分类菜单 前期准备 这里简单复刻下真实场景中 出现的…

二十六、搜索结果处理(排序、分页、高亮)

目录 一、排序 二、分页 1、深度分页问题 2、三种方案的优缺点 (1)fromsize 优点: 缺点: 场景: (2)after search 优点: 缺点: 场景: &#xff0…

hive杂谈

数据仓库是一个面向主题的、集成的、非易失的、随时间变化的,用来支持管理人员决策的数据集合,数据仓库中包含了粒度化的企业数据。 数据仓库的主要特征是:主题性、集成性、非易失性、时变性。 数据仓库的体系结构通常包含4个层次&#xff…