pcie receiver error

  • 8b/10b下包括:
    • 8b/10 decode Errors
    • Non-Flit Mode Framing相关的错误
    • Symbol Lock丢失
    • Elasticity Buffer Overflow/Underflow
    • Lane-to-Lane de-skew丢失

Receiver Error

发生Receiver Error的行为

  • Receiver Error需要跟port绑定
  • Receiver Error是一种可纠正的错误,会发送ERR_COR Message给RC

8b/10b编解码时会触发Receiver Error的行为

  • 下面是会触发Receiver Error的行为,也就是错误的行为,而不是协议规定的正确的行为,错误的行为基本就是正确的行为取反
  • Non-Flit模式,接受到的symbol不在8b/10b编码表中,或者接受到的symbol在8b/10b编码表中,但是running disparity跟编码表中的不一致,即8b/10b解码错误,且LTSSM需要处于特定的状态,在Flit模式,可以通过FEC逻辑纠正
    • 8b/10b Decode Error,只会在Configuration,Disable(可选)和Hot Reset(可选)状态是触发Receiver Error
  • 如果检测下面这些规则,不符合就是Receiver Error,但是可以选择不检查
    • STP和END或者STP和EDB之间的symbol小于18个symbols,gen1/2 TLP的最小长度为18个Symbols(在STP和END或者STP或者EDB之间)
    • 大于x1的链路,当准备从Logical Idle状态过渡到传输TLP时,STP Symbol没有在lane0上
      • 重点在于从logical idle到传第一个TLP的STP Symbol
    • 大于x1的链路,当准备从logical idle状态过渡到传输TLP是,SDP Symbol没有在lane0上
      • 重点在于从logical idle到传第一个DLLP的SDP Symbol
    • 一个Symbol Time(Symbol Timed的解释)之内出现了2个或更多个STP Symbol
      • STP在多lane的link上不能同时出现在多条lane上
    • 一个Symbol Time之内出现了2个或者更多个SDP Symbol
    • 如果链路宽度大于x4,STP或者SDP Symbol不在4*N(N为正整数)上,例如,x8的链路,STP和SDP不再lane 0 和 lane 4
    • 对于xN的链路,END或者EDB在K(K不等于N-1)上且Lane K+1不是STP或者SDP Symbol时且lanes K+1到lane N-1不为PAD
      • 如果TLP不再lane N-1上结束,则lane K+1dao lane N-1必须用PAD填充,eg. x8的link,如果END或者EDB在lane 3,则lane 4到lane 7必须用PAD填充
        link Error

128b/130b编解码时会触发Receiver Error的行为

  • 接收机处理数据流时检测到了Framing Error且LTSSM在特定的状态时TODO会触发Receiver Error

128b/130b编解码,non-flit模式出现Framing Error的行为

128b/130b non-flit触发Framing Error的行为
触发条件 Framing Error行为
处理Symbol时 期望是一个Faming Token,但实际上跟Framing Token定义不一致为Framing Error – 推荐记录到lane error status寄存器中
收到STP Token后
  • 接收机根据收到的TLP计算Frame CRC和Frame Parity,如果计算出来的和接收到的Frame CRC或者Frame Parity不一致,则是Framing Error,STP Token出现错误不会认为是TLP的一部分,不应该报告给数据链路层
  • 接收机可以检查TLP Length字段是否为0,如果检查且为0,则是Framing Error
  • 收到STP Token之后,接收机可以检查TLP Length字段是否为2,3,4,如果检查且为2,3,4,则是Framing Error (TLP最短为5个DW)
  • 收到STP Token子后,接受可以检查TLP Length字段是否在1152到1535(包括1535)之间,如果检查且TLP Length字段在1152到1535之间,则是Framing Error
  • 收到STP Token之后,不支持协议服用的port可以检查TLP Length字段是否大于1535,如果检查且TLP Length字段大于1535,则是Framing Error
  • 收到STP Token之后,接收机可以检查一个Symbol Time内是否收到了超过1个STP Token,如果检查且一个Symbol Time收到不止1个STP Token,则是Framing Error
收到EDB Token之后
  • 接收机检查EDB Token中的所有Symbol,如果某个Symbol不符合EDB Token的定义,则是Framing Error
  • 后面紧着跟TLP是Framing Error
