目录
FPGA实现 100G UDP 协议栈,纯verilog代码编写,基于Ultrascale+ 100G Ethernet Subsystem架构,提供4套工程源码和技术支持
FPGA实现100G UDP协议栈
1、前言
FPGA实现100G UDP方案简介
目前实现100G UDP 协议栈最困难的是物理层,可以使用专用网卡芯片实现100G bps的收发线速率,比如Intel的专用网卡芯片,但这种芯片已经固化,不利于定制化的项目应用,也可以使用FPGA的高速收发器为基础的逻辑方案,比如Xilinx Ultrascale+系列FPGA的100G Ethernet Subsystem IP核,基于GTY单Lane 25G bps线速率的特性实现100G 以太网物理层;在物理层解决的情况下,实现上层应用则相对简单,本设计使用纯verilog代码实现100G UDP协议层,最终呈现100G UDP 协议栈;
FPGA实现100G UDP的核心优势
1、全硬件卸载能力
协议栈固化逻辑:将UDP/IP解析逻辑映射至FPGA硬件,处理延迟较软件方案降低10倍。
零CPU占用:独立于主机处理器运行,适用于无处理器架构(如智能网卡DPU)
2、可定制化数据路径
AXI-Stream接口优化:支持512bit位宽@322.266MHz,匹配100G MAC IP数据吞吐需求。
灵活协议扩展:可集成自定义包头过滤、流量整形逻辑(如金融交易添加时间戳)。
3、低功耗与高可靠性
能效比提升:实测Kintex UltraScale+ XCKU15P平台功耗<15W,较ASIC方案更适应多协议场景。
前向纠错支持:集成OTN EFEC(如Stratix IV的SPC-BCH码),误码率降至10⁻¹²。
4、快速部署能力
IP核复用:本博主提供已验证UDP/IP协议栈IP,减少12个月开发周期
FPGA与同等IC方案比较
总结
1、FPGA实现 100G UDP 协议栈以硬件级效率突破传统网络栈瓶颈,成为AI/金融/工业实时系统的带宽基础设施
2、FPGA实现 100G UDP 协议栈通过协议固化和接口优化,在功耗、延迟、灵活性三方面超越ASIC/CPU方案
工程概述
本设采用纯verilog代码实现了100G UDP 协议栈;并在Xilinx Ultrascale+系列FPGA上做了部署并验证,由于使用100G以太网,所以需要FPGA的GTY高速收发器和板载的QSFP光口交互,对硬件有一定要求;本设计能实现电脑端网卡与FPGA开发板之间的双向通信,为了方便测试,设计中集成了了100G UDP数据回环
和网络测速
两个功能;
100G UDP数据回环功能如下:
电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包;数据通过插在PC电脑主板上的100G网卡以光纤发送到FPGA开发板;FPGA开发板板载的QSFP光口接收光纤数据发送给FPGA;然后调用Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并以AXI4-Stream接口输出MAC数据;然后MAC数据进入100G UDP协议栈实现以太网帧解包,解析各种头部信息,并提取输出100G UDP报文的有效数据段;有效数据再经过回环后回灌到100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据再进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并输出差分光信号,由板载的QSFP光口通过光纤发送到PC电脑主板的100G网卡;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察100G UDP数据回环的正确性;
100G UDP网络测速功能如下:
FPGA自动循环产生从0开始的累加数作为100G UDP发送数据,发送数据然后进入100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验,输出MAC数据;然后MAC数据进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层的数据接口转换,通过板载的QSFP光口的光纤输出到电脑端100G网卡;然后打开电脑端的资源管理器,查看网卡,即可看到100G UDP通信速率;
为了通用性和适应性,针对不同FPGA型号差异,一共移植了4套工程源码,详情如下:
这里说明一下提供的4套工程源码的作用和价值,如下:
工程源码1
开发板FPGA型号为Xilinx–Kintex7-UltraScale±-xcku5p-ffvb676-2-i;
100G UDP数据回环功能:
电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包;数据通过插在PC电脑主板上的100G网卡以光纤发送到FPGA开发板;FPGA开发板板载的QSFP光口接收光纤数据发送给FPGA;然后调用Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并以AXI4-Stream接口输出MAC数据;然后MAC数据进入100G UDP协议栈实现以太网帧解包,解析各种头部信息,并提取输出100G UDP报文的有效数据段;有效数据再经过回环后回灌到100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据再进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并输出差分光信号,由板载的QSFP光口通过光纤发送到PC电脑主板的100G网卡;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察100G UDP数据回环的正确性;
100G UDP网络测速功能:
FPGA自动循环产生从0开始的累加数作为100G UDP发送数据,发送数据然后进入100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验,输出MAC数据;然后MAC数据进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层的数据接口转换,通过板载的QSFP光口的光纤输出到电脑端100G网卡;然后打开电脑端的资源管理器,查看网卡,即可看到100G UDP通信速率;
该工程需要FPGA开发板+100G网卡+QSFP光模块+光纤+测试电脑才能成功运行,适用于Xilinx Kintex7-UltraScale+系列FPGA移植;
工程源码2
开发板FPGA型号为Xilinx–Zynq UltraScale+ MPSoCs–xczu11eg-ffvc1760-2-i;
100G UDP数据回环功能:
电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包;数据通过插在PC电脑主板上的100G网卡以光纤发送到FPGA开发板;FPGA开发板板载的QSFP光口接收光纤数据发送给FPGA;然后调用Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并以AXI4-Stream接口输出MAC数据;然后MAC数据进入100G UDP协议栈实现以太网帧解包,解析各种头部信息,并提取输出100G UDP报文的有效数据段;有效数据再经过回环后回灌到100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据再进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并输出差分光信号,由板载的QSFP光口通过光纤发送到PC电脑主板的100G网卡;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察100G UDP数据回环的正确性;
100G UDP网络测速功能:
FPGA自动循环产生从0开始的累加数作为100G UDP发送数据,发送数据然后进入100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验,输出MAC数据;然后MAC数据进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层的数据接口转换,通过板载的QSFP光口的光纤输出到电脑端100G网卡;然后打开电脑端的资源管理器,查看网卡,即可看到100G UDP通信速率;
该工程需要FPGA开发板+100G网卡+QSFP光模块+光纤+测试电脑才能成功运行,适用于Xilinx Zynq UltraScale+ MPSoCs系列FPGA移植;
工程源码3
开发板FPGA型号为Xilinx–Virtex UltraScale±-xcvu37p-fsvh2892-2-e;
100G UDP数据回环功能:
电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包;数据通过插在PC电脑主板上的100G网卡以光纤发送到FPGA开发板;FPGA开发板板载的QSFP光口接收光纤数据发送给FPGA;然后调用Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并以AXI4-Stream接口输出MAC数据;然后MAC数据进入100G UDP协议栈实现以太网帧解包,解析各种头部信息,并提取输出100G UDP报文的有效数据段;有效数据再经过回环后回灌到100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据再进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并输出差分光信号,由板载的QSFP光口通过光纤发送到PC电脑主板的100G网卡;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察100G UDP数据回环的正确性;
100G UDP网络测速功能:
FPGA自动循环产生从0开始的累加数作为100G UDP发送数据,发送数据然后进入100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验,输出MAC数据;然后MAC数据进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层的数据接口转换,通过板载的QSFP光口的光纤输出到电脑端100G网卡;然后打开电脑端的资源管理器,查看网卡,即可看到100G UDP通信速率;
该工程需要FPGA开发板+100G网卡+QSFP光模块+光纤+测试电脑才能成功运行,适用于Xilinx Virtex UltraScale+系列FPGA移植;
工程源码4
开发板FPGA型号为Xilinx–Zynq UltraScale+ RFSoCs–xczu47dr-ffve1156-2-i;
100G UDP数据回环功能:
电脑端网络调试助手发送测试数据或发起ping操作,然后电脑端操作系统的Socket实现发送数据的以太网帧组包;数据通过插在PC电脑主板上的100G网卡以光纤发送到FPGA开发板;FPGA开发板板载的QSFP光口接收光纤数据发送给FPGA;然后调用Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并以AXI4-Stream接口输出MAC数据;然后MAC数据进入100G UDP协议栈实现以太网帧解包,解析各种头部信息,并提取输出100G UDP报文的有效数据段;有效数据再经过回环后回灌到100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验;然后数据再进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并输出差分光信号,由板载的QSFP光口通过光纤发送到PC电脑主板的100G网卡;电脑端操作系统的Socket实现接收数据以太网解包,然后数据给网络调试助手显示;网络调试助手同时显示发送和接收数据,以此观察100G UDP数据回环的正确性;
100G UDP网络测速功能:
FPGA自动循环产生从0开始的累加数作为100G UDP发送数据,发送数据然后进入100G UDP协议栈实现以太网帧组包,即加上各种头部信息和校验,输出MAC数据;然后MAC数据进入Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层的数据接口转换,通过板载的QSFP光口的光纤输出到电脑端100G网卡;然后打开电脑端的资源管理器,查看网卡,即可看到100G UDP通信速率;
该工程需要FPGA开发板+100G网卡+QSFP光模块+光纤+测试电脑才能成功运行,适用于Xilinx Zynq UltraScale+ RFSoCs系列FPGA移植;
本博客详细描述了Xilinx系列FPGA实现 100G UDP 协议栈的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
免责声明
本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。
2、相关方案推荐
我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往
我这里已有的以太网方案
目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看:
直接点击前往
3、详细设计方案
设计框图
本设计使用的工程详细设计方案框图如下:
测试用PC端电脑
测试用PC端电脑要求如下:
主板有PCIE卡槽,能插100G 网卡;
安装网络调试助手软件,软件已提供在资料包中;
我的100G 网卡插到主板如下:
测试用100G 网卡
测试用100G 网卡要求如下:
1、必须支持100G速率;
2、必须是QSFP光口;
3、必须安装好网卡驱动,驱动找卖家要;
我使用的网卡型号为Intel-E810;
驱动装好后,要能识别到100G以太网,如下:
QSFP光口
FPGA开发板需要至少拥有1路QSFP光口,且单Lane线速率至少支持25G bps,此外还需要QSFP光模块和光纤,用于连接100网卡,我的FPGA开发板QSFP光口连接如下:
Ultrascale+ 100G Ethernet Subsystem 详解
Xilinx官方的Ultrascale+ 100G Ethernet Subsystem IP核实现100G以太网物理层和MAC数据接口转换,并以AXI4-Stream接口输出MAC数据,以工程1为例,代码层面如下:
Ultrascale+ 100G Ethernet Subsystem是Xilinx推出的具有100G速率的MAC,用户接口为AXI4-Stream,使用Xilinx GTY高速接口,官方数据手册为《PG023》,本博对Ultrascale+ 100G Ethernet Subsystem的解析主要是对《PG023》的翻译和总结,详细细节读者还需自行阅读官方英文原版手册;本博主已将《PG023》中文手册放在了资料包里,Ultrascale+ 100G Ethernet Subsystem框架如下:
赛灵思 UltraScale+™ 器件 Integrated 100G Ethernet IP Subsystem可提供高性能、低时延 100 Gb/s Ethernet 端口,支持各种用户自定义和统计数据收集操作。此专用块可提供100G Ethernet MAC 和 RS-FEC 逻辑,并支持 IEEE 1588-2008 硬件时间戳。虽然IP看起来复杂,但用户无需关心内部构造,只需关心用户接口即可,用户接口为AXIS流;
Ultrascale+ 100G Ethernet Subsystem 使用
Ultrascale+ 100G Ethernet Subsystem通过调用IP方式使用,这里只对重点配置讲解,如下:
用户数据接口AXI4-Stream数据位宽为512 bit,GT连接的外部晶振至少是156.25M;这点很重要,因为它对硬件有定性要求,可以选择SIL系列可编程的差分晶振,否则硬件设计兼容性很差;
Ultrascale+ 100G Ethernet Subsystem 配置
Ultrascale+ 100G Ethernet Subsystem不需要额外配置,只需对几个输入端口给0即可,之前看到网上有Ultrascale+ 100G Ethernet Subsystem的教程,还需要配置一大堆,可能是其他博主有更高端的应用吧;
100G UDP 协议栈简介
100G UDP 协议栈由纯verilog代码实现,性能表现如下:
1、支持100G bps,实测速率稳定在98.7G bps左右;
2、支持ARP
3、支持ICMP
4、支持巨型帧(9K、12K)
5、支持修改MAC地址
6、支持修改IP地址
7、支持修改端口号
8、用户数据接口为AXI4-Stream
9、UDP数据位宽512bit
10、UDP用户时钟332M Hz
11、带有带宽统计模块
100G UDP 协议栈源码架构如下:
100G UDP 协议栈资源消耗
以Xilinx–Kintex7-UltraScale±-xcku5p-ffvb676-2-i平台为例,100G UDP 协议栈资源消耗如下:
100G UDP 协议栈速率表现
支持100G bps,实测速率稳定在98.7G bps左右;实测表现如下:
100G UDP 协议栈接口描述
100G UDP 协议栈用户接口为AXI4-Stream流,时序如下:
发送时序如下:
接收时序如下:
100G UDP 协议栈数据回环和测速选择
本设计能实现电脑端网卡与FPGA开发板之间的双向通信,为了方便测试,设计中集成了了100G UDP数据回环
和网络测速
两个功能,通过VIO选择,如下:
接收数据回环功能
将接收数据回环发送出去,即形成发送=接收的自回环功能;该功能的作用是配合网络调试助手进行数据收发测试、数据丢包测试、数据正确性测试等;
数据数据测速
FPGA自动循环向100G UDP协议栈发送累加的数据,数据内容从0开始累加,即形成连续发送数据功能;该功能的作用是配合PC端测试网络极限速率,打开电脑端的资源管理器,查看网卡,即可看到通信速率;值得注意的是,该方法并不能真实反映网速,用更为专业的网速测试软件为佳;
100G UDP 协议栈带宽测试
代码里有100G UDP 带宽测试功能,通过顶层的`define udp_band_cal_en选择是否开启,默认不开启带宽测试功能,如下:
带宽计算后通过ILA可直接观测,如下:
100G UDP 协议栈 IP地址修改
每套工程均可修改FPGA开发板的IP地址、MAC地址、端口号等信息,同时也可以修改远程节点的IP地址、端口号等信息,如下:
工程源码架构
提供4套工程源码,以工程源码1为例,综合后的工程源码架构如下:
4、vivado工程源码1详解:KU5P版本
开发板FPGA型号:Xilinx–Kintex7-UltraScale±-xcku5p-ffvb676-2-i;
开发环境:Vivado2022.2;
以太网物理层方案:Ultrascale+ 100G Ethernet Subsystem IP核方案;
以太网传输层协议:100G-UDP 协议栈;
输入输出接口:QSFP光口,100G线速率;
FPGA高速接口资源:GTY
高速收发器,4 Lane合计100G bps线速率;
实现功能:FPGA实现 100G UDP 协议栈应用;
工程作用:此工程目的是让读者掌握FPGA实现 100G UDP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
5、vivado工程源码2详解:ZU11EG版本
开发板FPGA型号:Xilinx–Zynq UltraScale+ MPSoCs–xczu11eg-ffvc1760-2-i;
开发环境:Vivado2022.2;
以太网物理层方案:Ultrascale+ 100G Ethernet Subsystem IP核方案;
以太网传输层协议:100G-UDP 协议栈;
输入输出接口:QSFP光口,100G线速率;
FPGA高速接口资源:GTY
高速收发器,4 Lane合计100G bps线速率;
实现功能:FPGA实现 100G UDP 协议栈应用;
工程作用:此工程目的是让读者掌握FPGA实现 100G UDP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
6、vivado工程源码3详解:VU37P版本
开发板FPGA型号:Xilinx–Virtex UltraScale±-xcvu37p-fsvh2892-2-e;
开发环境:Vivado2022.2;
以太网物理层方案:Ultrascale+ 100G Ethernet Subsystem IP核方案;
以太网传输层协议:100G-UDP 协议栈;
输入输出接口:QSFP光口,100G线速率;
FPGA高速接口资源:GTY
高速收发器,4 Lane合计100G bps线速率;
实现功能:FPGA实现 100G UDP 协议栈应用;
工程作用:此工程目的是让读者掌握FPGA实现 100G UDP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
7、vivado工程源码4详解:ZU47DR版本
开发板FPGA型号:Xilinx–Zynq UltraScale+ RFSoCs–xczu47dr-ffve1156-2-i;
开发环境:Vivado2022.2;
以太网物理层方案:Ultrascale+ 100G Ethernet Subsystem IP核方案;
以太网传输层协议:100G-UDP 协议栈;
输入输出接口:QSFP光口,100G线速率;
FPGA高速接口资源:GTY
高速收发器,4 Lane合计100G bps线速率;
实现功能:FPGA实现 100G UDP 协议栈应用;
工程作用:此工程目的是让读者掌握FPGA实现 100G UDP 协议栈的设计能力,以便能够移植和设计自己的项目;
工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
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开发板,可以使用你自己的,也可以使用本博主的;
QSFP光模块,支持100G线速率;
光纤,支持100G线速率;
100G网卡;
带PCIE的电脑主机;
网络调试助手软件;
连接如下:
然后将电脑端IP地址设置为如下:
然后下载bit或者固化bin文件,即可开始测试;
ping测试
打开电脑CMD,输入ping指令;
单次ping测试如下:
连续ping测试如下:
ARP测试
打开电脑CMD,输入ARP指令;如下:
100G UDP数据回环测试
首先开启VIO的数据回环测试模式,如下:
打开电脑端网络调试助手,测试如下:
100G UDP网络速率测试
首先开启VIO的网络速率测试模式,如下:
然后打开电脑的任务管理器–>性能,找到你的100G网卡,即可看到实时速率,如下:
注意!!!
注意!!!
这个测速只代表可能的最高的速度,100G UDP的点到点速度和电脑的网卡、CPU 速度、内存速度、操作系统都有关系;
100G UDP综合上板测试演示
综合测试演示如下:
FPGA实现100G UDP协议栈
真实用户使用反馈
如果用户有需求,我一般会先针对用户的板子原理图做一个测试bit,主要测试数据回环和测速,用户拿到bit后自行测试,觉得测试效果满意后再决定是否使用,举例某航某院的用户对数据回环和数据丢包的使用反馈如下:
10、工程代码
资料如下: