高速串行通信解惑说明
什么是逗号检测?
逗号检测,就是gt在发送数据的时候,一直在发送。这个时候使用一个标识符将数据隔开,用来对齐数据。(类似人说明的停顿或者写文章中的标点符号)逗号的两个作用,一个是将数据包隔开,另外一个作用用于对齐。接收端接收从检测到逗号码开始,从而能正确解析到完整的一包数据。
GT收发器内部结构
每个GT bank都有四个CPLL是一个QPLL
每个bank有两个参考时钟
普通的IO时钟是不能给GT的,GT的时钟和其他bank的时钟是物理隔断的,所以不能从普通的时钟IO路由时钟给GT的。
QPLL & CPLL
Cpll用于低速,QPLL用于高速
数据传输
SOF_ D0 _D1_ D2 D3_D4_D5_D6
或者
XX_XX_SOF_D0 D1 _D2 _D3
Phy层进行数据对齐和掩码处理
- 可以不使用buffer,自己手动设计对齐电路;
- 推荐使用buffer,来实现对齐电路
COMMAN逗号
接收串行数据,什么时候开始进行串并转换,起始点什么时候开始?接收机不知道,这个时候逗号码就是这个作用。接收器在串行数据中搜索逗号码进行的寻找。找到逗号码后,开始进行串并转换。
逗号搜索标准,可以任意字节的逗号对齐,可以2byte或者4byte
Commobine plus/minus commas(double-length comma)这个是进行双逗号检测,4byte的标识码中有两个k28.5的逗号字节,这个需要特别注意,如果你这个勾选了,但是你代码中没有两个k28.5在一起,你的接收端是收不到数据的,这个一定要注意。
关于GT中的rxslide的作用是用于手动对齐的功能,类似serdes的selectio的bitslip的窗口滑动,手动对齐。我们一般不用这个,直接使用K码自动对齐,不使用手动对齐。
RXBYTEREALIGN拉高标识着数据已经完成对齐,否则标识没有对齐
Trim Value是用于设置接收端电平的判别门限的
Clock corrections时钟纠正
发送端发送数据给接收端,接收端的恢复的时钟和发送端真正嵌入数据的时钟不可能是完全一摸一样的,还是有细微差别的,随着时间的累计,这个误差会有累计,随着时间积累,误差越来越大,所以每一个数据包用一个标识码,或者同步码,或者前导码,或者K码,进行一个包的开始,作为时钟纠正的基准,重新的开始进行接收,这样在误差累计采偏之前又重新进行计算,这样保证了数据的正确性。这个和uart串口通信很像,波特率设置以及串口一帧不能太长也是这个原因,因为有误差累计。
gt的例化有两种方式
1.直接例化多个通道
2.例化x1的通道,然后将公共部分抽出来,然后使用generate来实现x1,x2,x3,x4个通道
关于内部数据位宽,可以选择20或者40,选择20需要的内部时钟频率会高一些,使用40,内部时钟会低一些,时钟频率低一些,会更加稳定。
GT常见的帧格式
1.发送端和接收端之间如果长时间不通信,就会失锁,接收机需要利用同步码进行重新对齐
2.通信空闲的时候惯性思维如果给0,那么EMI问题就比较严重,因为这个时候频谱尖峰比较严重,造成电磁辐射比较大,这个
时候发送伪随机码LFSR,这样接近高斯白噪声,频谱比较均衡,EMI问题就好一些。