当前位置:   article > 正文

FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信,支持巨型帧,提供4套工程源码和技术支持_axi ethernet driver

axi ethernet driver


FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信,支持巨型帧,提供4套工程源码和技术支持

1、前言

Xilinx 系列FPGA实现10G UDP网络通信的MAC层解决方案目前有两种,均为Xilinx官方推出的IP,一个是10G Ethernet Subsystem,另一个是10G Ethernet PCS/PMA;本设计重点介绍基于10G Ethernet Subsystem的10G UDP网络通信设计方案;10G Ethernet Subsystem后来又发展出10G/25G Ethernet Subsystem,它与前者相比更加集成化,适用于KU级别的FPGA使用;本设计使用Xilinx KU系列FPGA基于10G/25G Ethernet Subsystem的10G 实现10G UDP网络通信,以FPGA开发板作为远端网卡,PC电脑端作为远端连接对象,中间用10G 网卡为桥接,实现10G UDP网络通信的测试架构;

数据接收:
PC电脑端发起ping操作或者打开网络调试助手发送数据;数据经PC主板的PCIE卡槽给到10G网卡,网卡将数据通过光纤发送给FPGA开发板;FPGA开发板的SFP光口接收PC发来的数据,给到GT BANK,调用Xilinx官方的10G/25G Ethernet Subsystem的10G IP核做物理层和链路层解析,并以AXI4-Stream数据流输出数据;AXI4-Stream接收数据流给接收数据缓冲FIFO,再给到10G UDP协议栈做以太网数据帧解析,去掉以太网帧头、协议层数据包头,提取有效数据经用户接口输出;接收用户接口将数据给到UDP用户数据测试模块,该模块可做接收数据回环转发或者主动发起数据给PC做测速,通过顶层参数选择具体功能,以数据回环工程为例,将接收数据送入缓冲FIFO;到这里,数据接收流程就结束了;

数据发送:
数据发送的发起者是UDP用户数据测试模块,如果使能了测速功能,则一致向用户发送接口发送包长为1472的数据累加数据包,间隔时间为1个时钟周期;如果使能了接收数据回环功能,则将接收到的数据送入回环FIFO中缓存,等待UDP协议栈读取;发送数据然后给到10G UDP协议栈做以太网数据帧组包,加上协议层数据包头、以太网帧头、有效数据然后输出;然后数据给到发送数据缓冲FIFO;再调用Xilinx官方的10G/25G Ethernet Subsystem的10G IP核做发送数据的物理层和链路层编码,并以AXI4-Stream数据流输出数据;输出数据经FPGA开发板的SFP光口通过光纤连接10G网卡;10G网卡经PC主板的PCIE卡槽经数据发送给PC端;PC端再用网络调试助手接收数据或打开资源管理器查看网卡速率;到这里,数据发送流程就结束了;

本设计使用Xilinx Kintex-UltraScale060 FPGA,共设计了4套工程源码,详情如下:
在这里插入图片描述
现对上述4套工程源码解释如下:

工程源码1:
开发板FPGA型号为Xilinx Kintex-UltraScale-060;使用10G/25G Ethernet Subsystem IP核,并使能1路GTH高速接口,输入输出接口为1路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP网卡;

工程源码2:
开发板FPGA型号为Xilinx Kintex-UltraScale-060;使用10G/25G Ethernet Subsystem IP核,并使能2路GTH高速接口,输入输出接口为2路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP多光口网卡或交换机;

工程源码3:
开发板FPGA型号为Xilinx Kintex-UltraScale-060;使用10G/25G Ethernet Subsystem IP核,并使能3路GTH高速接口,输入输出接口为3路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP多光口网卡或交换机;

工程源码4:
开发板FPGA型号为Xilinx Kintex-UltraScale-060;使用10G/25G Ethernet Subsystem IP核,并使能4路GTH高速接口,输入输出接口为4路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP多光口网卡或交换机;

本博客详细描述了Xilinx系列FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我这里已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看:
直接点击前往

基于10G Ethernet Subsystem的10G UDP网络通信,无巨型帧版本

基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了8套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

基于10G Ethernet Subsystem的10G UDP网络通信,支持巨型帧版本

基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了8套工程源码,与本博客设计架构一样,但使用的UDP协议栈支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

基于10G/25G Ethernet Subsystem的10G UDP网络通信,无巨型帧版本

基于10G/25G Ethernet Subsystem的10G UDP网络通信适用于Xilinx KU系列FPGA,共推出了4套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

基于10G Ethernet PCS/PMA的XGMII接口10G UDP网络通信,无巨型帧版本

