pcie de-skew

目录
    本文上次更新于 414 天前,其内容可能已经过时,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

    De-Skew

    什么是skew

    • skew是偏移,通常说的skew指的是不同lane之间的数据不是对齐的。比如gen1下lane0和lane1都在发送TS1,但是不同lane上的COM字符并不是出现在同一个时刻。
    • 只有链路宽度大于x1时,才可能出现skew

    Skew的来源

    • 按照数据流向,skew的来源分成三个,分别是发送端产生的skew,实际走线中产生的skew以及接收端产生的skew。

    发送端的skew

    • 不同lane上phy发出的数据可能并不是严格对齐的
    • 协议规定了单个发射机任意两条lane之间输出数据最大的skew,单位为ns
      最大值(ns) 2.5GT/s 5.0GT/s 8.0GT/s 16.0GT/s 32.0GT/s 64.0GT/s
      LTX-SKEW 2.5 2.0 1.5 1.25 1.25 1.25

    实际走线中的skew

    • 跟具体主板设计制造有关

    接收端的skew

    • phy收到数据后,可能由于某种原因也会增加skew
    • 协议规定了单个接收机任意两条lane之间输入数据最大的skew,单位为ns
      最大值(ns) 2.5GT/s 5.0GT/s 8.0GT/s 16.0GT/s 32.0GT/s 64.0GT/s
      LRX-SKEW 20 8 6 5 5 5

    怎么De-Skew

    • de-skew的目的
      • 为了补偿不同lane上出现的skew。在经过de-skew后,相当于所有lane上的数据都是对齐的,这样在多lane的link上,就可以根据lane上的数据正确获取TLP或者DLP的内容。 如果没有经过de-skew,lane上的数据可能没有对齐,这样根据收到的数据组成TLP时,就会出现问题

    de-skew方法

    8b/10b编码下的de-skew

    • 用COM字符来de-skew,根据不同lane上收到COM的时间就知道skew为多少,然后针对每条lane可以增加一点delay,让不同lane上的数据对齐
    • 可以采用下面一个或者多个OS中的COM字符:
      • TS1OS或者TS2OS中的COM字符
      • EIEOS中的COM字符
      • FTS序列后第一个SKPOS中的COM字符
      • 非SRIS模式,TS间隔中收到SKPOS的COM字符

    128b/130b编码下的de-skew

    • 128b/130b编码中,没有COM字符,只能根据其它OS来做de-skew,同样的原理,根据不同lane上收到OS的时间来确定skew有多大。
    • 根据收到下面的一个或者多个来de-skew:
      • 收到SDSOS
      • 退出L0s时收到的EIEOS
      • 退出L0s时,在收到FTSOS后,收到的第一个EIEOS
      • 工作在8.0GT/s,接收到的SKPOS
      • 工作在16.0GT/s或更高时,FTS后的收到第一个的SKPOS
      • 工作在16.0GT/s或更高时,收到的SKPOS,但是下面两种情况除外
        • 退出TS时收到的SKPOS,应该就是对方发完TS后又发了一个SKPOS,此时的SKPOS不能做de-skew,因为后面会有SDSOS
        • 被EDS分割开的两个SKPOS

    1b/1b编码下的de-skew

    • 根据收到下面的一个或者多个来de-skew:
      • 收到的SDSOS
      • 收到的EIEOS
      • 收到的Control SKPOS

    什么时候de-skew

    Configuration状态做de-skew

    • 8b/10b编码时,在离开Configuration.Complete时,de-skew必须完成
    • 128b/130b,non-Flit模式,Configuration.Idle状态跳转到L0状态,开始处理数据流之前必须完成de-skew
    • Flit模式,Configuration.Idle跳到L0状态,开始处理数据流之前必须完成de-skew
    • Configuration状态

    Recovery状态做de-skew

    • 8b/10b编码时,离开Recovery.RcvrCfg前必须完成de-skew
    • 128b/130b,non-Flit模式,Recovery.Idle状态跳转到L0状态,开始处理数据流之前必须完成de-skew
    • Flit模式,Recovery.Idle跳到L0状态,开始处理数据流之前必须完成de-skew

    L0s状态做de-skew

    • 8b/10b或者128b/130b编码时,离开Rx_L0s.FTS前必须完成de-skew

    L0p状态做de-skew

    • 速度在8.0GT/s已经更高时,在当前激活的lane上以及将要激活的lane上(这些lane到8个连续的TS2和SDDOS)使用SKPOS必须完成lane-to-lane de-skew

    De-Skew失败了会怎样

    • 8b/10b编码下,lane-to-lane de-skew丢失会造成Link Errors
    • 8b/10b编码下,lane-to-lane de-skew丢失会触发receiver error(可选)
    • 128b/130b编码下,lane-to-lane de-skew丢失会造成Link Errors
    • 128b/130b编码下,lane-to-lane de-skew丢失会触发receiver error(可选)
    • 1b/1b编码,lane-to-lane de-skew丢失会造成Link Errors
    • 1b/1b编码下,lane-to-lane de-skew丢失会触发receiver error(可选)
    • lane-to-lane de-skew丢失会导致LTSSM进入Recovery状态
    如果在这个过程中遇到了其它问题,欢迎在评论区留言,如果你已解决,也欢迎把具体的解决方法留在评论区,以供后来者参考
    ×

    感谢您的支持,请扫码打赏

    微信打赏 支付宝打赏
    guest
    0 评论
    内联反馈
    查看所有评论