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

目录

  • 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名片。
网盘资料如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一款支持全文检索、工作流审批、知识图谱的企事业知识库

一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 获取方式q:262086839 为什么建立知识库平台&…

perf record对C++程序耗时进行分析

本节将介绍如何使用perf工具的perf record对C代码进行性能分析,一切操作都是在ubuntu 20下进行。 perf工具安装 由于perf工具和内核版本有关,因此直接安装容易出错,建议直接通过如下指令安装: sudo apt-get install linux-tool…

00后卷王的自述,我难道真的很卷?

前言 前段时间去面试了一个公司,成功拿到了offer,薪资也从12k涨到了18k,对于工作都还没两年的我来说,还是比较满意的,毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王,感觉自己年轻&#xff…

独立IP服务器和共享IP服务器有什么区别

在选择一个合适的服务器时,最常见的选择是共享IP服务器和独立IP服务器。尽管两者看起来很相似,但它们有着很大的不同。本文将详细介绍共享IP服务器和独立IP服务器的不同之处,以及如何选择适合您需求的服务器。 一、什么是共享IP服务器? 共享…

Python探索性P图,四种增强方式快速玩转pillow库

嗨害大家好鸭!我是爱摸鱼的芝士❤ 我们平时使用一些图像处理软件时, 经常会看到其对图像的亮度、对比度、色度或者锐度进行调整。 你是不是觉得这种技术的底层实现很高大上? 其实最基础的实现原理, 用 Python 实现只需要几行…

Java JDK下载安装环境变量配置

目录 一、下载安装 1.简介 2.JDK下载JDK 官网海外历史地址: 3.安装 二、环境变量配置 1.新建JAVA_HOME变量 2.PATH变量 3.CLASSPATH 变量 4.测试是否安装成功 一、下载安装 1.简介 JDK 是SUN公司提供的一套Java 语言的软件开发工具包,简称JDK(JavaDevelo…

如何编写高质量代码

如何编写高质量代码 1. 前言2. 明确业务场景和用户需求3. 编程实践技巧3.1 提高命名规范3.2 保持代码简洁3.3 好的注释 4. 软件测试5. 总结 1. 前言 现代软件开发中,代码是构建高质量软件的核心。高质量代码能够提高软件系统的可靠性、可维护性和可扩展性&#xff…

给失业的互联网人一个思路:别再苦苦找工作了,要去找门槛低、现金流好、天花板低、资本看不上的创业项目,一年也能几百万!...

失业大潮中的互联网人该何去何从?这大概是许多人在难捱的深夜反复思考的问题。 一位失业很久的网友就在痛苦思索中悟出了适合自己的道路,下面分享给大家,篇幅太长,小编给大家划一下重点。 先说结论:失业的互联网人别再…

浅谈软件测试工程师的技能树

软件测试工程师是一个历史很悠久的职位,可以说从有软件开发这个行业以来,就开始有了软件测试工程师的角色。随着时代的发展,软件测试工程师的角色和职责也在悄然发生着变化,从一开始单纯的在瀑布式开发流程中担任测试阶段的执行者…

优思学院:什么是快速改善方法(Kaizen Blitz)?

什么是快速改善方法(Kaizen Blitz)? Kaizen blitz是精益管理中的一种方法,指通过集中一段时间内的团队努力来实现快速改进的方法。 Kaizen是一个日语词汇,意为“改善”,是一种广泛应用于企业管理的哲学&a…

明确自动化测试目的

明确自动化测试目的 1.提高测试人员的工作成就感和幸福感,减少手工测试中重复性的工作 目前,在大部分中小企业中,手工测试在日常测试工作占据的比例很大。测试人员必须跟随开发团队不断地进行选代式开发和测试。一个功能模块可能在整个测试周…

SEO机制算是让我玩明白了

获取当前时间时间戳,返回遵循ISO 8601扩展格式的日期 new Date(Date.now()).toISOString() 使用moment库转换回来 this.moment(new Date(Date.now()).toISOString()).format("YYYY-MM-DD") js去掉富文本中html标签和图片 filterHtmlTag(val) {if(!val){…

vue性能优化之虚拟列表滚动

一、前言 前端的性能瓶颈那就是页面的卡顿,当然这种页面的卡顿包含了多种原因。 例如HTTP请求过多导致数据加载变慢,下载的静态文件非常大导致页面加载时间很长,js中一些算法响应的时间过长等。很多前端工程师都花费很多的精力在dom渲染上来…

Docker概念|容器|镜像|命令详细(创建,删除,修改,添加)

Docker概念|容器|镜像|命令详细(创建,删除,修改,添加) 一,Docker简介二,Docker与虚拟机的区别三,容器核心技术四,Docker核心概念五 docker的安装5.1关闭防火墙,关闭文件防…

python毕业设计之django+vue.js幼儿园网站系统

开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 采用了Windows10操作系统平台,使用HTMLCSSJS前端模板django作为后台监控&#xff0…

【VM服务管家】VM4.x算子SDK开发_3.2 公用工具类

目录 3.2.1 图像载入:本地图像的载入方法3.2.2 相机取流:相机SDK取流的方法3.2.3 输入图像:给算子模块输入图像数据的方法3.2.4 实时取流:实时取流的实现方法3.2.5 卡尺ROI:卡尺型ROI的生成方法3.2.6 DL算子耗时&#…

ref在Vue2、Vue3中的使用

文章目录 前言一、ref在Vue2中的用法二、ref在Vue3中的用法 前言 记录一下ref在Vue2与Vue3中的使用,ref可以获取DOM元素,也可以获取子组件的数据、方法。 一、ref在Vue2中的用法 给元素绑定一个ref,然后在js中通过this.$refs获取DOM。 ref命…

从大厂到创业公司,管理上需要怎样转变?

你好,我是舒超。 我职业生涯过去十年的上半段在腾讯负责微博微群、消息流广告、视频评论等社交型的业务系统,下半段在美团基础架构负责云原生基础设施的演进工作,现在星汉未来担任CTO,负责公司产研推进工作。加入星汉未来的时间点…

带你搞懂人工智能、机器学习和深度学习!

不少高校的小伙伴找我聊入门人工智能该怎么起步,如何快速入门,多长时间能成长为中高级工程师(聊下来感觉大多数学生党就是焦虑,毕业即失业,尤其现在就业环境这么差),但聊到最后,很多…

MongoDB【索引-index】

目录 1:概述 2:索引的类型 2.1:单字段索引 2.2:复合索引 2.3:其他索引 3:索引的管理操作 3.1:索引的查看 3.2:索引的创建 3.3:索引的移除 4:索引的…