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、工程代码获取

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89796.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP从入门到放弃系列之流程管理概述

文章目录前言1.Process Management(过程管理)2.关键术语2.1Control recipe destination2.2 Process instruction characteristic2.3 Process message characteristic2.4 Process instruction category2.5 Process message category2.6 PI sheet3.关键配置…

RCLAMP0554S.TCT升特Semtech 5通道TVS二极管,0.5pF+20kV防护,超高速接口!

RCLAMP0554S.TCT(Semtech)产品解析与推广文案 一、产品定位 RCLAMP0554S.TCT是Semtech(升特半导体)推出的5通道超低电容TVS二极管阵列,专为超高速数据接口(USB4/雷电4/HDMI 2.1)提供静电放电&a…

【人工智能】DeepSeek的AI实验室:解锁大语言模型的未来

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 DeepSeek作为中国AI领域的先锋,以其开源大语言模型(LLM)DeepSeek-V3和DeepSeek-R1在全球AI研究中掀起波澜。本文深入探讨DeepSeek AI实验…

nacos+nginx动态配置大文件上传限制

前言 今天还要跟大家分享的一个点就是微服务网关gateway用webflux响应式不用servlet后,引发的一个忽略点差点在演示的时候炸锅,也不多讲废话,说说现象,说说处理就了事。 一、上传超过20MB的视频报错 配置在nacos里,读…

mr 任务运行及jar

mainclass如下:LoggingDriver

Python 数据分析:numpy,抽提,整数数组索引与基本索引扩展(元组传参)。听故事学知识点怎么这么容易?

目录1 代码示例2 欢迎纠错3 论文写作/Python 学习智能体------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右Sm…

ECU开发工具链1.10版:更强大的测量、校准与数据分析体验.

汽车电子开发与测试领域,高效、精准且安全的工具是成功的基石。DiagRA X 作为一款广受认可的 Windows 平台综合解决方案,持续引领行业标准。其最新发布的 1.10 版本带来了显著的功能增强与用户体验优化,进一步巩固了其在 ECU 测量、校准、刷写…

Qt C++串口SerialPort通讯发送指令读写NFC M1卡

本示例使用的发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bVIuGpf&ftt&id18645495882 一、确定已安装Qt Serial Port组件 二、在.pro项目文件声明引用Serialport组件 三、在.h头文件内引用Serialport组件 四、在.cpp程序中实…

Go 语言开发中用户密码加密存储的最佳实践

在现代 Web 应用开发中,用户密码的安全存储是系统安全的重要环节。本文将结合 Go 语言和 GORM 框架,详细介绍用户密码加密存储的完整解决方案,包括数据库模型设计、加密算法选择、盐值加密实现等关键技术点。 一、数据库模型设计与 GORM 实践…

优化Facebook广告投放的五大关键策略

一、精确筛选目标国家用户在Audience的locations设置目标国家时,务必勾选"People living in this location"选项。系统默认会选择"People living in this location or recently in this location",这会扩大受众范围,包含…

Debian-10-standard用`networking`服务的`/etc/network/interfaces`配置文件设置多网卡多IPv6

Debian-10-buster-standard用networking服务的/etc/network/interfaces配置文件设置多网卡多IPv6 Debian-10-buster-standard用networking服务的/etc/network/interfaces配置文件设置多网卡多IPv6 250703_123456 三块网卡 : enp0s3 , enp0s8 , enp0s9 /etc/network/interfac…

对话式 AI workshop:Voice Agent 全球五城开发实录

过去几个月,TEN Framework 团队与 Agora 和声网围绕 “对话式AI”题,踏上了横跨全球五大城市的精彩旅程——东京、旧金山、巴黎、北京、京都。 五场精心筹备的Workshop 场场爆满, 汇聚了来自当地及全球的开发者、创业者、产品经理与语音技术爱…

算法学习笔记:6.深度优先搜索算法——从原理到实战,涵盖 LeetCode 与考研 408 例题

在计算机科学领域,搜索算法是解决问题的重要工具,其中深度优先搜索(Depth-First Search,简称 DFS)凭借其简洁高效的特性,在图论、回溯、拓扑排序等众多场景中发挥着关键作用。无论是 LeetCode 算法题&#…

vue create 和npm init 创建项目对比

以下是关于 vue create 和 npm init 的对比分析: 1. 定位与功能 vue create 定位:Vue 官方提供的脚手架工具,基于 Vue CLI,用于快速创建标准化的 Vue 项目,支持 Vue 2 和 Vue 3。功能:提供交互式配置&…

C++ bitset 模板类

bitset<256> 数据类型详解 bitset<256> 是 C 标准库中的一个模板类&#xff0c;用于处理固定大小的位集合&#xff08;Bit Set&#xff09;。它可以高效地操作和存储二进制位&#xff0c;特别适合需要处理大量布尔标志或简单计数的场景。 基本定义与特性 1. 模板参…

通信握手言和:PROFINET转EtherCAT网关让汽轮机振动数据“破壁”传输

某大型电厂的关键汽轮机设备采用EtherCAT振动传感器进行实时监测&#xff0c;但由于工厂PLC振动分析系统基于PROFINET协议&#xff0c;数据无法直接接入&#xff0c;导致振动数据延迟、预警滞后&#xff0c;严重影响设备健康管理。传统的人工巡检和定期维护难以捕捉早期机械故障…

golang 中当 JSON 数据缺少结构体(struct)中定义的某些字段,会有异常吗

目录关键影响示例演示潜在问题与解决方案问题 1&#xff1a;逻辑错误&#xff08;零值干扰&#xff09;问题 2&#xff1a;忽略可选字段问题 3&#xff1a;第三方库验证最佳实践总结在 Go 语言中&#xff0c;当 JSON 数据缺少结构体&#xff08;struct&#xff09;中定义的某些…

Fiddler 中文版怎么配合 Postman 与 Wireshark 做多环境接口调试?

现代项目中&#xff0c;开发、测试、预发布、生产环境往往分离配置&#xff0c;前端在开发过程中需要频繁切换接口域名、验证多环境表现。而接口升级或项目迭代时&#xff0c;还需要做回归测试&#xff0c;确保老版本接口仍能兼容&#xff0c;避免线上事故。这些环节若仅靠代码…

钉钉小程序开发技巧:getSystemInfo 系统信息获取全解析

在钉钉小程序开发中&#xff0c;获取设备系统信息是实现跨平台适配和优化用户体验的关键环节。本文将深入解析 dd.getSystemInfo 接口的使用方法、技术细节与实际应用场景&#xff0c;帮助开发者高效应对多终端开发挑战。一、接口功能与核心价值dd.getSystemInfo 是钉钉小程序提…

Java项目Maven配置JDK1.8全攻略

目录 &#x1f9e9; 一、全局环境变量配置&#xff08;推荐系统级统一&#xff09; ⚙️ 二、Maven全局配置&#xff08;多项目统一&#xff09; &#x1f4c2; 三、项目级配置&#xff08;推荐团队协作&#xff09; &#x1f4bb; 四、IDE配置&#xff08;辅助验证&#x…