|

PCIe – LTSSM Polling

1. Polling 状态

  • 目的 : 实现 bit lock (位锁定),Symbol lock (符合锁定) 和 Lane polarity (lane 极性反转)
  • 存在的子状态 : Polling.ActivePolling.Compliance 和 Polling.Configuration
  • 状态跳转图片和文字如有冲突,以图片为准,图片更新更加频繁

2. Polling.Active

2.1 Polling.Active时的行为

  • 发射机在Detect状态检测到Receiver的所有lane上发射TS1 Ordered Set, 并且TS1中的Lane number(Symbol 1)和Link number(Symbol 0)都设为 PAD
    • 在此状态,必须设置好 TS1 中的 Symbol 4 (速度指示标识)为port支持的所有速度(这个速度是在2.5GT/s-32.0GT/s,如果支持64.0GT/s,不允许在此状态声明),包括不准备用的
    • port不允许在此状态声明高于32.0GT/s速度
    • 在从 ei 退出后,发射机必须等到 TX 共模模式稳定后,才可以发送 TS1 Ordered Sets
      • 进入该状态 192ns 之内,发射机必须用 Transmit Margin field ( Link Control 2 寄存器的 bit[9:7] )中的默认电压发射 patterns, 直到进入 Polling.Compliance 或者 Recovery.Rcvrlock 状态

2.2 Polling.Active状态跳转

  • Polling.Active可以实现的跳转
    • Polling.Active -> Polling.Configuration
    • Polling.Active -> Polling.Compliance
    • Polling.Active -> Detet
      Polling.Active状态跳转

2.2.1 Polling.Active -> Polling.Configuration

Polling.Active跳转到Polling.Configuration条件
条件 跳转原因
条件1 发送完1024个TS1后,所有在Detect状态检测到接收机的Lane收到8个连续的TS(或者TS的反,如本应该收到4a,但实际收到的是b5)
收到的TS需要满足下面其一:
   a. 如果收到的是TS1,则link number和lane number都是PAD,且Compliance Receive比特为0
   b. 如果收到的是TS1,则link number和lane number都是PAD, 且Loopback位为1b
   c. 如果收到的是TS2,则link number和lane number都是PAD
条件2 同时满足下面两个条件:
a. 24ms超时后,在Detect状态检测到接受的任意一条lane收到8个连续的TS(或者TS的反),收到1个TS后最少需要发送1024个TS1,收到的TS需要满足下面其一:
   i. 如果收到的是TS1,则link number和lane number都是PAD,且Compliance Receive比特为0
   ii. 如果收到的是TS1,则link number和lane number都是PAD, 且Loopback位为1b
   iii. 如果收到的是TS2,则link number和lane number都是PAD
b. 进入Polling.Active状态以来,至少一组预定义的lane(PCIe1-1中这组lane为在Detect检测到接收机的所有lane),这些lane必须是要在Detect状态检测到过接收机,至少退出过EI一次在Detect状态检测到
note : 能收到 TS 的 lane 一定是退出了 EI 状态。 但是退出了 EI, 不一定能收到 TS, 收到的 TS 也不一定对

2.2.2 Polling.Active -> Polling.Compliance

  • Q : 条件2中这里协议写的是not all lane, 这里的not all not是指所有lane呢还是任意一条lane?
    • A : 这里可能却决于设计的具体实现。但是需要注意
        1. 这里的not all lane 是加了限定 predetermined set of Lanes,也就是在Detect状态检测到接收机的这些lane。
        1. 如果是任意一条lane的话,进入Polling.Configuration的优先级要大于进入Polling.Compliance,比如在Detect状态检测到了4条lane,有一条退出EI,有三条没有退出EI,然后退出EI的lane收到的符合要求的TS,那也会进入Polling.Configuratioin,如果退出EI的这条lane没有收到符合要求的TS呢,那就得看设计得具体实现,是需要所有lane都没退出EI还是只需要任意一条就行了。
Polling.Active跳转到Polling.Compliance条件
条件 跳转原因
条件1 Link Control 2 寄存器中的Enter Compliance比特为1,如果该bit在进入Polling.Active之前就设置了,则直接进入,不需要发送TS1
条件2 24ms超时后,从进入Polling.Active以来,不是所有预定义的lane都检测到对端退出了EI (所有lane都没有退出EI)
条件3 24ms超时后,在Detect状态检测到接收机的任意一条lane收到8个连续的TS1(或者它的反),且TS1中的link number,lane number都是PAD,Compliance Receive位为1,Loopback位为0

