链路初始化和训练

一、总览

链路初始化和训练,由物理层进行控制,是一个基于硬件的过程。初始化设备的链路和端口,使得设备能够收发报文,在链路上正常通信。

在reset后由硬件自动启动完整的训练过程,并由LTSSM管理。

1 位锁定

训练开始,接收端时钟和发送端时钟不同步,接收端无法可靠采样输入信号的数据bit

训练期间,接收端的时钟和数据恢复(CDR,clock and data recovery)逻辑,通过使用数据bit流作为时钟的参考信号,来重建发送端的时钟,一旦从数据流中恢复了时钟,表示接收端完成位锁定。

2 符号锁定

编码8b/10b来说,下一步训练进行符号锁定,接收端可以接收单个bit,但是不知道10bit组成符号的边界,收发端交换有序集TS1和TS2时候,接收端接收可识别的pattern,如COM符号,因为COM符号独特编码导致它容易被识别找到,识别到COM后,接收方不但定位到两个符号的边界,还可以定位到两个有序集边界(TS1 TS2以COM作为开端,可区分)。

3 块锁定

和符号锁定不太一样,没有编码方案的支持,但是还是需要区分块边界。解决方式就是在有序训练集中包含更多的EIEOS(电气空闲退出有序集),用于定位边界。特定是00h和FFh交替的pattern。

4 链路宽度

PCIE可以使用不同的链路宽度,如X2和X4的端口设备连接,链路训练过程中, 两台设备会设置为两者能接受的最大值(交集)。

5 通道翻转

通常设备端口在多通道情况下,从0开始依次递增;端口对端口也是0对0,1对1这样;

这个功能主要是简化PCB布线,当支持通道翻转时候,如4通道情况下,默认是0-0,1-1,...这样的,但是某种原因,需要0-3 1-2 2-1 3-0这样交叉进行对接,如有通道翻转,开启后,效果和默认一样;这是可选项。

6  极性翻转

两个设备间D+和D-是支持反接的,目的也是为了简化PCB布局布线。任意的接收端都需要单独检测查分信号的连接情况,如发生极性翻转,训练期间自动纠正。这是必选项。

 7 数据链路速率

reset后,链路初始化和训练状态机总是会将速率设置为默认的2.5Gbit/s,实现向后兼容(第一代就是2.5)。若是要实现更高的速率,完成训练后,LSTTM再重新进行一次过程更短的训练,以改变双方都支持的最高速率;

8 多lane信号去偏移

通道间的传输线长度有差异,导致多通道链路中同时并行传输的bit,到达接收端有差距,称为信号偏斜;接收方需要延迟到达早的通道,对齐所有通道的信号时间,补偿通道之间的信号传输快慢的差异;

6~8可以很大程度上简化PCIE PCB设计。

二、链路训练的有序集

链路训练过程设计的有序集TS1和TS2

 LTSSM在轮询、配置以及恢复状态中,收发端都会交换TS1 TS2有序集。

symboldescription
0gen1/gen2:COM(k28.5)符号;GEN3: 1Eh->TS1有序集
1

Link Number链路编号:

  • 不支持GEN3端口:0~255,PAD
  • 支持GEN3的下游端口:0~31,PAD
  • 支持GEN3的上游端口:0~255,PAD
2

Lane Number链路编号:

  • 0~31,PAD
3

N_FTS

有序集数量:从L0s返回L0时,接收方收到快速FTS有序训练集数量。

4

data rate identitifer(数据速率标识符)

bit 0:reserved;

bit 1:必须置1,支持2.5GT/s

bit 2: 若bit3为1,那么bit2必须为1,支持5GT/s

bit 3:支持8GT/s

bit 5:4::reserved;

bit 6:LTSSM一些特定状态下使用,其他状态reserved;

bit 7:speed change,只在recovery和rcvLock LTSSM状态设置,其余状态reserved;

5

training controller(训练控制)

  • bit 0:Hot Reset
  • bit 1:disable Link
  • bit 2:lookback
  • bit 3:disable scramble(2.5 or 5.0;gen3 reserved)
  • bit 4:compliance receive(可选支持2.5,其余必须支持)
  • bit 7~bit 5:reserved
6

Gen1/Gen2:

  • TS1(4Ah),即10.2
  • EQ TS1,普通TS不适应

          bit0~bit2:receiver present hint

          bit3~bit6:transmitter present

          bit7:set 1

