FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持

发布于:2025-07-05 ⋅ 阅读:(16) ⋅ 点赞:(0)


FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持

FPGA实现40G网卡NIC

1、前言

FPGA实现NIC现状:

目前国内能用FPGA实现高速NIC的只有Xilinx系列FPGA和响应的复旦微FPGA,高速NIC需要解决3个核心问题,PCIE、DMA、高速光口,目前纯国产FPGA还不能同时解决这三大难题;本设计采用Xilinx的VUP系列FPGA实现40G网卡NIC功能;

工程概述

本文详细描述了Xilinx的VUP系列FPGA实现40G网卡NIC功能的设计方案;从以下两个数据流向描述整个设计:

PC向FPGA网卡通信

以PC端发起ping操作举例;PC端发起ping操作,然后PC端操作系统Socket实现发送数据的以太网帧组包,然后发送给PC端PCIE;数据包通过PCIE总线发送至FPGA网卡,FPGA调用Ultrascale+ integrated Block (PClE4C) for PCl Express IP核实现PCIE物理层、数据链路层和事务层功能,并将接收到的 TLP包(Transaction Layer Packet)发送给DMA引擎;DMA引擎再将数据包以太网收发逻辑模块做缓存处理;然后数据包再发送给40G/50G Ethernet subsystem IP核实现以太网数据链路层和物理层功能;最后数据包通过板载的QSFP光口发送至光纤传送到远端网卡;

FPGA网卡向PC通信

FPGA板载QSFP光口收到以太网数据包,并送入40G/50G Ethernet subsystem IP核实现以太网物理层核数据链路层功能;然后数据包送以太网收发逻辑模块做缓存处理;然后数据包发送给DMA引擎送Ultrascale+ integrated Block (PClE4C) for PCl Express IP核实现PCIE物理层、数据链路层和物理层功能;然后网络数据包通过PCIE总线发送至PC端;然后PC端操作系统Socket实现以太网数据解析,并生成ICMP回复包再返回FPGA网卡;

针对市场主流需求,本博客提供1套工程源码,具体如下:
在这里插入图片描述
现对上述1套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为xcvu37p-fsvh2892-2L-e;PC端发起ping操作,然后PC端操作系统Socket实现发送数据的以太网帧组包,然后发送给PC端PCIE;数据包通过PCIE总线发送至FPGA网卡,FPGA调用Ultrascale+ integrated Block (PClE4C) for PCl Express IP核实现PCIE物理层、数据链路层和事务层功能,并将接收到的 TLP包(Transaction Layer Packet)发送给DMA引擎;DMA引擎再将数据包以太网收发逻辑模块做缓存处理;然后数据包再发送给40G/50G Ethernet subsystem IP核实现以太网数据链路层和物理层功能;最后数据包通过板载的QSFP光口发送至光纤传送到远端网卡;
FPGA板载QSFP光口收到以太网数据包,并送入40G/50G Ethernet subsystem IP核实现以太网物理层核数据链路层功能;然后数据包送以太网收发逻辑模块做缓存处理;然后数据包发送给DMA引擎送Ultrascale+ integrated Block (PClE4C) for PCl Express IP核实现PCIE物理层、数据链路层和物理层功能;然后网络数据包通过PCIE总线发送至PC端;然后PC端操作系统Socket实现以太网数据解析,并生成ICMP回复包再返回FPGA网卡;该工程适用于PGA实现高速网卡NIC应用;

本文详细描述了FPGA实现40G网卡NIC的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的高速接口领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

3、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的以太网方案

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

4、工程详细设计方案

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

测试用电脑

测试用电脑需要满足一下必要条件:
带有PCIE卡槽,且支持PCIE3.0,至少支持4 Lane;
装有Linux操作系统,比如ubuntu20;Linux系统不能是虚拟机;
Linux操作系统必须安装ethtool测试工具;
我这里的测试用电脑和FPGA网卡连接如下:
在这里插入图片描述

PClE4C