2.2.3 Polling.Active -> detect

Polling.Active跳转到Detect条件
条件 跳转原因
条件1 不满足进入Polling.Configuraion和Polling.Compliance的条件,如24ms超时后对应的bit没有置1且收到的TS不符合要求

3. Polling.Configuration

3.1 Polling.Configuration时的行为

  • 接收机必须处理极性反转 (如果有必要的话)
  • 进入此状态是,Transmit Margin field (Link Control 2寄存器的 bit[9:7]) 必须为 000b
  • 发射机 Polling.Compliance sequence 设置更新 (待续)
  • 在 Detect 状态检测到 Receiver 的所有 lane 发送 TS2
    • link number和lane number为PAD
    • 在此状态就是表明支持的所有速度(这个速度必须是在2.5GT/s-32.0GT/s之间,如果支持64.0GT/s,则不允许声明),即使是不打算用的,即设置 Data Rate Identifier (Symbol 4)
    • 在此状态不允许申明支持高于32.0GT/s的速度

3.2 Polling.Configuration状态跳转

  • Polling.Configuration可以实现的跳转
    • Polling.Configuration -> Configuration
    • Polling.Configuration -> Detect
      Polling.Configuration状态跳转

3.2.1 Polling.Configuration -> Configuration

Polling.Configuraion跳转到Configuraion条件
条件 跳转原因
条件1 在Detect状态检测到接收机的任意一条lane收到8个连续的TS2(link number和lane number都是PAD)在接收到1个TS2后必须发送16个TS2

3.2.2 Polling.Configuration -> Detect

Polling.Configuraion跳转到Detect条件
条件 跳转原因
条件1 48ms 超时

4. Polling.Compliance

4.1 Polling.Compliance时的行为

  • 进入时会采样 Transmit Margin field (Link Control 2 寄存器的 bit[9:7]); 发射引脚在进入此状态 192ns 之类仍然有效; 并且 ltssm 在此子状态时一直有效
  • polling.compliance主要需要确定三件事
    • 确定发射机发送pattern的速度
    • 确定发射机发送pattern的De-emphasis/preset
    • 发送compliance pattern的类型,是compliance pattern还是modified compliance pattern或者jitter compliance pattern等

4.1.1 polling.compliance确定速度和De-emphasis/preset

  • 选择发送compliance pattern的速度和de-emphasis/preset,算法如下:
速度和de-emphasis/preset选择
原因 速度选择 de-emphasis/preset
port只支持2.5GT/s 2.5GT/s -3.5dB
收到8个连续的TS1(Compliance Receiver为1,Loopback bit为0) 本端支持64.0GT/s,在polling.Active收到的TS1OS中Flit Mode Supported为1且supported Link Speeds为10111b(对端支持64.0GT/s) 64.0GT/s 收到的EQ TS1OS中的Transmitter Preset比特.如果没有收到EQ TS1OS或者Transmitter Preset是保留的,则发射机根据特定的行为选择一个支持的值
本端不支持64.0GT/s或者对端不支持64.0GT/s 由最高通用传输速度和本端发送TS1中的Data Rate Identifiers(symbol 4)决定 2.5GT/s和5.0GT/s根据收到的TS1中的Selectable De-emphasis bit(Symbol 4 bit 6)决定。8.0GT/s以及更高,根据收到的EQ TS1OS中的Transmitter Preset比特决定。如果没有收到EQ TS1OS或者Transmitter Preset是保留的,则发射机根据特定的行为选择一个支持的值
Link Control 2寄存器中的Enter Compliance比特为1 根据Link Control 2寄存器中的Target Link Speed字段决定 2.5GT/s和5.0GT/s,如果Link Control 2寄存器中的Compliance Preset/De-emphasis字段为0001b,select_deemphasis变为1(表明de-emphasis为-3.5dB)。8.0GT/s及以上,每条lane上select_preset变量设置为Link Control 2寄存器的Compliance Preset/De-emphasis(bit[15:12]),其值必须是有效的编码
没有检测到退出EI进入Polling.Compliance(如通过tx端接50欧姆等效负载进入) 根据进入polling.compliacne的次数来选择速度 根据进入polling.compliacne的次数来选择发射机的De-emphasis或者preset值
  • 没有检测到退出EI进入polling.compliance,速度和de-emphasis/preset的选择如下