GEN3:

bit0~bit1:equalization control(仅在recovery equalization 以及loopback状态使用)

bit2:reset EIEOS interval Count(仅在recovery equalization 以及loopback状态使用)

bit3~bit6:transmitter preset

bit 7: use preset(仅在recovery equalization 以及loopback状态使用)

7

GEN1/GEN2

TS1标识符:4Ah(D10.2)

GEN3:

bit0~bit5:FS(Full Swing value)

bit6~bit7:reserved

8

GEN1/GEN2

TS1(4Ah):D10.2

GEN3:

bit0~bit5:LF(Low Frequency value),需要符号6的EC=01b

bit6~bit7:reserved

9                    

GEN1/GEN2

TS1(4Ah):D10.2

GEN3:

bit0~bit5:post-cursor coefficient

bit6: reject coefficient values

bit 7:parity(P)---该校验码覆盖范围:6 7 8 以及符号9[6:0],接收方需要重新计算校验码并且与之比较,通过后TS1才算有效

10~13

Gen1/Gen2:
• TS1 标识符(4Ah) ,即 D10.2
Gen3:
• TS1 标识符(4Ah)

14~15Gen1/Gen2:
• TS1 标识符(4Ah) ,即 D10.2
Gen3:
• TS1 标识符(4Ah),或者DC-balance符号

 TS2:

symboldescription
0gen1/gen2:COM(k28.5)符号;GEN3: 2Dh->TS1有序集
1

Link Number链路编号:

  • 不支持GEN3端口:0~255,PAD
  • 支持GEN3的下游端口:0~31,PAD
  • 支持GEN3的上游端口:0~255,PAD
2

Lane Number链路编号:

  • 0~31,PAD
3

N_FTS

有序集数量:从L0s返回L0时,接收方收到快速FTS有序训练集数量。

L0s:0~255

4

data rate identitifer(数据速率标识符)

bit 0:reserved;

bit 1:必须置1,支持2.5GT/s

bit 2: 若bit3为1,那么bit2必须为1,支持5GT/s

bit 3:支持8GT/s

bit 5:4::reserved;

bit 6:LTSSM一些特定状态下使用,其他状态reserved;

bit 7:speed change,只在recovery和rcvLock LTSSM状态设置,其余状态reserved;

5

training controller(训练控制)

  • bit 0:Hot Reset
  • bit 1:disable Link
  • bit 2:lookback
  • bit 3:disable scramble(2.5 or 5.0;gen3 reserved)
  • bit 4~bit 7:reserved
6

Gen1/Gen2:

  • TS2(4Ah),即D10.2
  • EQ TS2,普通TS2不适应

          bit0~bit2:receiver present hint

          bit3~bit6:transmitter present

          bit7:equalization command

GEN3:

bit0~bit5:reserved(仅在recovery equalization 以及loopback状态使用)

bit6:Quiesce Guarantee(仅在recovery revrCfg状态使用)

bit 7:request equalization(仅在recovery revrCfg状态使用)

7~13

GEN1/GEN2

TS2(45h):D5.2

GEN3:

TS2(45h)

14~15Gen1/Gen2:
• TS1 标识符(4Ah) ,即 D10.2
Gen3:
• TS1 标识符(4Ah),或者DC-balance符号

每个字段的详细含义:

1 symbol 0:

  GEN1/GEN2:所有有序集的首个符号都是K28.5(COM)字符。

接收方通过接收COM字符,锁定符号,确定边界。COM字符需要同时出现在所有通道上,因此可以用于信号去偏移。

  GEN3:有序集所在的block前面是2bit的同步头,后面的首个符号标识有序集类型(TS1是1Eh,TS2=2Dh)。

