跳到内容
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
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状态