基于10G Ethernet PCS/PMA的XGMII接口10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了2套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往

3、详细设计方案

设计框图

本设计使用的工程详细设计方案框图如下:
在这里插入图片描述

测试用PC端电脑

测试用PC端电脑要求如下:
主板有PCIE卡槽,能插10G 网卡;
安装网络调试助手软件,软件已提供在资料包中;
我的10G 网卡插到主板如下:
在这里插入图片描述

测试用10G 网卡

测试用10G 网卡要求如下:
必须支持10G速率;
必须是SFP光口;
必须安装好网卡驱动,驱动找卖家要;
我的网卡驱动安装后如下:
在这里插入图片描述

SFP光口

FPGA开发板需要至少拥有1路SFP光口,且至少支持10G速率,此外还需要SFP光模块和光纤,用于连接10网卡,我的FPGA开发板与10G 网卡连接如下:
在这里插入图片描述

10G/25G Ethernet Subsystem 详解

本设计的10G/25G Ethernet Subsystem部分主要为IP调用、IP复位配置等,以工程4为例,代码层面如下:
在这里插入图片描述
10G/25G Ethernet Subsystem是Xilinx推出的具有10G速率的MAC,用户接口为AXI4-Stream,使用Xilinx GT高速接口作为物理层,官方数据手册为《PG210》,本博对10G Ethernet Subsystem的解析主要是对《PG210》的翻译和总结,详细细节读者还需自行阅读官方英文原版手册;
10G/25G Ethernet Subsystem框架如下:
在这里插入图片描述
可以看到,10G/25G Ethernet Subsystem与我们之前使用的10G Ethernet Subsystem相机简单很多,但功能都是一样的,用户需要关心的只有两个,一个是无外部连接的SFP光口,另一个是与FPGA用户逻辑连接的用户接口;外部接口为SERDES,本应用为SFP光口,FPGA用户逻辑接口为AXI4-Stream;

10G/25G Ethernet Subsystem 使用

10G/25G Ethernet Subsystem通过调用IP方式使用,这里只对重点配置讲解,如下:
在这里插入图片描述
在这里插入图片描述
当AXI4-Stream数据位宽选择64 bit时,要求GT连接的外部晶振必须是156.25M;这点很重要,因为它对硬件有定性要求,可以选择SIL系列可编程的差分晶振,否则硬件设计兼容性很差;

10G/25G Ethernet Subsystem 配置

10G/25G Ethernet Subsystem通过调用IP方式使用,通过灵活接口对IP和内部的MAC层和物理层进行配置,相比于之前使用的0G Ethernet Subsystem需要AXI-Lite配置而言,10G/25G Ethernet Subsystem使用更为简单,不再需要配置逻辑,仅需进行同步复位即可;以工程4为例,代码层面如下:
在这里插入图片描述

10G/25G Ethernet Subsystem 的多核使用

一个10G/25G Ethernet Subsystem最多可挂载4个GT高速接口,且4个GT高速接口共用一对差分时钟,也就是10G/25G Ethernet Subsystem 的多核使用;相比于之前使用的0G Ethernet Subsystem需要级联和主从搭配,10G/25G Ethernet Subsystem将这些功能进行了集成和优化,使得用户不再需要去进行复杂的连线和例化;以工程4为例,一个10G/25G Ethernet Subsystem挂载了4个GT高速接口,配置如下:
在这里插入图片描述

自定义10G UDP协议栈

本UDP协议栈为自定义封装IP,具体性能如下:
协议栈性能表现如下:
1:最高速率10G;
2:支持巨型帧;
3:支持 UDP 接收校验和检验功能,暂不支持 UDP 发送校验和生成;
4:支持 IP 首部校验和的生成和校验,同时支持 ICMP 协议中的 PING 功能,可接收并响应同一个子网内部设备的 PING 请求;
5:可自动发起或响应同一个子网内设备的 ARP 请求,ARP 收发完全自适应。ARP 表可保存同一个子网内部256 个 IP 和 MAC 地址对;
6:支持 ARP 超时机制,可检测所需发送数据包的目的 IP 地址是否可达;
7:协议栈发送带宽利用率可达 93%,高发送带宽下,内部仲裁机制保证 PING 和 ARP 功能不受任何影响;
8:发送过程不会造成丢包;
9:用户接口为AXI4-Stream,数据位宽为64bit,为用户预留了开发板网卡IP地址、MAC地址和端口号等配置接口;