2 Symbol 1(Link #):链路编号;poll状态使用填充字符填充,其他状态为分配的链路编号;

3 Symbol 2(Lane #):通道编号,poll状态使用填充字符填充,其他状态为分配的链路编号;

4 Symbol 3(N_FTS):接收方,从L0s(电源状态)退出,返回L0,接收到快速训练序列(FTS)数量。

   退出L0s状态时,发送方至少会发送N_FTS个FTS。取决于需要FTS的数量和当前链路速率。

5 Symbol 4(Rate ID):设备报告所支持的数据速率,和一些给由硬件发起的带宽改变功能信息。

  所有信息都必须支持2.5GT/s速率,且复位后始终被训练为2.5GT的速率,任何新设备都需要后向兼容(如支持8GT,那么必须支持5GT/s)

  Autonomous change:

    若为1,任何带宽改变请求都是基于电源管理方面原因发起的;

   若发起带宽请求时候,未置1,那么代表设备在较高速率或者较宽链路检测到工作不稳定的情况时候,需要改变带宽设置(如降低速率或减小链路宽度)来解决这些问题。

Selectable De-emphasis

    上游端口:5GT速率下期望的去加重水平设置,具体设置取决于实现。

    下游端口/根节点端口:在polling.Compliance状态中,接收该bit数据设置select_deemphasis变量。

 Link Upconfigure Capability:表示一个较宽的链路减少宽度后,是否有能力重新恢复原来的链路宽度。

Symbol 5(training control):链路双方一些特殊情况交流(或者说通信)。如一次热复位,使能回环或者关闭加扰。

Symbol6~9:

GEN2/GEN1:符号7~9表示TS1和TS2的标识符。符号6的bit7若是0,那么也表示标识符。

若bit7为1,表示当前有序集面向一个下游端口,发送的是EQ TS1或者EQ TS2,发送EQ TS意味着链路速率达到8GT,上游端口是需要知道当前使用的均衡参数。信息包括发送端的预设集选择,接收预设集选择提示。

GEN3:6~9符号提供均衡过程所需的预设集选择数值及参数。

Symbol10~13:TS1或者TS2标识符

Symbol 14~15:

GEN1/GEN2:表示TS1或者TS2标识符;

GEN3:表示基于本通道DC均衡的需要。DC均衡指的是目前发送的0和1的数量差值。

三、数据训练与状态控制机

 LTSSM包含11个顶层状态:

detect、polling、configuration、recovery、L0、L0s、 L1、 L2、Hot Reset、Loopback、DIsable;

可分五大类:

链路训练状态;

重训练状态;

软件驱动电源管理状态;

主动电源管理;

任意复位释放后,LTSSM进入训练类状态,一切正常情况下,顺序如下:

detect->polling->configuration->L0,进入L0状态后,便可以正常收发报文。

进入链路重训练(recovery)状态的原因很多,如L1重恢复或者链路带宽切换。在此状态下,链路重复类似训练操作的状态,来解决链路问题,并最终回到L0(正常工作状态)。

设备进入低功耗状态下,会强制链路进入低功耗软件管理链路状态,如L1 L2;

如果链路上很长时间没有报文需要传输,ASPM硬件逻辑会使得链路进入低功耗ASPM状态,如L0s或者ASPM L1。

其他状态:禁用状态(disable)、回环状态(loopback)、热复位(hot reset)状态。

检测状态(detect):复位释放后进入的初始状态,用于检测链路对端设备是否存在。其他LTSSM的状态也可转移到detect状态。

轮询polling:发送端将以2.5Gbps的速率向对端发送TS1和TS2序列,使用协议最低速率以实现对早期协议的后向兼容。接收端接收到序列后,完成如下功能:

    位锁定;

    符号锁定或者块锁定;

    必要情况下校正通道极性翻转;

    获取通道支持的链路数据速率 ;

   测试条件下,发起兼容性测试(主要是快速验证链路的电压 BER 时序以及其他指标都在链路可容范围内);

配置状态(configuration):上游或者下游器件,按照2.5速率,交换TS1和TS2序列,实现如下目标:

协商链路宽度;

为各个通道指派编号;

检测通道是否顺序或者极性交换,在本地恢复这些交换;

补偿各个通道之间的时序偏斜;

这个状态可以关闭加扰,进入disable或者loopback状态,还会记录TS1和TS2序列交换时候的N_FTS,即L0s状态进入L0状态所需的FTS序列数量。

L0状态:L0是一个链路全功能正常的状态,链路上可以正常进行TLP DLLP和有序集的交换。L0状态下,链路速率可以比2.5GT/s更高,但只能在进入recovery状态,经历一次速率切换后,才能达到更高的速率。

恢复状态recovery:当链路需要重训练时,进入recovery状态。可能原因:L0状态中发生了错误、从L1低功耗状态恢复到L0状态、从L0s状态恢复到L0时,无法通过FTS序列重新完成训练。该状态下会重新进行bit和字符/块锁定,方法是和polling时候一样,一般来说,此次更快。

L0s状态:L0s是一个由硬件控制的ASPM低功耗状态,L0s状态的目标是在节约一定功耗的同时,能够快速地恢复到L0状态。进入方式:L0状态下,链路一方发送EIOS。退出L0s:会通过FTS序列重新完成bit和字符/块锁定。

L1状态:L1状态能够比L0s状态降低更多的功耗,代价在于需要更长时间恢复到L0状态。进入L1状态需要链路双方进行协商,并一起进入。进入L1方式:

其一,ASPM控制下,自动进入L1。如上游端口没有DLLP或者TLP包时候,硬件自动与下游端口协商,链路一起转向L1状态。如果下游同意,那么链路进入L1状态,否则上游端口将单方面进入L0s状态。

其二,功耗管理软件命令设备进入低功耗状态。上游端口通知下游端口,下游端口响应通知,链路进入L1。

对比L0s和L1:

L1需要双方协商,链路状态才能到达L1,但是L0s可以单方面进入;

L0s快速恢复,L1恢复相对较慢;

L1功耗更低;

L2状态:更显著功耗节约状态;

回环状态loopback:测试状态;目的是验证链路完整性。

禁用状态(disable):链路配置为禁用状态;发送逻辑为电气空闲,接收逻辑为低阻状态。

热复位状态(hot reset):桥控制寄存器配置次级总线复位bit,复位链路。

四、详细次状态

(一)detect

 

(二)polling

 (三)configuration

本状态目标主要是弄清楚设备端口(port)和各个通道(lane)的连接情况,以及为连接的通道分配编号。

端口在此状态下分面向上游端口和面向下游端口,这是两个不同的端口。配置过程也会根据上游端口和下游端口行为进行讨论。

DSP(downstream Port)端口在链路中是扮演“领导者”,USP(upstream port)端口是跟随者。

configuration状态训练过程分析

具体分析见下图: 

(四)L0

L0状态介绍可以参考此处。 

 总结L0状态:

链路的全功能正常工作状态。实际使用时候,判断链路正常与否就是看进入L0状态。L0进入L0s和L1、L2,进入低功耗状态。L0若进入recovery,可能是切换速率或者链路宽度(lane)。

(五)recovery

比较常见进入recovery状态场景:

1 切换速率

2 切换链路宽度

3 链路需要重新EQ

具体可以参考此文,介绍比较详细。

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

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

相关文章

【Vue】diff 算法

diff的时机 当组件创建时,以及依赖的属性或数据变化时,会运行一个函数,该函数会做两件事: 运行_render生成一棵新的虚拟dom树(vnode tree),返回根节点运行_update,传入虚拟dom树的根节点,对新旧…

typedef定义结构体包含函数指针的巨坑

起因 尝试在c中模仿c的类,把成员函数放置到结构体中。显然只能放置一个结构体指针。 于是准备这么做。 错误示范 typedef struct {int id;void(*show)(Person p); }Person;void showPerson(Person p){ //.... }void init(Person * p){p->show showPerson; …

犀牛8 for Mac/Win:重塑三维建模的新标杆

在数字创意的浪潮中,犀牛8(Rhinoceros 8)作为一款卓越的三维建模软件,以其强大的功能和出色的性能,在Mac和Windows平台上都赢得了广大设计师和工程师的青睐。 犀牛8不仅继承了前代产品的优秀基因,更在细节…

基于python+Django+opencv的疲劳检测系统设计与实现

博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

Nginx的集群负载均衡(nginx构建tomcat集群案例)

一 .Nginx的集群负载均衡 1.nginx 集群负载均衡示意图 2.四层负载均衡和7层负载均衡 LVS 四层负载均衡(常用); Haproxy四层负载均衡;Nginx 四层负载均衡; Haproxy七层负载均衡;Nginx 七层负载均衡(常用); 3.nginx构建tomcat集群 步骤1:安装tomcat 步骤2:nginx配置tom…

夸夸生肖属鼠的女性朋友

属鼠人一生的命运受到许多因素的影响,包括性格、家庭、教育、环境等。属鼠人性格外向、求知欲强、善解人意、善于结交各种各样的朋友,有丰富的人脉,容易得到他人的帮助和支持。 属鼠的人聪明、机智,他们善于观察,富有…

MySQL(七) 表的内连和外连

表的连接分为内连和外连 9.1 内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法: select 字段 from 表1 inner join 表2 on 连接条件 and …

【代码随想录】面试常考类型之动态规划基础题目

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记,为了之后方便观看 做题步骤 含义公式初始化顺序检查 确定dp数组以及下标的含义递推公式dp数组如何初始化遍历顺序打印dp数组(看哪里有问题) 斐波那契数 …

MFC:CFileFind类使用方法介绍

这是一个介绍MFC中CFileFind类的小程序。编写这个程序使用的编辑软件是VS2022&#xff0c;基于C空项目。在C空项目下要调用MFC类需要&#xff1a;首先&#xff0c;头文件要包含<afx.h>&#xff0c;这个头文件包含了绝大部分使用MFC所需头文件&#xff1b;其次&#xff0c…

在线改图片怎么做更简单?快速修改图片尺寸的方法

现在一般拍摄出的图片尺寸都会比较大&#xff0c;想要上传大网上的一些平台展示时&#xff0c;经常会受到平台的限制&#xff0c;无法将图片正常上传到平台&#xff0c;那么如何将图片尺寸快速调整呢&#xff1f;比较简单的一种方式&#xff0c;可以通过在线改图片的工具来实现…

一个开源的个人主页模板,可以通过 Github Actions 来进行自动构建。

無名の主页 简单的小主页&#xff0c;原来的看够了&#xff0c;重新弄了一个 主页的 Logo 字体已经过压缩&#xff0c;若用本站 Logo 以外的字母会变回默认字体&#xff0c;这里是 完整字体&#xff0c;若无法下载&#xff0c;可将字体目录下的 Pacifico-Regular-all.ttf 进行替…

Linux程序开发(十一):进程与进程间通信设计之趣味猫咪抓老鼠游戏

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

他用AI,抄袭了我的AI作品

《大话西游》里面有一句经典台词&#xff1a;每个人都有一个妈&#xff0c;但是“你妈就一定是你妈吗&#xff1f;” 用AI创作的艺术作品&#xff0c;也走进类似的困境&#xff1a;如何证明你用AI生成的作品&#xff0c;就是你的作品&#xff1f; 近日&#xff0c;腾讯科技独…

Google手机连接wifi后提示“无法连接互联网“解决方法

1.原因分析 谷歌手机联网前会先访问谷歌的服务器:http://clients3.google.com/generate_204来探测网络是否连通&#xff0c;由于国内网络防火墙的原因访问不了&#xff0c;所以就提示"无网络连接"。 2.解决方法 可以通过adb命令修改验证网络是否连通的服务器地址&…

SpringCloudAlibaba:6.3SpringBoot接入RocketMQ

依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 htt…

【C++提高编程-04】----C++之Vector容器实战

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

STM32+CubeMX移植SPI协议驱动W25Q16FLash存储器

STM32CubeMX移植SPI协议驱动W25Q16FLash存储器 SPI简介拓扑结构时钟相位&#xff08;CPHA&#xff09;和时钟极性&#xff08; CPOL&#xff09; W25Q16简介什么是Flash&#xff0c;有什么特点&#xff1f;W25Q16内部块、扇区、页的划分引脚定义通讯方式控制指令原理图 CubeMX配…

iBarcoder for Mac v3.15.1中文激活版:让条形码生成变得如此简单

在现代社会&#xff0c;条形码无处不在&#xff0c;从超市商品到物流包裹&#xff0c;都离不开它的身影。iBarcoder for Mac作为一款简单易用的条形码生成软件&#xff0c;让条形码的生成变得如此简单。 iBarcoder for Mac v3.15.1中文激活版下载 无论你是需要为商品添加条形码…

Scrapy框架简单介绍及Scrapy项目编写详细步骤

引言 Scrapy是一个用Python编写的开源、功能强大的网络爬虫框架&#xff0c;专为网页抓取和数据提取设计。它允许开发者高效地从网站上抓取所需的数据&#xff0c;并通过一系列可扩展和可配置的组件来处理这些数据。Scrapy框架的核心组成部分包括&#xff1a; Scrapy Engine&…

aws glue配置读取本地kafka数据源

创建连接时填写本地私有ip地址&#xff0c;选择网络配置 配置任务选择kafka作为数据源 但是执行任务时日志显示连接失败 文档提到只能用加密通信 如果您希望与 Kafka 数据源建立安全连接&#xff0c;请选择 Require SSL connection (需要 SSL 连接)&#xff0c;并在 Kafka priv…