赞
踩
Xilinx 7系列FPGA实现10G UDP网络通信的MAC层解决方案目前有两种,均为Xilinx官方推出的IP,一个是10G Ethernet Subsystem,另一个是10G Ethernet PCS/PMA;本设计重点介绍基于10G Ethernet Subsystem的10G UDP网络通信设计方案;本设计使用Xilinx系列FPGA基于10G Ethernet Subsystem的10G 实现10G UDP网络通信,以FPGA开发板作为远端网卡,PC电脑端作为远端连接对象,中间用10G 网卡为桥接,实现10G UDP网络通信的测试架构;
数据接收:
PC电脑端发起ping操作或者打开网络调试助手发送数据;数据经PC主板的PCIE卡槽给到10G网卡,网卡将数据通过光纤发送给FPGA开发板;FPGA开发板的SFP光口接收PC发来的数据,给到GT BANK,调用Xilinx官方的10G Ethernet Subsystem的10G IP核做物理层和链路层解析,并以AXI4-Stream数据流输出数据;AXI4-Stream接收数据流给接收数据缓冲FIFO,再给到10G UDP协议栈做以太网数据帧解析,去掉以太网帧头、协议层数据包头,提取有效数据经用户接口输出;接收用户接口将数据给到UDP用户数据测试模块,该模块可做接收数据回环转发或者主动发起数据给PC做测速,通过顶层参数选择具体功能,以数据回环工程为例,将接收数据送入缓冲FIFO;到这里,数据接收流程就结束了;
数据发送:
数据发送的发起者是UDP用户数据测试模块,如果使能了测速功能,则一致向用户发送接口发送数据累加数据包,间隔时间为1个时钟周期;如果使能了接收数据回环功能,则将接收到的数据送入回环FIFO中缓存,等待UDP协议栈读取;发送数据然后给到10G UDP协议栈做以太网数据帧组包,加上协议层数据包头、以太网帧头、有效数据然后输出;然后数据给到发送数据缓冲FIFO;再调用Xilinx官方的10G Ethernet Subsystem的10G IP核做发送数据的物理层和链路层编码,并以AXI4-Stream数据流输出数据;输出数据经FPGA开发板的SFP光口通过光纤连接10G网卡;10G网卡经PC主板的PCIE卡槽经数据发送给PC端;PC端再用网络调试助手接收数据或打开资源管理器查看网卡速率;到这里,数据发送流程就结束了;
本设计使用的FPGA包括Kintex7和Zynq7100,都属于Xilinx 7系列FPGA,共设计了8套工程源码,详情如下:
现对上述8套工程源码解释如下:
工程源码1:
开发板FPGA型号为Xilinx Kintex7-325T;使用1个10G Ethernet Subsystem IP核,输入输出接口为1路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP网卡;
工程源码2:
开发板FPGA型号为Xilinx Kintex7-325T;使用2个10G Ethernet Subsystem IP核,输入输出接口为2路SFP光口,功能是10G UDP网络通信;其中1个10G Ethernet Subsystem作为主IP,另外1个10G Ethernet Subsystem作为从IP;工程应用是FPGA的10G UDP多光口网卡或交换机;
工程源码3:
开发板FPGA型号为Xilinx Kintex7-325T;使用3个10G Ethernet Subsystem IP核,输入输出接口为3路SFP光口,功能是10G UDP网络通信;其中1个10G Ethernet Subsystem作为主IP,另外2个10G Ethernet Subsystem作为从IP;工程应用是FPGA的10G UDP多光口网卡或交换机;
工程源码4:
开发板FPGA型号为Xilinx Kintex7-325T;使用4个10G Ethernet Subsystem IP核,输入输出接口为4路SFP光口,功能是10G UDP网络通信;其中1个10G Ethernet Subsystem作为主IP,另外3个10G Ethernet Subsystem作为从IP;工程应用是FPGA的10G UDP多光口网卡或交换机;
工程源码5:
开发板FPGA型号为Xilinx Zynq7100;使用1个10G Ethernet Subsystem IP核,输入输出接口为1路SFP光口,功能是10G UDP网络通信;工程应用是FPGA的10G UDP网卡;
工程源码6:
开发板FPGA型号为Xilinx Zynq7100;使用2个10G Ethernet Subsystem IP核,输入输出接口为2路SFP光口,功能是10G UDP网络通信;其中1个10G Ethernet Subsystem作为主IP,另外1个10G Ethernet Subsystem作为从IP;工程应用是FPGA的10G UDP多光口网卡或交换机;
工程源码7:
开发板FPGA型号为Xilinx Zynq7100;使用3个10G Ethernet Subsystem IP核,输入输出接口为3路SFP光口,功能是10G UDP网络通信;其中1个10G Ethernet Subsystem作为主IP,另外2个10G Ethernet Subsystem作为从IP;工程应用是FPGA的10G UDP多光口网卡或交换机;
工程源码8:
开发板FPGA型号为Xilinx Zynq7100;使用4个10G Ethernet Subsystem IP核,输入输出接口为4路SFP光口,功能是10G UDP网络通信;其中1个10G Ethernet Subsystem作为主IP,另外3个10G Ethernet Subsystem作为从IP;工程应用是FPGA的10G UDP多光口网卡或交换机;
本博客详细描述了Xilinx系列FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看:直接点击前往
基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了8套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往
基于10G/25G Ethernet Subsystem的10G UDP网络通信适用于Xilinx KU系列FPGA,共推出了4套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往
基于10G Ethernet Subsystem的10G UDP网络通信适用于Xilinx KU系列FPGA,共推出了4套工程源码,与本博客设计架构一样,但使用的UDP协议栈支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往
基于10G Ethernet PCS/PMA的XGMII接口10G UDP网络通信适用于Xilinx 7系列FPGA,共推出了2套工程源码,与本博客设计架构一样,但使用的UDP协议栈不支持巨型帧,请参考我之前的博客,博客地址如下:
直接点击前往
本设计使用的工程详细设计方案框图如下:
测试用PC端电脑要求如下:
主板有PCIE卡槽,能插10G 网卡;
安装网络调试助手软件,软件已提供在资料包中;
我的10G 网卡插到主板如下:
测试用10G 网卡要求如下:
必须支持10G速率;
必须是SFP光口;
必须安装好网卡驱动,驱动找卖家要;
我的网卡驱动安装后如下:
FPGA开发板需要至少拥有1路SFP光口,且至少支持10G速率,此外还需要SFP光模块和光纤,用于连接10网卡,我的FPGA开发板与10G 网卡连接如下:
本设计的10G Ethernet Subsystem部分包括IP调用、复位逻辑等,以工程4为例,代码层面如下:
10G Ethernet Subsystem是Xilinx推出的具有10G速率的MAC,用户接口为AXI4-Stream,使用Xilinx GT高速接口作为物理层,官方数据手册为《PG157》,本博对10G Ethernet Subsystem的解析主要是对《PG157》的翻译和总结,详细细节读者还需自行阅读官方英文原版手册;
10G Ethernet Subsystem框架如下:
可以看到,10G Ethernet Subsystem内部封装了Xilinx的10 Gigabit Ethernet PCS/PMA和10 Gigabit Ethernet MAC两个IP,这两个IP分别对应物理层和MAC层,IP之间通过XGMII接口连接,用户接口被封装为AXI4-Stream,可通过AXI4-Lite接口配置IP,物理层对外接口为GT,其中1588时钟同步功能可在音视频传输中启用,适应性还是很好的;关于这些底层信息,需要专业的以太网协议知识,不建议非专业人事深究,开发者一般只需要能够使用该IP即可;
现对用户接口IP指示信号做特别说明:
用户发送接口AXI4-Stream多了一个tx_ifg_delay端口,它是用于设置发送间隔,一般都默认采用最小间隔,即将 tx_ifg_delay 置为 0 即可;
用户接收接口AXI4-Stream少了一个tready 信号,这代表接收端需要具备持续接收数据的能力,防止出现数据来不及接收而产生溢出;
pcspma_status[7:0]信号用于反应物理层运行情况,最低位为1表示物理层锁定,即运行正常;
sim_speed_up 端口只有在仿真时才需要用到,用于加快仿真速度,仿真时给1,上板编译时给0;
AXI4-Lite接口对IP和内部的MAC层和物理层就你行配置,主要是对复位顺序的配置和内部数据读写测试等;
10G Ethernet Subsystem通过调用IP方式使用,这里只对重点配置讲解,如下:
当AXI4-Stream数据位宽选择64 bit时,要求GT连接的外部晶振必须是156.25M;这点很重要,因为它对硬件有定性要求,可以选择SIL系列可编程的差分晶振,否则硬件设计兼容性很差;
10G Ethernet Subsystem通过调用IP方式使用,通过AXI4-Lite接口对IP和内部的MAC层和物理层就你行配置,主要是对复位顺序的配置和内部数据读写测试等,代码中提供了纯verilog的配置逻辑,如下:
多个10G Ethernet Subsystem 的主从搭配使用的应用场景是FPGA开发板充当多光口的网卡使用,即一个FPGA挂载多个光口,每一个光口相当于一个独立的网卡,有独立的IP地址和MAC地址,类似于交换机的样子;
多个10G Ethernet Subsystem 的主从搭配使用框架如下:
10G Ethernet Subsystem可单独使用,当单独使用时,一个10G Ethernet Subsystem单独占用一个GT高速接口资源,单独占用一对差分时钟资源;此时的IP配置如下:
10G Ethernet Subsystem也可多个级联主从搭配使用,主从搭配使用时,一个10G Ethernet Subsystem当做主IP,占用一个GT高速接口资源,单独占用一对差分时钟资源;其他10G Ethernet Subsystem当做从IP,占用一个GT高速接口资源,但不占用差分时钟资源,而是使用主IP提供的参考时钟;此时的从IP配置如下:
但需要注意的是,这种操作的前提是,你用到的GT资源都在同一个BANK内;
本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用户数据测试模块集成了接收数据回环和数据测速功能,通过VIO选择,源码架构如下:
功能选择如下:
VIO选择 0 ;使用接收数据回环功能;
VIO选择 1 ;使用发送数据数据测速;
接收数据回环功能:
将接收数据送入缓冲FIFO,并通知UDP协议栈将数据读出,即形成发送=接收的自回环功能;该功能的作用是配合网络调试助手进行数据收发测试、数据丢包测试、数据正确性测试等;
数据数据测速:
FPGA自动循环向UDP协议栈发送累加的数据,数据内容从0开始累加,即形成连续发送数据功能;该功能的作用是配合PC端测试网络极限速率,打开电脑端的资源管理器,查看网卡,即可看到通信速率;
每套工程均可修改FPGA开发板的IP地址、MAC地址、端口号等信息,同时也可以修改远程节点的IP地址、端口号等信息,单路10G Ethernet Subsystem架构的工程只有一组IP地址可供修改,相当于FPGA内部只做了1个网卡,多路10G Ethernet Subsystem主从架构的工程有多组IP地址可供修改,相当于FPGA内部只做了多个网卡;以工程4为例,有4组IP地址可供修改,相当于FPGA内部只做了4个网卡,代码如下:
8套工程的源码具有相似性,这里仅以工程4为例截图如下,其他工程与之类似:
这里只对工程的源码架构做解释,详细的模块功能和设计请参考前面对应的章节,也可以打开对应的模块源码对比理解笑话;
开发板FPGA型号:Xilinx–xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:1路SFP,10G线速率;
MAC方案:Xilinx 单路10G Ethernet Subsystem方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:2路SFP,10G线速率;
MAC方案:Xilinx 1路10G Ethernet Subsystem主+1路10G Ethernet Subsystem从方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:3路SFP,10G线速率;
MAC方案:Xilinx 1路10G Ethernet Subsystem主+2路10G Ethernet Subsystem从方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–xc7k325tffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:4路SFP,10G线速率;
MAC方案:Xilinx 1路10G Ethernet Subsystem主+3路10G Ethernet Subsystem从方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:1路SFP,10G线速率;
MAC方案:Xilinx 单路10G Ethernet Subsystem方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:2路SFP,10G线速率;
MAC方案:Xilinx 1路10G Ethernet Subsystem主+1路10G Ethernet Subsystem从方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:3路SFP,10G线速率;
MAC方案:Xilinx 1路10G Ethernet Subsystem主+2路10G Ethernet Subsystem从方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入输出:以太网帧,UDP网络数据;
接口:4路SFP,10G线速率;
MAC方案:Xilinx 1路10G Ethernet Subsystem主+3路10G Ethernet Subsystem从方案;
协议层方案:10G UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于10G Ethernet Subsystem的10G UDP网络通信的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
3:如果你的vivado版本高于本工程vivado版本,解决如下:
打开工程后会发现IP都被锁住了,如下:
此时需要升级IP,操作如下:
如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;
1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;
本实验需要如下设备:
FPGA开发板,可以使用你自己的,也可以使用本博主的;
SFP光模块,支持10G线速率;
光纤,支持10G线速率;
10G网卡;
带PCIE的电脑主机;
网络调试助手软件;
首先插上你的10G网卡;
然后安装网卡驱动;
然后修改网卡IP地址如下:
将你的电脑IP地址改为和代码里规定的IP一致,当然,代码里的IP是可以任意设置的,但代码里的IP修改后,电脑端的IP也要跟着改,我的设置如下:
下载bit;
打开电脑CMD,输入ping,测试UDP是否连通,如下:
单次ping还不够,直接上连续ping,如下:
确保工程代码中的UDP用户数据测试模块选择的是接收数据回环功能;
下载bit;
然后是用网络调试助手进行数据收发测试,如下:
既有手动收发测试,也有循环12小时的长时间收发测试,测试结果没有出现丢包的情况。。。
需要开启网卡属性里的巨型帧功能,具体操作如下:
确保工程代码中的UDP用户数据测试模块选择的是网络测速功能;
下载bit;
打开电脑资源管理器,查看10G网卡,测速如下:
在电脑上观察开发板以太网网口的发送速率,这个测速只代表可能的最高的速度,不代表电脑真实的不丢包速度,UDP 的点到点不丢包速度和电脑的网卡、CPU 速度、内存速度、操作系统都有关系。。。
福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。