速度和de-emphasis/preset选择
Setting Nos(进入Polling.compliance的次数) 速率 发射机De-emphasis或preset
#1 2.5GT/s -3.5dB
#2,#3 5.0GT/s -3.5dB(#2),-6.0dB(#3)
#4到#14 8.0GT/s preset编码从0000b到1010b,按顺序增加
#15到#25 16.0GT/s preset编码从0000b到1010b,按顺序依次增加
#26到#34 16.0GT/s preset编码为0100b
#35到#45 32.0GT/s preset编码从0000b到1010b,按顺序依次增加
#46到#54 32.0GT/s preset编码为0100b
#55到65 64.0GT/s preset编码为0000b到1010b
#66到84 64.0GT/s preset值为0000b
  • Setting Nos设置规则
    • 在Fundamental Reset(warm reset/cold reset)后,第一次进入Polling.Compliance时设置序列号为#1
    • 如果port支持16.0GT/s或者更高速度,在Polling.Configuration必须设置序列号为#1
    • 后面每进一次polling.Compliance,次数加1,依次是#2,#3
    • note : 在被动测试时为啥还会跟Polling.Configuration有关呢?因为被动测试时要让待测设备推测出Polling.Compliance时,仪器端必须得发送1ms 100MHz的信号。而根据协议规定,当发送pattern的速度为2.5GT/s时,并不需要进入EI在去把速度降到2.5GT/s,只有在Polling.Compliance状态的速度高于2.5GT/s才会先进入EI,把速度降到2.5GT/s,并且处于EI的时间必须大于1ms但是不高于2ms。所以当在Polling.Compliance时,本身速度就是2.5GT/s,不需要进入EI,当仪器发送1ms 100MHz的信号时,设备检测到任意一条lane退出EI,进入Polling.Active,这个时间很快,然后由于仪器还在发送信号,此时设备在Polling.Active状态就是认为有些lane退出过EI,不满足从没退出过EI,

4.1.2 Polling.Compliance确定compliance pattern类型

  • 根据下列算法选择
compliance pattern类型确定
原因 compliance pattern类型
收到8个连续的TS1OS进入Polling.Compliance(Compliance Receive bit为1,Loopback bit为0) Modified Compliance Pattern
Link Control 2寄存器中的Enter Compliance为1 Link Control 2寄存器中的Enter Modified Compliance为1 Modified Compliance Pattern
Link Control 2寄存器中的Enter Modified Compliance为0 Compliance Pattern
没有检测到退出EI而进入Polling.Compliance 根据进入Polling.Compliance的次数决定发送的compliance pattern类型
  • 没有检测到退出EI而进入Polling.Compliance
compliance pattern类型确定
进入Polling.Compliance的次数 发送的compliance pattern类型
#1到#25,#35到#45,#55到#65 所有lane上发送compliance pattern
#26,#46,#66 所有lane上发送Jitter Measurement Pattern
#27,#47,#67 lane 0/8发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#28,#48,#68 lane 1/9发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#29,#49,#69 lane 2/10发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#30,#50,#70 lane 3/11发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#31,#51,#71 lane 4/12发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#32,#52,#72 lane 5/13发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#33,#53,#73 lane 6/14发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#34,#54,#74 lane 7/15发送Jitter Measurement Pattern,其余所有lane发送Compliance Pattern
#75 所有lane发送High Swing Toggle Pattern
#76 lane 0/8发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#77 lane 1/9发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#78 lane 2/10发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#79 lane 3/11发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#80 lane 4/12发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#81 lane 5/13发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#82 lane 6/14发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#83 lane 7/15发送High Swing Toggle Pattern,其余所有lane发送Compliance Pattern
#84 所有lane上发送Low Swing Toggle Pattern

4.2 Polling.Compliance状态跳转

  • Polling.Compliance可以实现的跳转
    • Polling.Compliance -> Polling.Active
    • Polling.Compliance -> Detect
      Polling.Compliance状态跳转

4.2.1 Polling.Compliance -> Polling.Active

Polling.Compliance跳转到Polling.Active条件
条件 跳转原因
条件1 如果进入Polling.Compliance时,Enter Compliance字段为1(Enter Modified Compliance为0或1),满足以下其一:
   1. Enter Compliance变为0
   2. Upstream Port的任何一条lane收到了EIOS(收到后会把Enter Compliance置0)
条件2 如果进入Polling.Compliance是因为link control 2寄存器中的enter compliance为1且enter modified compliance为0,满足其一:
   1. link control 2寄存器中的enter compliance从1变到0
   2. USP的任意一条lane收到了EIOS(收到后会把Enter Compliance置0)
