news 2026/8/28 13:09:12

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA Xilinx 7系列高速收发器GTP通信

说明:
FPGA:A7系列,例如:xc7a35tfgg484;
FPGA开发板通过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.Implementation

5.调试结果


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,因此可以计算出TXUSRCLK=200MHZ,TXUSRCLK2=TXUSRCLK/2即为100MHZ;
DRP/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(对应用户数据为 16'hbc)最为常见, 所以本次实验将 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 环回正确。

以上内容属于个人学习时的记录分享,旨在梳理思路,若有不当或错误,期待各位前辈能给予指导!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 13:06:47

编码面试怎么高效准备:3个月软工面试备战指南

编码面试怎么高效准备:3个月软工面试备战指南 【免费下载链接】tech-interview-handbook Curated coding interview preparation materials for busy software engineers 项目地址: https://gitcode.com/GitHub_Trending/te/tech-interview-handbook 晚上11点…

作者头像 李华
网站建设 2026/8/28 13:06:15

Apalis i.MX8X + Torizon Linux:容器化嵌入式开发实战指南

拿到 Apalis i.MX8X 模块的时候,我其实没抱太大期望,毕竟嵌入式 Linux 的开发流程,大家心里都有数——板子到手、配交叉编译环境、编内核、做根文件系统、再折腾启动加载,一轮下来小半个月没了。但这次不一样,厂商直接…

作者头像 李华
网站建设 2026/8/28 13:02:25

Kotlin 笔记

简介 Kotlin 是一种现代化的静态类型编程语言,具有以下优势: 与java互操作性强:Kotin 可以与现有的 Java 代码无缝地互操作,允许开发者在现有的项目中逐步采用 Kotin,而不需要重写整个项目。这使得 Kotlin 成为 Android 应用开发的理想选择。 简洁易读:Kotin 的语法简洁并…

作者头像 李华
网站建设 2026/8/28 13:02:12

3 步用深度学习做材料性能预测:Python 算法库实操指南

3 步用深度学习做材料性能预测:Python 算法库实操指南 【免费下载链接】Python All Algorithms implemented in Python 项目地址: https://gitcode.com/GitHub_Trending/pyt/Python 实验室里验证一种新材料,往往要几个月。如果你手上有成分、结构…

作者头像 李华
网站建设 2026/8/28 13:01:47

C++面试核心:内存管理、虚函数与对象模型深度解析

1. 从面试官视角看C基础题的价值最近帮团队面试了几个C方向的候选人,发现一个挺有意思的现象:很多朋友简历上项目经验写得天花乱坠,各种分布式、高并发、性能优化,结果一上来问几个最基础的C问题,比如“指针和引用的区…

作者头像 李华
网站建设 2026/8/28 12:59:07

C++模板编程:从函数模板到类模板,掌握泛型编程核心机制

1. 项目概述:从“重复造轮子”到“一劳永逸”的代码哲学 干了这么多年开发,最怕看到的代码是什么?不是复杂的算法,也不是深奥的设计模式,而是那些长得几乎一模一样、只是数据类型不同的函数和类。比如,你需…

作者头像 李华