打印

V6 GTX 在PCIE应用中的复位问题和解决方法

[复制链接]
1232|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GoldSunMonkey|  楼主 | 2013-9-2 22:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
GoldSunMonkey|  楼主 | 2013-9-2 22:59 | 只看该作者
V6 GTX 在PCIE应用中的复位问题和解决方法
背景
         在V6 PCIE GEN1 X4应用中,客户发现PCIE概率性地不能建链。在检查PCIE状态机,发现状态机停留在CONFIG.POLLING状态下。
检查GTX的状态,每路都没有8B10B错。但是有一条LANE 的输出数据比其他LANE快了16字节。

分析
         从现象看,可以确定这个问题和SI无关。整个问题的关键应该在于各个通道间的SKEW。
         可能引入SKEW的方面有:
PCB 线路;
各路GTX起始工作时间,特别是CDR锁定时间不同;
RX BUFFER指针偏移;
GTX参数设置有错。
和客户分析看,PCB的SKEW是严格控制的,而且它不会导致16字节那么大的SKEW。而每路RXBUFFER 在初始化后是有复位的。但这都不能解决问题。
对于2, 客户说起每路GTX的RXELECIDLE并不是同时变0的。这个表示有GTX跳出OOB状态并不和其他GTX同时。这应该是导致所有问题的关键。
检查代码,我们发现MAX_SKEW参数设置的是7。这个值的单位是RXUSRCLK周期。对于V6,内部固定2字节的位宽。对于8B10B应用,是20bit。而对于PCIE而言,其TS1/TS2的长度是16字节。MAX_SKEW = 7应该太大,在通道绑定时有机会在RXBUFFER里看到2个CBS。那通道绑定模块会错开16字节对齐。这和看到的现象是符合的。

解决
         解决这个问题,需要从复位着手。
         既然看到各路的GTX不同时出OOB状态,那可以等到所有的RXELEICLDE都变低后,把所有的GTX都复位一下。然后在RXRESETDONE都拉高后,复位一下RXBUFFER。这样可以让各路GTX的SKEW最小。这是解决问题的一个方面;
         同时,需要把MAX_SKEW改成4。这样可以使通道绑定模块的搜索范围变小,以避免错开对齐的情况发生。



结果
         在按上述说明修改完代码后,我们发现这个问题再也没有出现。整个工程工作正常。

使用特权

评论回复
板凳
chenkui456| | 2013-9-3 17:17 | 只看该作者
猴哥,你太厉害了~ 佩服~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:                     2014, 追逐梦想

264

主题

17215

帖子

523

粉丝