条件3 如果是由于没有退出EI而进入Polling.Compliance, 在Detect状态检测到接受的任意一条lane检测到对方退出EI

4.2.2 Polling.Compliance -> Detect

Polling.Compliance跳转到Detect条件
条件 跳转原因
条件1 Link Control 2寄存器的Enter Compliance字段为0,且直接让ltssm进入Detect(如通过配置寄存器)

5. 例子

5.1 正常训练

正常训练

类似文章

guest
50 评论
内联反馈
查看所有评论
Thomas

进入polling.compliance的24ms超时,该时间从哪里算做起点?polling.active?

Thomas

@重新开始 谢谢解答

Thomas

@重新开始 继续请问,“从Polling.Active开始算,就是24ms超时后”的超时是说无法正常进入polling.configuration引起的超时吗?

Alen

@重新开始 谢谢作者~强的一批 🐂🍺

Thomas

@重新开始 谢谢作者,是要所有lane都接50欧姆电阻?还是TX的一条lane接50欧姆电阻能让所有lane进pollin.compliance呀

Thomas

@重新开始 感谢花费宝贵的时间解答,我实际尝试的是没有接电阻的lane,不会发compliance码型。

Thomas

@重新开始 作者您好,继续请教两个问题。

  1. 想从Polling.compliance退出Polling状态,可以直接退出吗?还是必须先经过Electrical Idle再Polling.active再退出?
  2. 协议提到Polling.compliance进入Polling.active的条件是Enter Compliance bit从1置0;或者检测到至少1个EIOS。那如果是以后者的方法进入Polling.active,那么Enter Compliance bit还会从1置0吗?

期待您的回复,谢谢!

Thomas

@重新开始 感谢感谢!还是您理解得透彻。
也就是说因为Enter compliance bit置1进入的,想要退出必须要置0。反之Enter compliance bit本身就为0,也就不需要置0。但是DSP为什么不会因为检测到EIOS而将Enter compliance bit置0没太看懂,您方便再讲讲吗?或者说DSP会因为检测到EIOS退出Polling.compliance吗?

Thomas

@重新开始 感谢感谢!太强了!

Thomas

@重新开始 大师都谦虚。
还有个问题,就是我之前提到的,如果某条lane不接50欧姆电阻,就不会发出compliance pattern,那就是某条lane,进入了polling.compliance,而不是整个device。是这样理解吗?

Thomas

@Thomas 不对,应该是Device进入polling.compliance,lane发不出pattern是因为终端开路,默认无设备连接。

Thomas

@重新开始 好的,谢谢~

Thomas

@Thomas If the Port entered Polling.Compliance due to detecting eight consecutive TS1 Ordered Sets i… 阅读更多 »

Thomas

@重新开始 感谢作者这么晚还回复了很多。 但是SPEC的前半部分又提到,检测到8个连续的特定TS1OS会发送Compliance Pattern。所以是Modified Compliance Patt… 阅读更多 »

Thomas

@重新开始 谢谢!那比如说要做电气测试,就是除了TS1和Link Control 2 Register以外的方式(即超时)进入Polling.compliance,这时就会发用于测试的Compliance Pattern。可以这么理解吗?

Thomas

@重新开始 感谢解惑,您是目前网上唯一把Polling.compliance说出来,说得清楚的,大部分都是一笔带过。回头看我提的几个问题,都比较简单,没仔细看SPEC,哈哈。总之感谢您抽出时间解答!

Thomas

@重新开始 作者您好,我又来了 1.SPEC提到的Note是不是放在条件a下较为合适?即不是真实的设备,导致无法退出EI而进入Polling.Compliance。还是说编辑习惯放在一段的最后写Not… 阅读更多 »

Thomas

@重新开始 懂了,感谢解答~
重要的是Detect状态检测到的Lane,不是退出到Detect状态。

Thomas

@重新开始 作者您好,再请教一个问题 b. Next state is Polling.Active if an exit of Electrical Idle is detected at the … 阅读更多 »

Thomas

@重新开始 好的谢谢,我理解错了,以为检测到EIOS和Electrical Idle是一个意思。前者是数据包,后者是状态。
结合之前我问的问题就是:

  1. 24ms超时后+不是所有的Lane都退出EI,会进入Poliing.Compliance。
  2. 进入Polling.Compliance后,检测到任意一条Lane退出EI,将会退出Polling.Compliance,进入Polling.Active。
  3. 进入Polling.Compliance后,有任意一条Lane检测到EIOS,会退出Polling.Compliance,进入Polling.Active。

