关于FPGA的开发,大致可以分为算法和接口两类,其中接口又可以分为高速和低速两类,像UART、I2C、SPI、SDRAM、HDMI、LVDS等等,都被归为低速接口类别,最高线速率不过几百Mbps,使用FPGA的普通IO即可实现数据收发。
而高速接口是指基于serdes设计的一些接口,线速率一般大于1Gbps,比如万兆网、PCIE、SRIO等协议所有的接口。xilinx的GTP、GTX、GTH等都属于这类接口,有专用的参考时钟引脚、数据收发引脚。
xilinx针对高速接口提供了很多IP,最基础的就是GTX等IP,其余IP均是在其基础之上进行封装的,因此熟悉GTX等基础IP才是学习的重点,其余上层封装的IP都比较简单。
我也学习了一段时间的高速接口内容,目前使用过GTX实现8B10B,64B66B数据收发、aurora 8B10B和aurora 64B66B,SRIO数据收发、万兆以太网UDP协议栈的搭建。整个过程感觉最重要的就是对GTX的熟悉,后续的SRIO和万兆网只需要熟悉协议,在看官方IP手册即可。
关于高速收发器相关内容打算从最基础的GTX开始讲解,再看官方提供的aurora 8B10B和aurora 64B66B就会特别简单。SRIO目前还只是初步使用,暂时不会出相关讲解。万兆网之前使用10G PCSPMA IP搭建的UDP协议栈,但是后面想直接使用GTX搭建万兆网的PHY层、MAC层以及IP层的ARP、ICMP、UDP协议,将难度提升到最大,充分掌握GTX的开发。
既然要完成上述内容,就必须熟悉GTX相关内容,因此下面会通过大约十多篇文章讲解GTX的原理及常用设置,重点需要关注共享逻辑、内部时钟结构、时钟纠正、接收数据对齐等内容。
1、GTX基础知识
FPGA高速收发器的来源:了解高速收发器是串行差分总线,为什么不是并行总线?
详解GTX时钟及共享部分(高速收发器一):了解GTX共用资源及高速收发器参考时钟的设置。
如何理解GTX发送通道的用户接口?(高速收发器二):概述发送通道内部模块的功能,对发送通道内部时钟以及数据传输位宽做详细讲解,需要知道如何根据线速率计算txusrclk频率,进而确定用户接口时钟频率。以及并串转换的相关时钟内部是如何设置的,这与内部为啥使用FIFO同步数据也有一定关系。关于8B10B编码、加重、gearbox等内容会单独在后续章节详细讲解。
如何理解GTX接收通道相关模块?(高速收发器三):概述GTX接收通道相关模块,需要重点理解逗号对齐、buffer缓冲数据、时钟纠正等原理,另外通道绑定、CDR等内容在后文详细讲解,本文就没有过多赘述。
深入解析GTX收发器的时钟架构与数据位宽关系(高速收发器四):结合前三篇内容,对GTX内部时钟结构和内部数据传输位宽进行对应讲解,便于通过线速率和内部数据位宽,计算内部时钟频率及用户接口时钟频率。
8B10B编码(高速收发器五):本文讲述8B10B编码原理,详细讲解了RD的使用,FPGA实现8B10B编码、解码很简单,编码可以通过查找表实现,解码需要通过移位寄存器将输入的数据暂存,检测移位寄存器中的数据是否是指定的K码,从检测到的K码位置开始对后续的编码进行解码。由于K码的编码结果是唯一的,因此不会识别错误。
简要讲解高速信号的眼图_加重_均衡(高速收发器六):本文讲述发送端使用加重、接收端使用均衡的原因(信道对各个频段信号的衰减程度是不一样的,类似低通滤波器,对传输的高频分量衰减的比较大),通过B站一些示波器厂家的讲解熟悉高速接口使用这些手段的原因。
如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!
如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!