FPGA实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

news2024/11/16 9:38:06

目录

  • 1、前言
  • 2、我这里已有的UDP方案
  • 3、详细设计方案
    • 传统 FPGA UDP 方案
    • 本 FPGA 10G UDP 方案(牛逼)
    • 10G Ethernet 框图
    • 10G Ethernet 发送解析
    • 10G Ethernet 接收解析
    • 10G Ethernet 寄存器配置
    • 10G Ethernet UI 配置
  • 4、vivado工程详解
  • 5、上板调试验证并演示
    • ping功能测试
    • 数据收发测试
    • 10G 网速测试
  • 6、福利:工程代码的获取

1、前言

目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的Tri Mode Ethernet MAC三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,三速网IP实现了rgmii到gmii再到axis的转换;
4:使用FPGA的GTX资源利用SFP光口实现UDP,通信,这种方案不需要外接网络变压器即可完成,本方案就是此种设计;

本设计使用UDP协议栈实现UDP通信的MAC层设计,调用Xilinx官方的10G Ethernet Subsystem IP核实现了网络变压器的功能,从而实现无需外挂网络芯片即可实现UDP通信的方案,轻松实现时下热门的10G万兆网通信;顶层代码设置了1个用户按键,不按下按键时工程科进行UDP数据回环测试,按下用户按键后,可进行网速测速测试;本例程使用的UDP该协议栈目前并不开源,只提IP核,但不影响使用,该协议栈带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;本设计通过一个fifo实现UDP数据的回环收发,并在电脑端使用网络调试助手进行UDP收发验证;

本设计链接1路SFP光口,配置为UDP服务器,本设计经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

2、我这里已有的UDP方案

目前我这里有如下几种UDP方案和应用实例:
我的博客主页有个FPGA以太网通信专栏,专栏是免费的,里面有很多FPGA实现的UDP应用,既有常规千兆网也有万兆网方案,对网络通信有需求的兄弟可以去看看:直接点击前往

3、详细设计方案

传统 FPGA UDP 方案

在讲述设计方案之前,我们先来看看FPGA实现UDP通信方案应具备什么条件,大体如下:
在这里插入图片描述
1:用户逻辑:
开发者需要收发的实际数据,可以以多种形势存在,比如自定义格式、AXIS数据流格式等等,用户逻辑的接口时序必须与MAC层的接口时序一致;
2:MAC层
主要由UDP、IP、ARP、ICMP等具体的协议逻辑组成,实现网络数据的组包与拆包,相当于做了软件里Sockte做的事儿,Sockte依赖CPU做网络数据包,而这里的MAC层直接使用硬件资源做网络数据包,解放了网络数据包对CPU的奴役,在当今时髦儿的RDMA中得以完美体现。。。本设计的MAC层采用米联客的UDP协议栈,关于这部分,请参考我之前写的文章
3:网络变压器
主要由PCS/PMA组成,PCS主要实现并行数据的编解码,比如经典的8b/10编解码,PMA主要实现并串/串并转换,输出接口是高速差分信号,可直接与SFP或者RG45网口连接;
4:RJ45网口:俗称水晶头,插网线的。。。
5:远端节点

本 FPGA 10G UDP 方案(牛逼)

本FPGA开发板可以理解为一个网卡,远端节点就是与之连接的另一个网卡;
本设计与上述传统的FPGA实现UDP方案不同的是网络变压器部分,前面的网络变压器是真实的网络PHY芯片,比如我常用到的RTL8211、B50610、88E1518等等;本设计没有用到网络变压器,而是调用Xilinx官方的10G Ethernet Subsystem IP核实现了网络变压器的功能,通过SFP光口输出实现与远端节点的连接,设计框图如下:
在这里插入图片描述
本设计在电脑端使用网络调试助手和开发板通信,实现UDP数据环回试验,本设计没有使用外接网络变压器,而是调用Xilinx官方的10G Ethernet Subsystem IP核,利用SFP光口输出的形式完成。

