状态机描述
**************************************************************************************************************
Config.linkwidth.start
**************************************************************************************************************
polling configuration状态跳转到Config.linkwidth.start状态:
当任意lane收到连续的8个TS2(link nun和lane num均为pad)并且自从收到TS2序列后至少发送了16个TS2序列;
Config.linkwidth.start状态跳转到Configuration.Linkwidth.Accept状态
dsp:
(1)crosslink configuration不支持的情况下:任意lane,如果先收到了一个或者多个TS1,其link num和lane num都是pad,随后又收到两个连续的TS1,其中link num为具体数值,lane num为pad,那么满足进入Configuration.Linkwidth.Accept状态的条件;
(2)crosslink configuration支持,dsp可能转变为usp,转变后的状态跳转完全遵循usp的准则。
Usp(有问题??):
如果一些通道接收到了两个连续的链路编号有效,通道编号为填充符号的 TS1,那么这个端口就会进入 Configuration.Linkwidth.Accept 子状态
Config.linkwidth.start状态跳转到loopback状态:
(1)所有发送TS1的lane上,都收到了两个连续的Loopback为1的TS1。-dsp/usp均满足
(2)任意一共发送TS1的lane上收到了两个连续的loopback为1的TS1,同时Enhanced Link Behavior Control比特为1。-dsp/usp均满足
(3)一个能支持64GT/s的port收到了TS1,并且该TS1的Flit Mode Supported bit为1,the Supported Link Speeds域为10111b。-dsp/usp均满足
注意:任意发送 Loopback 比特置位的端口将变成 Loopback master,而收到他们的端口将变成 Loopback slave。
(4)上层指示要求在detect为receiver的lane上发送的TS1或TS2,其中让loopback bit置为1;-dsp/usp均满足
Config.linkwidth.start状态跳转到disable状态:
Dsp:上层指示要求在detect为receiver的lane上发送的TS1或TS2,其中让disable bit置为1;
Usp:任何TS1的lane上收到了两个连续的TS1,并且TS1的disable位为1;
Config.linkwidth.start:
1.
(1)Linkup = 0 + 状态机没有执行链路宽度的升级(upconfiguration of the Link width):那么tx会在所有active的dsp上发送TS1,其中link num为具体内容,lane num为pad;
TS2中的bit 6,bit 6 ---“Link Upconfigure Capability”表示Link Parner是否支持Link width变宽,如果不支持的话,Link width就只能变窄,最适合出现链路可靠性问题的情况。
(2)upconfigure_capable为1(这个变量为1一般表示上层逻辑执行链路宽度的减少),并且状态机没有执行upconfiguration of the Link width,那么自从进入到recovery状态之后,并且在当前子状态下收到了两个连续的TS1,其中link num和lane num均为pad,此后检测到退出Electrical Idle,那么tx会在inactive Lane上发送TS1,其中link num为具体内容,lane num为pad;
dsp
usp
那么什么是active的lane呢?-dsp/usp均满足
从Polling状态进入此子状态时,所有检测到接收端的通道会被视作Active Lane。从Recovery状态进入此子状态时,所有历经 Configuration.Complete 状态的链路上的通道,都会被视作Active Lane。
另外注意一点,DSP必须在发送的TS1中通告自身所有支持的速率,其中也需要包括端口不打算使用的速率。
此外针对usp,还需要注意,如果此时的状态跳转不是由 LTSSM 超时触发的,那么此时发送方应该在 Configuration 状态中发送的 TS1 中置位 Autonomous Change 比特 (Symbol 4, bit 6) ,表示发送方出于自身(Autonomous )原因想要改变链路宽度,从而进入 Configuration 状态。
2.
(1)dsp:
Linkup = 1 + 状态机执行链路宽度的升级(upconfiguration of the Link width):那么tx会在那么会在下列三类通道上发送link num和lane num均为pad的TS1.
A:当前工作的通道上;
B:想要激活的非工作通道;
C:自从进入recovery状态之后已经收到两个连续的TS1接收到TS1的通道上,并且,在该通道上检测到退出Electrical Idle。
Usp:tx会在下列三类通道上发送link num和lane num均为pad的TS1.
A:当前工作的通道上;
B:想要激活的非工作通道;
C:如果upconfigure_capable为1,针对inactive的lane,并且这个lane自从进入recovery状态之后已经收到两个连续的TS1接收到TS1的通道上,并且,在该通道上检测到退出Electrical Idle的lane。
针对usp,注意三点:
A:如果 USP 打算恢复链路宽度,LTSSM 首先等待下述两个条件任意满足一个:所有待激活的通道上都接收到两个连续的链路编号有效,通道编号为填充符号的TS1或者任意一个待激活通道进入本状态超过1ms
B:为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少2个TS1,128b/130b 编码时至少等待34个 TS1,但任何情况下不要等待超过1ms。
C:在激活不工作的通道后,发送端必须等待发送共模电压(Tx common mode voltage)稳定,才能退出电气空闲状态并开始发送TS1。
(2)那么什么时候开始发送link num为具体数值,但是lane num为pad的TS1呢?在满足以下条件之一即可:
Dsp
A:在发送TS1的lane上收到了收到了两个连续的TS1,并且link num和lane num均为pad;
B:1ms超时;
另外注意两点,针对的dsp,在激活不工作的通道时,发送端必须等待发送共模电压(Tx common mode voltage)稳定,才能退出电气空闲状态并开始发送TS1;对于组合为同一链路的通道,他们的链路编号必须相同。只能在支持多链路配置的不同链路之间才可以分配不同的链路编号。
Usp:
如果一些通道接收到了两个连续的链路编号有效,通道编号为填充符号的TS1, usp选取其中一个接收到的链路编号作为这些通道的链路编号,并在所有收到链路编号非空的TS1的通道上,回复采用该链路编号的TS1,通道编号继续使用填充字符。对于剩下的通道,如果他们检测到了接收方,但是还没有收到链路编号,那么则发送链路编号和通道编号都采用填充符号的TS1。
3.针对支持crosslinks特性:
Dsp
会在所有detect阶段检测为receiver的lane上先发送16~32个TS1,其中link num为具体数值,lane num为pad。在此之后,任意一个lane在收到两个连续的TS1,其中link num为具体数值,lane为pad,随后dsp转变为usp(为了根据timeout机制决定谁才是真正的dsp,如果 DSP 接收到的第一批 TS1 中,链路编号就已经不是填充符号了,那么 DSP 通过这种现象就意识到存在交叉链路(Crosslink),链路对端设备此时也是 DSP。针对这种情况,面向下游的通道将转换为面向上游通道,DSP 等待长度随机的超时时间后,重新进入 Configuration.Linkwidth.Start 状态,只不过此时该通道将变成面向上游的通道)。并且转变为Configuration.Linkwidth.Start的条件变为和usp一样。
注意两点,针对两端都想变为dsp的情况,可以让双方都先变为usp,随后双方都随机等一个时间,超时后usp转变为dsp。因为双方的超时时间长度是不同的,最终将有一个端口成为 DSP ,而另一个端口仍然是 USP,这样一来训练就可以继续进行。超时时间长度必须是随机,这样即使链路双方的端口实现完全相同,也不会出现死锁的情况;如果支持交叉链路特性,那么在接收的 TS1 的链路编号从PAD转换到非PAD符号的过程中,不允许出现TS2打断这个过程。
Usp:
对于支持交叉链路特性的 USP 来说,当 LinkUp = 0b 时,需要在所有检测到接收端的通道上至少发送 16-32 个 TS1,其中链路编号和通道编号采用填充符号。随后任何usp的一些通道上接收到了两个连续的链路编号有效,通道编号为填充符号的TS1,那么有如下操作和条件:
A:tx持续发送TS1,link num和lane num均为pad;
B:如果任意通道接收到了两个连续的链路编号有效,通道编号为填充符号的TS1, usp选取其中一个接收到的链路编号作为这些通道的链路编号,并在所有收到连续两个链路编号非空的TS1的通道上(lane编号为lane),回复采用该链路编号的TS1,通道编号继续使用填充字符。对于剩下的通道,如果他们检测到了接收方,但是还没有收到链路编号,那么则发送链路编号和通道编号都采用填充符号的TS1。下一个状态是 Configuration.Linkwidth.Accept。
C:为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少 2 个 TS1,128b/130b 编码时至少等待 34 个 TS1,但任何情况下不要等待超过 1ms。
注意,如果不满足上述条件,经过Tcrosslink时间后,16-32个TS1,其中linknum和lane num均为pad,usp变为dsp,下个状态变为Configuration.Linkwidth.Start(相当于重新开始)。
**************************************************************************************************************
Config.linkwidth.accept
**************************************************************************************************************
Config.linkwidth.accept:
Dsp:
dsp提议通道编号值。如果一条链路可以由多个通道合并组成,这些通道都可以收到两个连续的,链路编号值相同的 TS1,那么dsp会为他们发送链路编号一致,但是通道编号各不相同的TS1。对于剩下的通道,如果他们没有接收到TS1,那么发送链路编号和通道编号都采用填充符号的TS1,不能打断原有发送过程。
为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少2个TS1,128b/130b 编码时至少等待34个TS1,但任何情况下不要等待超过1ms。-dsp/usp均满足
1.变量变化
A:在满足如下条件的时候use_modified_TS1_TS2_Ordered_Set变为1:
(1)LinkUp = 0b -dsp/usp均满足
(2)自从进入polling状态以来,tx已经在polling/Configuration状态下发送Modified TS1/TS2,在TS1/TS2中设置symbol5中的Enhanced Link Behavior Control field为‘b11。针对up端,要求在所有的TS1/TS2中发送这样的序列
(3)导致从polling.configuration转变到configuration状态的那8个连续的TS2的data rate中设置了Enhanced Link Behavior Control field位为’b11(symbol5)+TS2中的32.0 GT/s data rate is supported设为1。注意这8个TS2要求是连续的,并且是在所有lane上都收到才能满足从polling.configuration转变到configuration状态。-dsp/usp均满足
B:在满足如下变化Flit_Mode_Enabled变量设为1:
(1)LinkUp = 0b-dsp/usp均满足
(2)自从进入polling状态以来,tx已经在polling/Configuration状态下发送相关TS1/TS2,在其中TS1/TS2中设置symbol4中bit0,也就是Flit Mode Supported bit中的Data Rate Identifier为‘b1。-dsp/usp均满足
(3)导致从polling.configuration转变到configuration状态的那8个连续的TS2的data rate中设置了flit mode supported位(也就是symbol4的bit0)为1。注意这8个TS2要求是连续的,并且是在所有lane上都收到才能满足从polling.configuration转变到configuration状态。-dsp/usp均满足
usp:
usp在从dsp提供的链路编号中选择其中一个,填充至所有通道的TS1中,反馈发送给dsp。这里所有通道指的是那些所有接收链路编号不为填充字符TS1的通道。在所有剩余的通道中,如果检测到对端接收方,但是没有接收到有效链路编号的通道,将继续发送链路编号和通道编号采用填充符号的TS1。
如果一个link可以使用具体数值的link num号来实现configured link(注意,这个link num来自于收到的两个连续的TS1,并且这两个TS1中的link num和lane num均不为pad,两个连续的TS1中的link num和lane num前后一致),那么TS1会发送和收到的TS1的link num/lane num一致或不一致的TS1(针对不一致的TS1往往是存在于lane reversed)。
另外注意三点:
(1)收到的TS1既可以是标准的TS1,也可以是Modified的TS1(Modified的TS1只有在use_modified_TS1_TS2_Ordered_Set为1的情况下);
(2)针对lane进行编号的时候,需要注意,lane num必须要针对连续的grouping的lane进行连续的编号,针对没有收到TS1的lane,相当于这个lane不属于一个grouping的lane。剩下的lane必须要发送link num和lane num均设为pad的TS1。
(3)比如说一个 x8 链路,将会把它的通道编号为 0-7。端口需要支持链路容纳其所拥有的最大通道数,也需要支持链路容纳最少至一个通道。通道总是从 0 开始编号,并且需要是连续编号不中断的。比如,如果一个 x8 链路上有些通道不工作,它可能可以转而配置成一个 x4 链路,这种情况下它必须使用通道 0-3。再举一个例子,如果是链路的通道 2 无法正常工作,无法使用通道 0,1,3,4 组成一个 x4 链路,因为它们的编号是不连续的。链路上任何剩余的通道必须发送链路和通道编号都使用填充符号的 TS1。
**************************************************************************************************************
Config.lanenum.wait
**************************************************************************************************************
Configuration.Lanenum.Wait
如果use_modified_TS1_TS2_Ordered_Set为1,需要注意:
(1)tx需要发送Modified TS1而不是正常的TS1;
(2)rx端必须检查是否收到Modified TS1(注意一开始进入这个状态的时候可能还是收到标准的TS1,需要检查的是收到连续的Modified TS1)
为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少 2 个 TS1,128b/130b 编码时至少等待 34 个 TS1,但任何情况下不要等待超过 1ms。
Dsp:
在 Configuration.Lanenum.Wait 状态期间,DSP 会继续发送链路和通道编号为非填充值的 TS1,直至满足某个跳转到其他状态的条件。
Usp:
在 Configuration.Lanenum.Wait 状态期间,USP 会继续发送链路和通道编号为非填充值的 TS1,直至满足某个跳转到其他状态的条件。
**************************************************************************************************************
Config.lanenum.accept
**************************************************************************************************************
Configuration.Lanenum.Accept
如果use_modified_TS1_TS2_Ordered_Set为1,需要注意:
(1)tx需要发送Modified TS1而不是正常的TS1;
(2)rx端必须检查是否收到Modified TS1(注意一开始进入这个状态的时候可能还是收到标准的TS1,需要检查的是收到连续的Modified TS1)
Dsp:
如果dsp在所有通道上都接收到连续两个TS1,它们携带的链路和通道编号都和 dsp在这些通道上发送的数值一致,那么代表usp同意了dsp通告的链路编号和通道编号,dsp随之进入 Configuration.Complete 状态。如果dsp接收到的通道编号顺序与通告的顺序相颠倒,如果dsp支持通道顺序颠倒,那么dsp同样进入 Configuration.Complete状态,并采用接收到的,颠倒的通道编号顺序。(针对usp,进入Configuration.Complete状态的条件是,如果 USP在所有通道上都接收到连续两个TS2,它们携带的链路和通道编号都和 USP 在这些通道上发送的 TS1 中的数值一致,那么USP 进入 Configuration.Complete 状态。)
如果一条正在被配置的链路可以由一部分而不是全部的可用通道组成,这些通道都收到连续两个 TS1 ,链路编号为相同有效的数值,并且通道编号也不为填充符号。那么在这部分通道上发送链路编号相同,通道编号重新编制的 TS1,旨在用更少数量的通道来编成一条链路。新的通道编号必须从 0 开始顺序递增,指派给链路所使用的通道。任何没有接收到 TS1 的通道不能成为链路的一部分,并且中断通道编号递增。举例而言,如果共有 8 条通道,但是通道 2 没有接收到 TS1,那么这组通道将不能组成包括通道 2 的链路。这样一来,不能组成 x8 或者 x4 的链路,只能组成 x2 或者 x1 的链路。剩下不使用的通道,必须在其上发送链路和通道编号都为填充符号的 TS1。此时下个状态是Configuration.Lanenum.Wait。-dsp/usp均满足
如果没有链路可以被配置,或者所有通道接收到两个连续的 TS1,其链路和通道编号都为填充符号,下个状态是detect。-dsp/usp均满足
为了避免将链路的宽度配置小于正常宽度,协议建议如果在多通道链路上发现某些通道出现错误或者失去 Block Alignment 状态,那么延迟一段时间后再进行本过程。8b/10b 编码时等待至少 2 个 TS1,128b/130b 编码时至少等待 34 个 TS1,但任何情况下不要等待超过 1ms。-dsp/usp均满足
注意几点:
(1)针对Reversed Lane来说,其lane num的变化要求是非常严格的,比如原来lane num是0,那么收到的TS1中的Lane num就为n-1;原来为n-1的lane,那么收到的TS1中的lane num为0;-dsp/usp均满足
(2)注意,如果use_modified_TS1_TS2_Ordered_Set变量设为1,并且Alternate Protocol Negotiation执行了,那么转换到Configuration.Complete状态必须要延迟10us,直到dsp收到usp的rsp(这里有问题,什么是Alternate Protocol Negotiation??,usp这里同样有这样的描述,同样需要注意)
变量变化:
1.在如下条件下:SRIS_Mode_Enabled设为1:
(1)Linkup = 0;
(2)自从进入Configuration state状态后,port已经发送了SRIS Clocking (Symbol 4, bit 7 = 1b)的TS1;
寄存器变化:
1.如果当前的configuration状态是从recovery状态进入的,那么Link Status Register中的Link Bandwidth Management Status和Link Autonomous Bandwidth Status域需要根据如下规则更新:
(1)由于链路可靠性导致的dsp发起的bandwidth的改变Link Bandwidth Management Status设为1;
(2)bandwidth的改变不是由于dsp,并且收到的连续两个TS1中的Autonomous Change(Symbol 4 bit 6)为0,Link Bandwidth Management Status设为1;
(3)其他情况下Link Autonomous Bandwidth Status域设为1;
**************************************************************************************************************
Config.complete
**************************************************************************************************************
Configuration.Complete
Flit_Mode_Enabled为0 + LinkUp为1,允许双方设备在进入本状态时,改变它们的支持速率列表和链路宽度恢复能力(upconfigure capability),但一旦进入本状态后,这些设置就不再允许修改。
Flit_Mode_Enabled为1 + LinkUp为0,允许双方设备在进入本状态时,改变L0p capability,但一旦进入本状态后,这些设置就不再允许修改。
如果use_modified_TS1_TS2_Ordered_Set为1,需要注意:
(1)tx需要发送Modified TS1而不是正常的TS1;
(2)rx端必须检查是否收到Modified TS1(注意一开始进入这个状态的时候可能还是收到标准的TS1,需要检查的是收到连续的Modified TS1)
Dsp:
1.在 Configuration.Complete 状态期间,DSP 将发送 TS2 序列,其中的链路和通道编号与接收到的 TS1 中的内容。(针对usp,在Configuration.Complete 状态期间,USP 将发送 TS2 序列,其中的链路和通道编号与接收到的 TS2 中的内容)
2.如果该端口能够在当前分配的lane0上向下支持x1链路,并在LinkUp=1b时支持增加链路宽度恢复(upconfigure),那么允许dsp将置位TS2序列中的Upconfigure Capability/L0p比特设为1。-dsp/usp均满足
3.DSP 会记录接收到的 TS2 中的 N_FTS 域数值,其表示对端退出L0s状态必需的 FTS 数量,以备后续使用。-dsp/usp均满足
4.使用8b/10b编码时,必须在离开当前状态前完成通道间去偏移。-dsp/usp均满足
5.如果所有配置中的通道都收到了两个连续的 TS2,其中关闭加扰(Disable Scrambling)比特设置为 1'b1,那么停止对编码进行加扰(scrambling)。发送端发送TS2中Disable Scrambling比特为1的端口也必须停止加扰。在128b/130b 编码模式时,无法关闭加扰,因为添加的扰码对信号完整性的帮助不可或缺。-dsp/usp均满足
6.下个状态是Configuration.Idle状态如果满足如下条件:
当所有发送 TS2 的通道都接收到 8 个满足条件的 TS2 时,并且在接收到一个 TS2 后该通道已经发送至少 16 个 TS2 后,状态机将跳转至下一个状态:Configuration.Idle。这些条件指的是所有接收的 TS2 中都携带有匹配的链路编号和通道编号(非填充符号),匹配的速率标识符( rate identifier),以及匹配的链路 Upconfig Capability 比特。-dsp/usp均满足
7.如果设备支持 2.5 GT/s 以上的速率,那么它必须记录在任何已配置通道上的速率标识符,并覆盖所有此前记录的数值。“changed_speed_recovery” 用于在 Recvory 状态中追踪速率编号的变量,此时清除为 0。-dsp/usp均满足
8.Flit_Mode_Enabled为0的情况下,如果tx发出的TS2中的Link Upconfigure/ L0p Capability (Symbol 4 bit 6)域设置为 1b,并且接收到 8 个连续的 TS2 序列,TS2在该比特上的设置同样为1,变量upconfigure_capable设为1。否则,该变量清除为 0。-dsp/usp均满足
9.Flit_Mode_Enabled为1+ LinkUp=0b的情况下,如果tx发出的TS2中的Link Upconfigure/ L0p Capability (Symbol 4 bit 6)域设置为 1b,并且接收到 8 个连续的 TS2 序列,TS2在该比特上的设置同样为1,那么L0p_capable变量设为1,Device Status 3 Register中的Remote L0p Supported bit设为1;-dsp/usp均满足
10.任何没有配置为链路一部分的通道将与当前的 LTSSM 不再有关联,并且必须设置为下述各种状态中的一种:
(1)与新的 LTSSM 相关联;(针对usp,是指和新的crosslink LTSSM关联)
(2)转为电气空闲状态,这里涉及一种特殊的状态,即这些未被配置进链路的通道曾经在 L0 状态中被配置为链路的一部分,并且从那之后 LinkUp 状态位一直被设置为 1b。如果链路支持 upconfigure,那么它们需要仍然和原来的 LTSSM 相关联。这种情况下,协议建议这些通道仍然保持打开对接收端的终结(termination)特性,因为在 upconfigured 之后,它们又会重新变成链路的一份子。如果不保持终结特性打开,那么在LTSSM从Configuration.Complete 状态转为 Recovery.RcvrCfg 状态时,也需要再次打开(upconfigure_capable变量为1的情况下)。不过,如果这些通道并非曾经是链路的一部分,那么它们无法通过该过程成为链路的一部分。-dsp/usp均满足
对于可选配的 crosslink 特性,接收阻抗必须保持在这两者之间。-dsp/usp均满足
在 LTSSM 返回 Detect 状态后,这些通道会和LTSSM重新和其关联。-dsp/usp均满足
这些通道进入电器空闲状态之前无需发送 EIOS 序列,并且状态转变到Electrical Idle也并不一定需要发生在符号或者命令集的边界上。-dsp/usp均满足
11.
2ms超时后根据如下情况进行:
(1)如果当前状态是2.5GT/s或者5.0GT/s,那么下个状态时detect状态-dsp/usp均满足
(2)如果 idle_to_rlock_transitioned 变量小于 FFh,并且当前数据速率为 8GT/s,那么接下来转入 Configuration.Idle 状态。注意在这次状态跳变中,changed_speed_recovery 变量清除为 0。并且,变量 upconfigure_capable 也可能会被更新(非强制),当至少一个通道上收到8个连续的 TS2 序列,它们都携带有匹配的链路编号和通道编号(非填充符号),如果链路收发双方的 Upconfig Capability 比特都为 1,那么 upconfigure_capable 变量更新为 1b,否则清除为 0。-dsp/usp均满足
(3)任何没有配置为链路一部分的通道将与当前的 LTSSM 不再有关联,其他所需的条件与上述列出的非超时时的条件一致(也就是条件(2))。-dsp/usp均满足
(4)在超时后,如果未满足上一段的条件,则转入 Detect 状态。-dsp/usp均满足
**************************************************************************************************************
Config.idle
**************************************************************************************************************
Configuration.Idle
1.当使用8b/10b编码时,non-flit模式下,在所用配置的lane上发送s Idle data Symbols,在flit mode下发送IDLE flit。
2.linkup = 0 + link两端的component均支持64.0GT/s的速率,根据进入此状态之前发送的8个TS2或收到的连续的8个Modified TS2 Ordered Sets进行如下判断:
(1)
a:收到的8个连续的Modified TS2 Ordered Sets及所有configure的lane中发送的Modified TS2 Ordered Set中的No Equalization Needed bit (bit 1 of Symbol 5)为1
b:收到的8个连续的TS2 Ordered Sets及发送的TS2 Ordered Sets中的Enhanced Link Behavior Control field (bits 7:6 of Symbol 5)为No Equalization Needed value (10b)
满足a、b两种条件之一,那么The equalization_done_8GT_data_rate, equalization_done_16GT_data_rate,equalization_done_32GT_data_rate,equalization_done_64GT_data_rate variables 设为1,64.0 GT/s Status Register中的No Equalization Needed Received bit设为1;
(2)
a:收到的8个连续的Modified TS2 Ordered Sets及所有configure的lane中发送的Modified TS2 Ordered Set中的Bypass to Highest NRZ Rate位 (bit 0 of Symbol 5)为1
b:收到的8个连续的TS2 Ordered Sets及发送的TS2 Ordered Sets中的Enhanced Link Behavior Control field (bits 7:6 of Symbol 5)为No Equalization Needed value (10b)或Equalization Bypass to Highest NRZ Rate值 (01b or 10b)
满足a、b条件之一,equalization_done_8GT_data_rate和equalization_done_16GT_data_rate variables设为1
(3)如果进入此状态是由于收到了8个连续且相同的Modified TS2 Ordered Sets,并且Linkup为0,
a:并且收到的8个连续的Modified TS2 Ordered Sets及所有configure的lane中发送的Modified TS2 Ordered Set中的Modified TS Usage field位 (bit 0 of Symbol 5)为010b (Alternate Protocols)
b:在所有配置的lane上发送和接收的Modified TS2 Ordered Sets中的Modified TS Information 1和Alternate Protocol Vendor ID fields相同
同时满足a和b条件,32.0 GT/s Status Register中的Modified TS Received bit设为1(具体的协商过程根据收到的8个连续的Modified TS2 Ordered Sets记录在Received Modified TS Data 1Register 和 Received Modified TS Data 2 Register)
3.linkup = 0 + link两端的component均支持32.0GT/s的速率,根据进入此状态之前发送的8个TS2或收到的连续的8个Modified TS2 Ordered Sets进行如下判断:
(1)
a:收到的8个连续的Modified TS2 Ordered Sets及所有configure的lane中发送的Modified TS2 Ordered Set中的No Equalization Needed bit (bit 1 of Symbol 5)为1
b:收到的8个连续的TS2 Ordered Sets及发送的TS2 Ordered Sets中的Enhanced Link Behavior Control field (bits 7:6 of Symbol 5)为No Equalization Needed value (10b)
满足a、b两种条件之一,那么The equalization_done_8GT_data_rate, equalization_done_16GT_data_rate, equalization_done_32GT_data_rate variables设为1,32.0 GT/s Status Register中的No Equalization Needed Received bit设为1;
(2)
a:收到的8个连续的Modified TS2 Ordered Sets及所有configure的lane中发送的Modified TS2 Ordered Set中的Bypass to Highest NRZ Rate位 (bit 0 of Symbol 5)为1
b:收到的8个连续的TS2 Ordered Sets及发送的TS2 Ordered Sets中的Enhanced Link Behavior Control field (bits 7:6 of Symbol 5)为No Equalization Needed value 或Equalization Bypass to Highest NRZ Rate值 (01b or 10b)
满足a、b条件之一,equalization_done_8GT_data_rate和equalization_done_16GT_data_rate variables设为1
(3)如果进入此状态是由于收到了8个连续且相同的Modified TS2 Ordered Sets,并且Linkup为0,
a:并且收到的8个连续的Modified TS2 Ordered Sets及所有configure的lane中发送的Modified TS2 Ordered Set中的Modified TS Usage field位 (bit 0 of Symbol 5)为010b (Alternate Protocols)
b:在所有配置的lane上发送和接收的Modified TS2 Ordered Sets中的Modified TS Information 1和Alternate Protocol Vendor ID fields相同
同时满足a和b条件,32.0 GT/s Status Register中的Modified TS Received bit设为1(具体的协商过程根据收到的8个连续的Modified TS2 Ordered Sets记录在Received Modified TS Data 1Register 和 Received Modified TS Data 2 Register)
4.当在Non-flit模式下使用128b/130b编码时,
(1)当前数据速率时8.0GT/s时,tx在所有配置的lane上发送SDS ordered set来开启data stream,随后发送idle data symbol在所有配置的lane上。在lane0上第一个发送的idle data symbol就是data stream的第一个symbol
(2)当前速率时16.0GT/s时,在所有配置的lane上发送SDS ordered set来开启data stream之后tx立刻发送control skp ordered set。在lane0上第一个发送的idle data symbol就是data stream的第一个symbol。
5.rx在non-flit模式下等待idle data,在flit模式下等待IDLE flit。
6.Linkup为1;
7.当在non-flit模式下使用8b/10b编码的时候,那么在全部已配置通道上接收到 8 个连续的idle data,并且在收到一个空闲符号后已经发送了 16 个idle data symbol,进入 L0 状态。注意,如果自从最后一次从Recovery状态或configuration状态进入L0时软件写了Link control寄存器中的retrain link比特,那么dsp必须将link status中的link bandwidth management status设为1;当状态转变为L0时,use_modified_TS1_TS2_Ordered_Set设为0。
8.当在non-flit模式下采用 128b/130b 编码方式,那么在全部已配置通道上接收到 8 个连续idle data symbol,并且在收到一个idle data symbol后已经发送了 16 个idle data symbol,并且不是在 Configuration.Complete 状态超时后下进入的本状态,那么跳转至 L0 状态(所谓idle data其实就是数值零经过加扰和编码之后的数值)。注意,在rx的data blocks中必须收到idle data symbol;在data stream开始处理之前lane之前的de-skew必须完成;如果自从最后一次从Recovery状态或configuration状态进入L0时软件写了Link control寄存器中的retrain link比特,那么dsp必须将link status中的link bandwidth management status设为1;当状态转变为L0时,idle_to_rlock_transitioned设为0。
9.在flit 模式下,如果收到了两个连续的IDLE flit,并且在收到一个IDLE flit之后发送了最少要求的数目的idle flit,并且进入当前状态不是从configuration.complete状态超时导致的,那么随后进入L0。(注意这里指的最少要求的数目的idle flit针对8b/10b或者128b/130b来说是4个,针对1b/1b编码是8个)。需要注意的是在data stream开始处理之前lane之前的de-skew必须完成;如果自从最后一次从Recovery状态或configuration状态进入L0时软件写了Link control寄存器中的retrain link比特,那么dsp必须将link status中的link bandwidth management status设为1;当状态转变为L0时,idle_to_rlock_transitioned设为0。
10.
未满足上述条件,2ms 超时后:
如果变量 “idle_to_rlock_transitioned” 小于FFh,那么下一个跳转状态是 Recovery(Recovery.Rcvrlock)。跳转后:
(a)8.0 GT/s 时,变量 idle_to_rlock_transitioned 自增 1。
(b)2.5 或者 5.0 GT/s 时,变量 idle_to_rlock_transitioned 设置为 FFh。
注意:该变量记录了因为配置过程没有起作用,从而导致状态机从 Configuration.Idle 状态跳转到 Recovery 状态的次数。这可能是因为均衡设置不合适,或者当前选择的速率无法正常工作导致的,Recovery 状态内会采取措施尝试解决这些问题。该变量限制了从本状态跳转至 Recovery 状态的尝试次数,从而避免了永久的无限循环。如果链路在 256 次尝试后(变量计数至 FFh)仍然没法正常工作,那么跳转回 Detect 状态重新开始,并希望这次能有更好的结果。
否则,即 idle_to_rlock_transitioned 为 FFh 时,跳转至 Detect 状态。