数据包通过PCIE总线发送至FPGA网卡,FPGA调用Ultrascale+ integrated Block (PClE4C) for PCl Express IP核实现PCIE物理层、数据链路层和事务层功能,并将接收到的 TLP包(Transaction Layer Packet)发送给DMA引擎;PClE4C配置为PCIE3.0 4Lane模式;使用MSI中断;使用GTY高速接口资源;具体配置如下:
在这里插入图片描述
PClE4C在工程中如下:
在这里插入图片描述

DMA

DMA负责完成PCIE4C到内存的数据搬运,但工程中没有使用板载的DDR资源作为内存,而是在FPGA内部用双口RAM搭建了建议内存,用于存放缓存数据,由于和DMA交互的模块众多,所以DMA并非一个单独的模块,而是在各个模块间相互存在的功能模块的总称,代码架构如下:
在这里插入图片描述

40G/50G Ethernet subsystem

40G/50G Ethernet subsystem IP核实现以太网数据链路层和物理层功能;配置为40G BASE-R模式;使用GTY资源,GT参考时钟为差分156.25M;40G/50G Ethernet subsystem配置如下:
在这里插入图片描述
PClE4C在工程中如下:
在这里插入图片描述

工程源码架构

工程源码架构如下:
在这里插入图片描述
本博主发布的工程均已编译完成,且时序收敛,无时序违约,如下:
在这里插入图片描述

驱动和测试文件

我们提供基于Linux的驱动和测试文件,以放在资料包中,如下:
在这里插入图片描述

5、Vivado工程详解1详解:VU37P版本

开发板FPGA型号:Xilinx–xcvu37p-fsvh2892-2L-e;
FPGA开发环境:Vivado2022.2;
PC端接口:PCIE3.0 8G线速率,4 Lane;
网卡端接口:QSFP28;
PCIE解决方案:Ultrascale+ integrated Block (PClE4C) for PCl Express IP核;
以太网MAC解决方案:40G/50G Ethernet subsystem IP核;
数据缓存方案:简易双口RAM方案;
实现功能:FPGA实现40G网卡NIC;
工程作用:此工程目的是让读者掌握FPGA实现40G网卡NIC的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第4章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程移植说明

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软核;

7、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板;
测试用PC电脑;
QSFP28光模块和光纤;
我的板子连接如下:
在这里插入图片描述

下载bit

步骤如下:(顺序一定要对)
1、先给测试电脑上电
2、电脑启动完成后,在给FPGA开发板上电
3、下载bit
4、重启电脑(FPGA开发板保持上电)

检测FPGA网卡

测试电脑重启完成后
1、打开终端并进入root模式
2、输入PCEI查询指令

lspci

然后可以看到有Xilinx corporation Device的设备,如下:
在这里插入图片描述
也可以进入设置界面的网络中查看,应该有Xilinx的网卡驱动,如下:
在这里插入图片描述
2、输入PCIE详情查询指令,可以看到FPGA网卡的更详细信息

lspci -vvv

查询结果如下:
在这里插入图片描述

驱动编译安装

测试电脑重启完成后
1、将我们提供的驱动文件包复制到你的linux系统中;
2、进入驱动文件夹
3、打开终端并进入root模式
4、删除全部编译文件,指令如下:

make clean

5、编译驱动,指令如下:

make

如下:
在这里插入图片描述
5、安装驱动,指令如下:

insmod test_nic.ko

如下:
在这里插入图片描述

配置FPGA网卡IP

1、查询电脑所有网卡状态,指令如下:

ifconfig

如下:
在这里插入图片描述
2、配置FPGA网卡IP地址,指令如下:

ifconfig etho 192.168.0.10

如下:
在这里插入图片描述
IP地址可以自由配置,192.168.0.10只是我随意配的一个
然后可再次输入 ifconfig 确认一下eth0的IP地址是否已被修改,如下:
在这里插入图片描述
如果没有修改成功,则可直接进去设置–>以太网,找到Xilinx Ethernet手动修改,如下:
在这里插入图片描述

单卡ping测试

1、输入指令测试FPGA网卡,指令如下:

ping 192.168.0.10

如下:
在这里插入图片描述

综合测试效果演示

综合测试效果演示如下:

FPGA实现40G网卡NIC,工程源码分享

8、工程代码获取

工程代码如下:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到