顶层文件udp_test.v:
对于 udp_ip 的例化时,设置本地的 ip 地址,也就是开发板的 IP 地址为192.168.10.1,本地的 MAC 地址为 000a3501fec0,目的 IP 地址设置为 192.168.10.2,源端口为61441,目的端口为 61441。用户接口分为接收与发送,全都是 AXI4 流接口,同样 MAC 接口也是 AXI4 流接口,与 10G MAC 对接。
IP地址和端口号可自由修改,位置如下:udp_test.v
在这里插入图片描述
UDP回环模块:
UDP回环模块的文件为udp_read_write_ctrl.v 主要是实现用户功能,实现了两种模式的切换,一种是 loopback 模式,也就是上位机向开发板发送数据,开发板再把接收到的数据发送回去;另外一种就是测速模式,开发板持续向 10G 设备发送数据包;两种模式通过按键进行切换。

MAC层:
使用自定义IP实现,即UDP协议栈,该UDP协议栈拥有动态ARP,ping等功能,可实现UDP收发;

这里重点讲一讲Xilinx官方的10G Ethernet Subsystem IP核;
注意!!!
10G Ethernet Subsystem IP核只有在K7及其以上FPGA才有;

10G Ethernet 框图

上图为 10G MAC 的原理框图,可以查看 pg157 文档。其中发送部分、接收部分都是 AXI 流接口,数据宽度为 64 位。同时还有 AXI4-Lite 接口,用于配置 MAC 寄存器等。我们关注的重点主要是数据传输接口,也就是发送和接收部分。
在这里插入图片描述

10G Ethernet 发送解析

在这里插入图片描述
从上表中也可以看到,AXIS 接口可以配置为 64 位或 32 位,是在配置 IP 核的时候进行选择的。根据不同的数据宽度,参考时钟频率也不同,在文档里也可以看到,64 位时钟为 156.25MHz,32位时钟为312.5MHz。在本实验中我们使用64位的数据,其带宽也就是156.25M64bit=10Gbps。
由于 10GBASE-R 是 64b/66b 编码,因此收发器的速度为 10Gbps
66/64 = 10.3125Gbps。

以下为 64 位发送端正常模式下的时序,其中的 DA 为 destination mac address,即目标 MAC地址;SA 为 source mac address,即源 MAC 地址;L/T 为 length/type 信息,即长度或类型;D为数据信息。可以看到正常模式下是不带 CRC 校验的,这部分由 MAC 来完成。
在这里插入图片描述
一包数据部分长度要求为 46~1500 字节,也就是 D 部分,如果不足 46 字节,MAC 会自动插入数据到 46 字节。但是如果 MAC IP 被配置成有 FCS 部分,也就是 CRC 校验部分,用户需要保证数据部分长度满足要求,否则会被 MAC IP 认为是 Bad Frame。本节实验中,采用正常模式,不加 FCS 部分。

10G Ethernet 接收解析

在这里插入图片描述
接收部分与发送部分最大的不同是没有了 tready 信号,也就是不需要用户这边提供准备信号,而是一直不停的接收数据。同时 tuser 指示接收到的包是否正确,用户可以根据此信号判断包的正确性。
以下是 64 位接收到正确包的时序图,可以看到是在 tlast 有效时,tuser 同时有效,表明此包是正确的包。
在这里插入图片描述
下面是接收到错误包的情况,在 tlast 有效时,tuser 为低电平。
在这里插入图片描述
以下的情况会出现错误包:
1: FCS 发现错误
2:数据包长小于 64 字节,也就是 DA(6)+SA(6)+L/T(2)+D+FCS(4)的长度,其中 D 的长度要大于
等于 46 字节。
3:没有使能巨型帧的情况下,接收到巨型帧
4:数据包长度大于 MTU 要求
还有其他一些情况也会出现错误,这里就不在列举了,详情可以参考 pg157 文档。
同样,接收部分也有是否插入 FCS 的配置,在本实验中采用默认的正常模式,不插入 FCS。

10G Ethernet 寄存器配置

在文档中也介绍了很多的寄存器,这些寄存器都是通过 AXI4-Lite 总线配置的,工程中给出了配置源码,axi_10g_ethernet_0_axi_lite_sm.v 是从 10g mac 的 example 工程中得来的,功能是配MAC,不需要改变,直接拿来用即可,具体的寄存器说明请参考 pg157 文档。
在这里插入图片描述

10G Ethernet UI 配置

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

4、vivado工程详解

开发板FPGA型号:Xilinx xc7k325tffg900-2;
开发环境:vivado2019.1;
输入/输出:SFP光口;
网卡速度:10G;
测试项:UDP数据回环,ping等;
工程代码架构如下:
在这里插入图片描述
综合编译后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

5、上板调试验证并演示

