FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持
目录
- 1、前言
- 工程概述
- 免责声明
- 3、相关方案推荐
- 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
- 我这里已有的以太网方案
- 4、工程详细设计方案
- 工程设计原理框图
- 测试用电脑
- PClE4C
- DMA
- 40G/50G Ethernet subsystem
- 工程源码架构
- 驱动和测试文件
- 5、Vivado工程详解1详解:VU37P版本
- 6、工程移植说明
- vivado版本不一致处理
- FPGA型号不一致处理
- 其他注意事项
- 7、上板调试验证
- 准备工作
- 下载bit
- 检测FPGA网卡
- 驱动编译安装
- 配置FPGA网卡IP
- 单卡ping测试
- 综合测试效果演示
- 8、工程代码获取
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、工程代码获取
工程代码如下: