ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

FPGA Xilinx 7系列高速收发器GTP通信

FPGA Xilinx 7系列高速收发器GTP通信 说明FPGA:A7系列例如xc7a35tfgg484FPGA开发板通过SFPA(光口)与SFPB(光口)通过光纤相连进行GTP的数据还回通信运行环境Vivado2018.3。所用IP核7 Series FPGAs Transceivers Wizard(3.6)因为是A7系列芯片GT资源为GTP高速串行收发器最大线速率为6.6Gb/s。SFP模块SFPA和SFPB实验原理连接示意图目录1.IP核配置前先熟悉硬件原理图2. IP核配置3.生成IP Example 工程并做相应修改4.Implementation5.调试结果1.IP核配置前先熟悉硬件原理图红线框内是SFPB光口模块所对应的GTP通道绿线框内是SFPA光口模块所对应的GTP通道黄线框内是板子GT所需要的125M的参考差分时钟板载参考差分时钟注意后面在IP核勾选界面需要依据这个选择。接下来我们回到最重要的环节vivado软件GTP配置2. IP核配置page1:注意这里GT Type直接就是默认的GTP因为我们是A7系列所含的GT资源就是GTP这里软件会帮我们默认选择如果是更高端比如K7或者V7系列等芯片即为GTX/GTH这里选择include shared logic in the example design具体两个选择有什么区别自行搜索page2高速收发器支持多种标准协议可以选择一个标准协议这样后续的选项均已配置好了然后根据自己的需求改动。此处选择点对点传输的Aurora 8b10b single lane 4byte。这里我们用的光模块传输是单路的所以选择 single lane, 数据接口为 4byte, 就是 32 位。此处设置较低速率 4Gbps 用于功能验证参考时钟为 125M。注意参考时钟为收发器输入时钟频率必须与开发板上为 GTP 提供时钟的晶振一致。GTP 的 2 个参考输入时钟都能连到 PLL0 和 PLL1所以在 ip 核中可以任意选择用 PLL0还是 PLL1。因为本次实验的收发速率是一致的所以 RX 和 TX 可以共用一个锁相环否则必须用两个锁相环。本次开发板的外部参考时钟是接在 GTPREFCLK1故在 ip 核中将参考时钟设为 GTPREFCLK1。本次开发板用了 2 个 SFP 接口这 2 个接口分别连接到 GTP_X0Y0 和 GTP_X0Y1。这里我们也可以发现有四个channal刚好组成一个quad对应原理图所展示的资源page3因为在上一页选的是 Aurora 8b10b single lane 4byte 协议所以这里的外部数据位宽为 32bit此处的数据接口为FPGA内部用户逻辑与IP核的接口。本次实验是做 Aurora 8b10b 环回实验所以在编码方式这栏中选择 8B/10B 编码内部数据位宽也是默认20bits这里提到一点在前面我们设置的线速率为4Gbps这里内部数据位宽为20bits因此可以计算出TXUSRCLK200MHZ,TXUSRCLK2TXUSRCLK/2即为100MHZDRP/System Clock Frequency 是动态重配置或系统工作时钟通过 DPR 可以让设计者根据所选线速率和定义的协议实时调整收发器参数。该时钟可以通过锁相环来配置本次实验将该时钟设为 50M。此外数据不管是从时钟 TSUSRCLK 到 XCLK 还是从时钟 XCLK 到 RSUSRCLK都经过了时钟域的转换所以 TX 端和 RX 端都需要一个缓存区缓存下因此把 ip 核中的 Enable TX Buffer 和 Enable RX Buffer 这 2 个选项给勾上这里你可能会有疑惑想知道为什么这样需要你进一步了解GTP内部结构。因为本次实验的发送端和接收端使用的是同一个晶振产生的差分时钟按照 2 个时钟的使用规则RSUSRCLK 这里采用 TXOUTCLK 来驱动否则不满足时序要求。至于为什么需要勾选buffer请看下图xilinx官方指导手册介绍page4这里要引入 comma 码的概念。8B/10B 编码表中有 12 个控制字符以大写字母 K 开头用于一些控制功能。K 码中的 comma 码用于接收端时钟校准和数据对齐K28.5对应用户数据为 16hbc最为常见 所以本次实验将 comma 码设为 K28.5逗号码。串行收发器接收到一个一个的1bit数据就像汉字一样接收到一个一个的汉字。我们需要逗号把汉字隔开才能明白句子的意思而数据也是一样page5这一页说的都是 PCIE、SATA 和 PRBS 相关的内容保持默认即可。page6该选项卡用来选择时钟校正和通道绑定等参数通道绑定一般用于多通道通信时所以本次实验采用时钟校正的模式来保证数据的稳定接收。Sequence默认配置值其实就是K27.7所对应的原码具体二者有什么区别这里就不再赘述了。page7此时大家看下页面所显示的参数与大家所设的是否一样一样的话就点击 OK 选项。3.生成IP Example 工程并做相应修改用户可以把该 IP 看作是 FPGA 与光口交流信息的桥梁当然这个“桥梁”的实现代码不需要用户自己写Xilinx 官方已帮大家写好并封装成了一 个 IP 供用户调用用户只需要根据实际应用配置该 IP 即可。step1配置IP核后点击Open IP Example Design生成IP核的Example工程。step2打开Example工程包含以下模块。数据产生模块和接收数据模块以及时钟处理等模块。ILA用于抓取信号检验环回是否成功。●注1.GT_FRAME_GEN为数据获取模块在此模块中将本地文件gt_rom_init_tx.dat中的数据读取FPGA内部进行数据的传输。数据如下2.数据中BC为K码K28.5当K码出现时charisk信号为1(具体的16bit数据和charisk怎么从如下数据中提取出来的详细看GT_FRAME_GEN中代码)。如下在GT_FRAME_GEN模块中可以看出读入的数据长度为512。代码中需要修改的地方1.需要注意的是因为开发板在设计时将 tx_disable 信号接了个上拉电阻要想环回实验正常进行就必须要将 tx_disable 信号赋 0。2.原例程中 DRP 的输入时钟为差分时钟输入而我们的开发板只带载了一个 50M 时钟的单端晶振所以要将 DRP 的输入时钟改为单端时钟输入这里需要用到单端时钟输入原语以及BUFG。这里要将 IBUFDS 修改为 IBUF那 IBUF 原语又是在哪里呢4.Implementation下面我们看一下实际当中的布局布线是怎样的显而易见和我们配置IP核界面所约束的位置一致。5.调试结果rx 端代码中的gt0_error_count_i 信号一直为 0说明光纤接口 8b10b 环回正确。以上内容属于个人学习时的记录分享旨在梳理思路若有不当或错误期待各位前辈能给予指导
返回列表