本实验需要用户自己准备 10G 网卡,插到电脑主板上。下图为我在某鱼上买的二手货。。。
在这里插入图片描述
连接方式如下:
在这里插入图片描述
开发板侧SFP连接如下:
在这里插入图片描述

ping功能测试

板子上电下载bit后,先测试ping功能,如下:
在这里插入图片描述
单次ping还不够,直接上连续ping,如下:
在这里插入图片描述

数据收发测试

然后是用网络调试助手进行数据收发测试,网卡连接成功后网络调试助手会收到FPGA发来的测试字符串,1s发一次,如下:
在这里插入图片描述
然后发送大批量数据进行测试,测试结果如下:
在这里插入图片描述

10G 网速测试

测速功能要慎重!!!会导致电脑严重卡顿!!!
测速功能要慎重!!!会导致电脑严重卡顿!!!
测速功能要慎重!!!会导致电脑严重卡顿!!!
可以先打开任务管理器,在性能中看以太网传输速度
在这里插入图片描述
按下顶层中绑定的用户按键,以太网速度会发生变化。
在这里插入图片描述
在电脑上观察开发板以太网网口的发送速率,这个测速只代表可能的最高的速度,不代表电脑真实的不丢包速度,UDP 的点到点不丢包速度和电脑的网卡、CPU 速度、内存速度、操作系统都有关系。。。
如果电脑出现严重卡顿,请及时再次按下按键,即可切换到 Loopback 模式!!!

6、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

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

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

相关文章

新手必看:蓝牙耳机什么牌子的好用?2023年蓝牙耳机排名

上班通勤、健身运动、游戏娱乐都离不开蓝牙耳机,蓝牙耳机市场这几年逐渐饱和,涌现了大量的品牌,蓝牙耳机什么牌子的好用成为热议话题,新手们在挑选时会参考排行榜,小编接下来将盘点2023年蓝牙耳机排名。 ●JEET Air 2蓝…

【服务器数据恢复】HP MSA存储raid5数据恢复案例

服务器故障环境: HP MSA某型号存储,8块SAS的硬盘组建RAID5磁盘阵列,其中包括1块热备盘。故障存储中基于该RAID组的LUN均分配给HP-Unix小机使用,上层做的LVM逻辑卷,存储的数据为Oracle数据库及OA服务端。 服务器故障&a…

PyCharm更换pip源、模块安装、PyCharm依赖包导入导出

一、Pycharm更换安装源 在下载安装好Pycharm后,一个在实际编程开发过程中非常重要的问题是第三方库添加,然而Python默认的源网络速度有点慢,因此,我们常常需要做的是更换Pycharm的安装源。 在当前最新版(2022.03版&…

[排序算法]桶排序

参考:《漫画算法-小灰的算法之旅》 目录 一、什么是桶排序 二、桶排序的工作原理 三、代码 四、时间复杂度和空间复杂度 一、什么是桶排序 桶排序是一种线性时间的排序算法,它类似于基数排序所创建的统计数组。桶排序需要创建若干个桶来协助排序。 …

企业数字化管理中,数据治理到底怎么“治”

随着信息化、数字化的理念、技术及其应用在社会的方方面面进行扩散,数据的规模和丰富程度已经达到了一个新的高度,所以当下如何更进一步利用好数据,充分发挥数据的价值,将其真正变为高质量的数据资产成为了企业要面对的重要问题&a…

Matlab高光谱遥感、数据处理与混合像元分解及典型案例

站在学员的角度去理解“高光谱”,用大家能听的懂的语言去讲述高光谱的基本概念和理论,帮助学员深入理解这项技术的底层科学机理。方法篇,将高光谱技术与MATLAB工具结合起来,采用MATLAB丰富的工具箱,快速复现高光谱数据…

爱快 Docker NodeRed Tcp服务器远程连接试验

有一台基于4415软路由安装的ubuntu server系统,在Ubuntu上通过Docker安装了NodeRed。ubuntu通过爱快硬路由与外网连接。爱快硬路由通过动态域名和端口映射实现远程访问ubuntu。 平时通过如下命令运行NodeRed镜像: docker run -it --rm -e TZ"Asia/…

掌握这些Revit常见术语,从此BIM建模再无压力

BIM模型看似复杂,其实只要掌握模型中基本元素的概念,理清建模原理,就能轻松上手,游刃有余。 首先,我们要清楚,作为BIM主要建模软件的Revit,可以在三维空间中建立起数字化的建筑信息模型&#xf…

【更新公告】AirtestIDE更新至1.2.15版本

1. 前言 本次更新为AirtestIDE、Airtest、Poco、iOS-tagent更新。 AirtestIDE更新至1.2.15版本,Airtest更新为1.2.10版本,Poco更新为1.0.89版本,iOS-tagent重新梳理了master分支内容。更新内容详见下文。 2. 更新内容 1)Airte…

