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

Configuration.Lanenum.Accept

如果use_modified_TS1_TS2_Ordered_Set1,需要注意:

1tx需要发送Modified TS1而不是正常的TS1

2rx端必须检查是否收到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 TS1128b/130b 编码时至少等待 34 TS1,但任何情况下不要等待超过 1ms-dsp/usp均满足

注意几点:

1)针对Reversed Lane来说,其lane num的变化要求是非常严格的,比如原来lane num0,那么收到的TS1中的Lane num就为n-1;原来为n-1lane,那么收到的TS1中的lane num0-dsp/usp均满足

2)注意,如果use_modified_TS1_TS2_Ordered_Set变量设为1,并且Alternate Protocol Negotiation执行了,那么转换到Configuration.Complete状态必须要延迟10us,直到dsp收到usprsp(这里有问题,什么是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 StatusLink Autonomous Bandwidth Status域需要根据如下规则更新:

(1)由于链路可靠性导致的dsp发起的bandwidth的改变Link Bandwidth Management Status设为1

2bandwidth的改变不是由于dsp,并且收到的连续两个TS1中的Autonomous Change(Symbol 4 bit 6)为0,Link Bandwidth Management Status设为1

3)其他情况下Link Autonomous Bandwidth Status域设为1

Configuration.Complete

Flit_Mode_Enabled为0 + LinkUp为1,允许双方设备在进入本状态时,改变它们的支持速率列表和链路宽度恢复能力(upconfigure capability),但一旦进入本状态后,这些设置就不再允许修改。

Flit_Mode_Enabled为1 + LinkUp为0,允许双方设备在进入本状态时,改变L0p capability,但一旦进入本状态后,这些设置就不再允许修改。

如果use_modified_TS1_TS2_Ordered_Set1,需要注意:

1tx需要发送Modified TS1而不是正常的TS1

2rx端必须检查是否收到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均满足

你可能感兴趣的:(PCIE,fpga开发)