用户在使用时,无需关心底层协议,只需要配置好IP等参数,依据AXI4-Stream与用户接口对接即可使用,非常方便;IP调用也很简单,UI界面无需配置,调用后即可直接使用,如下:
在这里插入图片描述

UDP用户数据测试模块

UDP用户数据测试模块集成了接收数据回环和数据测速功能,通过VIO选择,源码架构如下:
在这里插入图片描述
功能选择如下:
VIO选择 0 ;使用接收数据回环功能;
VIO选择 1 ;使用发送数据数据测速;

接收数据回环功能:
将接收数据送入缓冲FIFO,并通知UDP协议栈将数据读出,即形成发送=接收的自回环功能;该功能的作用是配合网络调试助手进行数据收发测试、数据丢包测试、数据正确性测试等;

数据数据测速:
FPGA自动循环向UDP协议栈发送累加的数据,数据内容从0开始累加,即形成连续发送数据功能;该功能的作用是配合PC端测试网络极限速率,打开电脑端的资源管理器,查看网卡,即可看到通信速率;

IP地址修改

每套工程均可修改FPGA开发板的IP地址、MAC地址、端口号等信息,同时也可以修改远程节点的IP地址、端口号等信息,单路10G Ethernet Subsystem架构的工程只有一组IP地址可供修改,相当于FPGA内部只做了1个网卡,多路10G Ethernet Subsystem主从架构的工程有多组IP地址可供修改,相当于FPGA内部只做了多个网卡;以工程4为例,有4组IP地址可供修改,相当于FPGA内部只做了4个网卡,代码如下:
在这里插入图片描述

工程源码架构

8套工程的源码具有相似性,这里仅以工程4为例截图如下,其他工程与之类似:
在这里插入图片描述
这里只对工程的源码架构做解释,详细的模块功能和设计请参考前面对应的章节,也可以打开对应的模块源码对比理解笑话;

4、工程源码1详解:KU060版本,10G/25G Ethernet Subsystem单核应用

开发板FPGA型号:Xilinx–Kintex-UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:1路SFP,10G线速率;
MAC方案:Xilinx 10G/25G Ethernet Subsystem单核应用方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解:KU060版本,10G/25G Ethernet Subsystem双核应用

开发板FPGA型号:Xilinx–Kintex-UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:2路SFP,10G线速率;
MAC方案:Xilinx 10G/25G Ethernet Subsystem双核应用方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程源码3详解:KU060版本,10G/25G Ethernet Subsystem三核应用

开发板FPGA型号:Xilinx–Kintex-UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:3路SFP,10G线速率;
MAC方案:Xilinx 10G/25G Ethernet Subsystem三核应用方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程源码4详解:KU060版本,10G/25G Ethernet Subsystem四核应用

开发板FPGA型号:Xilinx–Kintex-UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:4路SFP,10G线速率;
MAC方案:Xilinx 10G/25G Ethernet Subsystem四核应用方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G/25G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

8、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

9、上板调试验证并演示

测试器材准备

本实验需要如下设备:
FPGA开发板,可以使用你自己的,也可以使用本博主的;
SFP光模块,支持10G线速率;
光纤,支持10G线速率;
10G网卡;
带PCIE的电脑主机;
网络调试助手软件;

PC端准备工作

首先插上你的10G网卡;
然后安装网卡驱动;
然后修改网卡IP地址如下:
将你的电脑IP地址改为和代码里规定的IP一致,当然,代码里的IP是可以任意设置的,但代码里的IP修改后,电脑端的IP也要跟着改,我的设置如下:
在这里插入图片描述

ping测试

下载bit;
打开电脑CMD,输入ping,测试UDP是否连通,如下:
在这里插入图片描述
单次ping还不够,直接上连续ping,如下:
在这里插入图片描述

数据收发测试

确保工程代码中的UDP用户数据测试模块选择的是接收数据回环功能;
下载bit;
然后是用网络调试助手进行数据收发测试,如下:
在这里插入图片描述
既有手动收发测试,也有循环12小时的长时间收发测试,测试结果没有出现丢包的情况。。。

网络速度测试

确保工程代码中的UDP用户数据测试模块选择的是网络测速功能;
下载bit;
打开电脑资源管理器,查看10G网卡,测速如下:
在这里插入图片描述
在电脑上观察开发板以太网网口的发送速率,这个测速只代表可能的最高的速度,不代表电脑真实的不丢包速度,UDP 的点到点不丢包速度和电脑的网卡、CPU 速度、内存速度、操作系统都有关系。。。

10、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/536187
推荐阅读
相关标签
  

闽ICP备14008679号