HBase之全文检索Phoenix

HBase高手之路6-HBase之全文检索Phoenix 一、全文检索 ​ 二、全文检索工具phoenix简介 三、OLTP和OLAP 1. OLAP 在线分析处理系统,hadoop、hbase、hive提供支持 2. OLTP 在线事务处理系统,传统的关系数据库支持 四、Phoenix的安装 1. 下载 2.…

企业数字化转型的核心是什么?如何才能真正做到数字化转型?

什么是数字化转型?如何才能做到数字化转型? 好像大家一直在讨论,但仍然没有一个明确的答案。 这其实很正常: 因为“数字化”一词对不同的企业来说有不同含义。它可以是从采用新技术——引入自动化操作中的任何一样东西。此外,“…

《一次性分割一切》阅读笔记

目录 0 体验 1 摘要 2 十个问题 参考文献 0 体验 体验地址:SEEM - a Hugging Face Space by xdecoder 体验结果: 将哈士奇和汽车人从图片中分割出来。 1 摘要 尽管对于交互式人工智能系统的需求不断增长,但在视觉理解(例如…

HCIP之RSTP、MSTP

目录 RSTP 相较于802.1D改进 改进1:变更了端口角色 改进点2:修改了端口的状态类型 改进3:对配置BPDU的报文内容进行修改 改进点4:对配置BPDU的处理 改进点5:快速收敛机制 改进点6:拓扑变更机制的改进…

用户画像系列——HBase 在画像标签过期策略中的应用

一、背景 前面系列文章介绍了用户画像的概念、用户画像的标签加工、用户画像的应用。本篇文章主要介绍一些画像的技术细节,让大家更加详细的了解画像数据存储和处理的逻辑 举个现实中的例子: 例子1:因为疫情原因,上线一个平台(…

使用chatgpt探索XSS问题

首先问的问题是:XSS的类型有哪些?如何有效地预防? 回答的结果来看,还是比较中规中矩的。 紧接着,第二个问题:“XSS的三种类型的区别是什么?” 只是从形成原理上分析了不同,但是&…

服务器空间不足处理与解决思路—实战docker占用空间太大

前言 服务器Centos操作系统,空间不足的问题处理了三次了,决定把它的解决思路和处理过程记录下来。服务器空间不足是一个经常会遇到的问题,尤其是在大型应用程序和网站上。当服务器空间不足时,应该采取一些步骤来处理和解决这个问…

AWT_绘图_组件绘图原理

组件绘图原理: 之前我们已经学习过很多组件,例如Button、Frame、Checkbox等等,不同的组件,展现出来的图形都不一样,其实这些组件展示出来的图形,其本质就是用AWT的绘图来完成的。 在AWT中,真正提…

idea使用 ( 三 ) 常用配置

4.常用配置 4.1.Settings 配置 接 2.3.2.设置配置 也可以 从菜单选择 设置配置 File > Settings 打开配置窗口 其中 Appearance & Behavior : 外观 与 行为 Keymap : 快捷键 Editor : 编辑器 Plugins : 插件 Version Control : 版本控制 Build, Execution,…

数据库系统--并发控制

文章目录 一、为什么要并发控制1.2 并发控制解决的问题1.2.1 脏读1.2.2 幻读1.2.3 不可重复读1.2.4 数据丢失问题 二、事务调度及可串行性2.1 事务2.1.1 事务的宏观2.1.2 事务的微观2.1.3 事务的特性 ACID 2.2 事务调度与可串行性2.3 冲突可串行化判定 三、基于封锁的并发控制方…

【MySQL高级】——存储引擎

一、查看存储引擎 show engines;二、设置系统默认的存储引擎 <1> 查看默认的存储引擎 show variables like %storage_engine%; #或 SELECT default_storage_engine;<2> 修改默认的存储引擎 1. 命令方式 SET DEFAULT_STORAGE_ENGINEMyISAM;2. 配置文件方式 …