收到EDS Token之后 在链路上,数据块的最后四个symbol收到EDS Token之后,在下一个Block开始时,如果不是SKPOS,EIOS或者EIEOS,则是Framing Error – EDS Token出现在最后,其它lane没有发送idle data的机会。
收到SDP Token之后 接收机可以检查一个symbol time之内是否收到了超过1个SDP Token,如果检查且一个Symbol Time之内收到的SDP Token大于1,则是Framing Error
收到IDL Token之后,强烈推荐记录到Lane Error Status寄存器中
  • 对于X2的链路,接收机允许检查lane 1上的Symbol,如果lane 0上收到了IDL Token(或者IDL),lane 1上收到的不是IDL,则是Framing Error – IDL Token为8’h00,跟IDL是一样的
  • 对于x4的链路,接收机允许检查lane1-3上的Symbol,如果lane 0上收到了IDL Token(也是IDL),lane 1-3上收到的不是IDL,则是Framing Error
  • 对于x8或者x16的链路,下一个要处理的symbol要跟收到IDL Token后的下一个DW(4个symbol对齐),比如,x16的链路,lane 4收到了IDL Token,下一个Token的起始位置为这个Symbol Time的lane 8,如果IDL Token出现在x8链路的lane 4,则下一个Token的起点在下一个Symbol Time的lane 0。强烈推荐接收机检查收到IDL Token后到下一个Token之间的数据。如果检查且IDL Token和下一个Token之间的Symbol不是IDL,则是Framing Error
在处于数据流时,接收机必须检查数据块类型
  • 任意一条lane上接收到有序集块后跟着SDSOS是Framing Error – 强烈推荐记录到Lane Error Status寄存器中
  • 接收到未定义的数据块类型(如sync header为11b或者00b)是Framing Error
  • 任意一条lane上接受到有序集块,但是前一个Block没有收到EDS Token是Framing Error
    比如收到了SKPOS但是前面没有EDS Token是Framing Error – 所以需要发送完TLP后才可以插入SKPOS
  • 在数据流中,SKPOS后面跟着跟着其它有序集块(包括SKPOS)是Framing Error
  • 任意一条lane上收到Data Block,但是前面一个Block包含EDS Token是Framing Error – 发生时推荐将错误记录到Lane Error Status寄存器中
  • 接收机允许检查不用lane是否有不同的Ordered Sets,如果检查且不同lane上的Ordered Sets不一样,为Framing Error – 如lane 0收到SKPOS,lane 1收到EIOS,是一个Framing Error

128b/130b编解码,flit模式出现Framing Error的行为

128b/130b flit触发Framing Error的行为
触发条件 Framing Error行为
处理数据流时
  • 任意一条lane上收到了SDSOS,如果SDSOS后面紧跟着的不是SKPOS而是数据块,则是Framing Error
  • 接收到的块是未定义的块类型(如Sync header为11b或者00b)为Framing Error – 强烈发生该错误,记录到Lane Error Status寄存器中
处理数据流时,针对L0p过程中不需要退出或者进入EI状态的lane – 发生错误时强烈建议记录到Lane Error Status中
  • 任意一条lane在不是计划的block边界收到OS是Framing Error – Flit长度固定,所以block边界不是随意
  • 在固定block边界没有收到EIEOS,SKPOS和EIOS中的任意一个是Framing Error
  • 接收机允许不同lane上是否出现不同的Ordered Sets,如果检查且不同lane上收到的Ordered Set不同,为Framing Error,但是在通过L0p改变链路宽度时允许不同的lane上出现不同的Ordered Sets
    如果lane 0收到SKPOS,lane 1收到EIOS,此时不是通过L0p改变链路宽度,为Framing Error

1b/1b编解码时会触发Receiver Error的行为

1b/1b编解码,触发Framing Error的行为

  • 在处理数据流中结束的Ordered Set或者数据流中的Ordered Set
1b/1b 触发Framing Error的行为
触发条件 Framing Error行为
在每条active lane,第一个对其的8byte中,只有4个或者更少的byte跟SKP,EIOS或者EIEOS相匹配是Framing Error
从第一个8bytes中推断是SKPOS
guest
2 评论
内联反馈
查看所有评论
znn

求receiver error总结