PCIe时钟偏差补偿 (Clock Tolerance Compliance)

 

PCIe 时钟偏差出现的原因

为了减少EMI电磁辐射,芯片厂家往往会对时钟进行扩频(Spread Spectrum Clocking,SSC)。即便不进行SSC,受限于PLL工艺,时钟频率也很难做到与期望频率完全一致。这样一来,PCIe发送端与接收端存在时钟偏差,尤其是频率偏差。当收发端时钟存在偏差时,如果不对时钟偏差进行补偿,收发端比特速率不匹配势必会导致数据包接收出错。

PCIe 时钟偏差补偿

为了实现收发端间的有效数据包正确传输,PCIe采用插入SKIP有序集的方式来对时钟偏差进行补偿。发送端(Tx)周期性地在传输lane上发送SKIP有序集,接收端(Rx)接收SKIP有序集并存入其弹性缓存(elastic buffer)中。Rx通过这种删除/插入SKP的方式,来达到补偿时钟偏差的目的。

8b/10b

8b/10b编码时(Gen1/Gen2),Tx发送的SKIP有序集由4个符号组成,以COM符号开始,后面跟着3个SKP符号。若Tx速率快于Rx,Rx从SKIP有序集中删除一个SKP;若Tx速率慢于Rx,Rx从SKIP有序集中插入一个SKP。Rx接收的SKIP有序集为1*COM+(1~5)*SKP。Tx发送有序集的时间间隔为1180~1538符号。

128b/130b

128b/130编码时(Gen3/Gen4/Gen5),Tx发送的SKIP有序集由16个符号组成。Rx接收的SKIP有序集可以为8,12,16,20,24符号。Tx发送有序集的时间间隔为370~375符号。

跟8b/10b下的SKIP有序集相比,128b/130b时的有序集是16SKP+1SKP_END(or SKP_END_CTL) + 3*other symbol。SKP symbol值为0xaa@gen3, 0x99@gen4/gen5。SKIP_END symbol值为0xe1,SKP_END_CTL值为0x78。

Tx端发送SKIP有序集的原则:
1. 最快1180/370个符号周期、最慢1538/375个符号周期需发送一次SKIP有序集;
2. 多条lane上的SKIP有序集需同时发送,必要时可用PAD字符填充;
3. 发送SKIP有序集不能打乱正常包的发送(即需在包的边界进行插入),发送长包时可在长包发送完城后可集中一次发送多个SKIP有序集;
4. 发送逻辑闲时仍需发送SKIP有序集;
5. Low Power状态时SKIP interval timer需复位。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章