我的理解正确吗?

Thomas

@重新开始 谢谢大佬!全面又深入

aochen

没明白由于no lane exit EI而进入polling.compliance子状态的目的是?原先收不到TS1的lane在该状态岂不是继续收不到,难道说这种场景只是为了继续延长any lane EI exit的时间?但是又没说在该状态如果继续检测不到any lane EI exit该怎么办?

aochen

明白了,进入compliance的前提是对端要接测试设备,谢谢博主细致的回答

aochen

明白,软件drive进入

tex

在 Polling.Active -> Polling.Configuration 中有下面条件“任意一条lane收到8个连续的TS(或者TS的反),收到1个TS后最少需要发送1024个TS1,收到的TS需要满足下面其一”,请问作者,这句话怎么理解。

tex

(直接在下面的楼层继续回复一直提示让我验证,重新开一楼)
感谢作者的讲解,明白您所描述的过程了。顺便提一下这个学习平台做的太好了!

最后由tex编辑于4 月 之前
wanderingxs

想请问一下作者一个比较奇怪的问题。如果链路正常,进入polling.active状态后,再要进入polling.configuration状态是要检测到8个连续的TS1。要检测到TS1是需要实现块对齐吧?发送方需要在发TS1的同时,必须时不时地发送EIEOS来确保接收方能够获得块对齐?
这和我遇到的一个问题也有关。我在使用xilinx的pcie phy IP核的时候,x8链路每次测试时总是有部分lane达不到块对齐。我对pcie协议的实现做了简化,要求所有lane均能收到8个连续的TS1之后才能从polling.active跳转到polling.configuration,否则超时后跳回detect;我没有实现polling.compliance状态。但是实际上板测试的时候,ltssm总是不能正常跳转到polling.configuration.
看了您文章和评论区对polling.compliance状态的解释,您觉得这个问题和信号质量有关吗?

wanderingxs

@重新开始 谢谢博主的回复!ヾ(≧∇≦*)ゝ
我之前的回复遗漏了一个要点:pcie1.0或2.0速率下链路是可以正常建立的;但是pcie3.0或4.0下由于部分lane总是不能收到连续的8个TS1(更确切地说,部分lane什么数据都收不到),导致我之前实现的简化版ltssm一直卡在polling.active状态。我打算按照您的建议,根据协议完善下ltssm,看看会不会有改善。

但是在 Polling.Configuration 需要所有的 lane 都收到符合要求的 TS2OS

这里捉个虫,按照协议polling.configuration -> Configuration的状态跳转,也只需要detect状态下有检测到接收方的任意一个lane,检测到8个连续的TS2即可。
此外我注意到,xilinx PCIe PHY IP核中,对于使用128b/130b编码的数据流,RX端的数据通路是:SIPO -> 128b/130b decoder -> Block Detect Align -> PCIe RX buffer -> RX Interface -> PCIe MAC。在polling.active状态下,对端TX必须发送1024个以上的TS1OS,本端RX CDR才有可能正常恢复出时钟和数据,然后经过上述数据通路,将收到的TS1OS送到MAC,是这样吗?

wanderingxs

@重新开始 谢谢博主的回复!ヾ(≧∇≦*)ゝ
我之前的回复遗漏了一个要点:pcie1.0或2.0速率下链路是可以正常建立的;但是pcie3.0或4.0下由于部分lane总是不能收到连续的8个TS1(更确切地说,部分lane什么数据都收不到),导致我之前实现的简化版ltssm一直卡在polling.active状态。我打算按照您的建议,根据协议完善下ltssm,看看会不会有改善。
但是在 Polling.Configuration 需要所有的 lane 都收到符合要求的 TS2OS
这里捉个虫,按照协议polling.configuration -> Configuration的状态跳转,也只需要detect状态下有检测到接收方的任意一个lane,检测到8个连续的TS2即可。
此外我注意到,xilinx PCIe PHY IP核中,对于使用128b/130b编码的数据流,RX端的数据通路是:SIPO -> 128b/130b decoder -> Block Detect Align -> PCIe RX buffer -> RX Interface -> PCIe MAC。在polling.active状态下,对端TX必须发送1024个以上的TS1OS,本端RX CDR才有可能正常恢复出时钟和数据,然后经过上述数据通路,将收到的TS1OS送到MAC,是这样吗?

wanderingxs

@重新开始 明白了,谢谢您的耐心解答😊