FPGA纯verilog实现UDP协议栈,sgmii接口SFP光口收发,提供工程源码和技术支持
目录
- 1、前言
- 2、我这里已有的UDP方案
- 3、该UDP协议栈性能
- 4、详细设计方案
- SFP
- GMII AXIS接口模块
- AXIS FIFO
- UDP协议栈
- 1G/2.5G Ethernet PCS/PMA or SGMII
- 5、vivado工程详解
- 6、上板调试验证并演示
- 准备工作
- 查看ARP
- UDP数据回环测试
- 7、福利:工程代码的获取
1、前言
目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但中间的FIFO或者RAM等调用了IP,或者不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的Tri Mode Ethernet MAC三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,三速网IP实现了rgmii到gmii再到axis的转换;
4:使用FPGA的GTX资源利用SFP光口实现UDP,通信,这种方案不需要外接网络变压器即可完成;
5:真正意义上的verilog实现的UDP协议栈,真正意义上的verilog实现意思是UDP协议栈全部代码均使用verilog代码,不适用任何IP核,包括FIFO、RAM等,这样的UDP协议栈移植性很强,这样的协议栈在市面上也很少,几乎很难得到,而很设计就是这样的协议栈,呵呵。。。
本设计使用纯verilog实现的UDP协议栈实现UDP回环通信测试,UDP协议栈输出没有使用外挂的网络PHY,而是调用Xilinx的1G/2.5G Ethernet PCS/PMA or SGMII IP核实现了网络PHY的功能,速率,速率固定为为1G,该IP配置为SGMII输出接口,通过SFP光口实现UDP数据收发功能;UDP协议栈的用户接口为AXIS,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,将AXIS数据接口做简单的回环处理,即可完成自发自收的功能,并在电脑端使用网络调试助手进行UDP收发验证;
本设计经过反复大量测试稳定可靠,可在项目中直接移植使用,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字通信领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;
2、我这里已有的UDP方案
目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,对网络通信有需求的兄弟可以去看看:直接点击前往
3、该UDP协议栈性能
1:纯verilog实现,没有用到任何一个IP核;
2:移植性天花板,该协议栈可在Xilinx、Altera等各大FPGA型号之间任意移植,因为是没有任何IP,源语也有参数可选择;
3:适应性强,目前已在RTL8211、B50610、88E1518三款phy上成功测试,也可以用GT资源的SFP接口实现UDP协议的以太网通信;
4:时序收敛很到位;
5:动态ARP功能;
6:不带ping功能;
7:RGMII转GMII后由AXIS接口输出,完全可以替代Xilinx的Tri Mode Ethernet MAC IP核;
8:最高支持1G速率;
4、详细设计方案
详细设计方案如下:

SFP
本设计无需外挂网络PHY,而是调用Xilinx的1G/2.5G Ethernet PCS/PMA or SGMII IP核实现了网络PHY的功能,所以外部接口为SFP光口,并将SFP的RX核TX对接实现数据回环;
GMII AXIS接口模块
GMII AXIS接口模块的代码架构如下:

该模块用于对接1G/2.5G Ethernet PCS/PMA or SGMII IP核的GMII接口,是UDP协议栈的对外接口,采用纯verilog代码实现,包括AXIS FIFO;
AXIS FIFO
由于使用到了AXIS 数据流,必然需要AXIS FIFO作为哥哥模块的桥接,一般的设计直接调用AXIS FIFO IP核,但本设计为了通用性和移植性,采用纯verilog代码实现,代码中的位置如下:

UDP协议栈
UDP协议栈采用纯verilog代码实现,代码架构如下:

协议栈由ARP、IP层、UDP层、AXIS FIFO几个模块组成,全部使用纯verilog代码实现,ARP层实现动态ARP功能,IP层、UDP层实现MAC数据帧的IP层和UDP层的数据解包和组包,这是UDP协议的核心操作,其本身并不复杂,就是根据UDP协议进行对应的数据解析和数据组包即可,使用几个状态机的事儿,很假单,这里就不细说了,AXIS FIFO的作用是将复杂的UDP协议封装为AXIS数据流格式作为用户接口供开发者使用,开发者甚至都不需要去理解里面的协议,就当它是一个AXIS的FIFO用就行了;
1G/2.5G Ethernet PCS/PMA or SGMII
本设计无需外挂网络PHY,而是调用Xilinx的1G/2.5G Ethernet PCS/PMA or SGMII IP核实现了网络PHY的功能,IP配置如下,此外IP还需配内部寄存器,分别如下,寄存器配置代码位于fpga.v文件:



5、vivado工程详解
开发板:Xilinx–>xc7k325tffg900-2;
开发环境:Vivado2019.1;
MAC:1G/2.5G Ethernet PCS/PMA or SGMII;
输入\输出:UDP 网络通信;
测试项:数据收发;
工程代码架构如下:

FPGA资源消耗和功耗预估如下;

6、上板调试验证并演示
准备工作
开发板连接如下,然后上电下载bit:

首先设置电脑端IP如下:

开发板的IP地址在代码中的设置如下,在fpga_core.v里,可以自由修改:

查看ARP
打开cmd,输入 arp -a查看电脑的arp缓存表,如下:

UDP数据回环测试
打开网络调试助手并配置,如下:

单次发送数据测试结果如下:

循环发送数据测试结果如下,1秒时间间隔循环:

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



相关文章:
FPGA纯verilog实现UDP协议栈,sgmii接口SFP光口收发,提供工程源码和技术支持
目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案SFPGMII AXIS接口模块AXIS FIFOUDP协议栈1G/2.5G Ethernet PCS/PMA or SGMII 5、vivado工程详解6、上板调试验证并演示准备工作查看ARPUDP数据回环测试 7、福利:工程代码的获取 1、前言 目前网…...
【Python入门系列】第十五篇:Python数据可视化和图表绘制
文章目录 前言一、可视化与绘图常用库二、Matplotlib1、折线图2、散点图3、柱状图: 三、Seaborn1、散点图2、箱线图3、小提琴图4、热力图 四、Plotly1、折线图2、散点图3、条形图 总结 前言 数据可视化是数据分析和数据科学中非常重要的一部分。通过可视化…...
isBlank函数和isEmpty函数的区别
StrUtil.isBlank(CharSequence):该方法用于判断字符串是否为空或仅包含空白字符。如果传入的字符串为null、空字符串(“”)或仅包含空白字符(如空格、制表符、换行符等),则返回true;否则返回false。 StrUtil.isEmpty(…...
「SQL面试题库」 No_121 The Most Recent Three Orders
🍅 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起,全员免费参与的SQL学习活动。我每天发布1道SQL面试真题,从简单到困难,涵盖所有SQL知识点,我敢保证只要做完这100道题,不仅能轻松搞定面试࿰…...
【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 7 日论文合集)
文章目录 一、检测相关(5篇)1.1 Contextual Affinity Distillation for Image Anomaly Detection1.2 Noise-to-Norm Reconstruction for Industrial Anomaly Detection and Localization1.3 MMNet: Multi-Collaboration and Multi-Supervision Network for Sequential Deepfake…...
直流运算放大器-----仪表放大器(三)
详见 模拟电子技术基础 6.4.1 电路图 计算公式 仿真 电流流向...
【Zookeeper】终端操作常用命令
文章目录 服务端常用命令客户端常用命令 zookeeper版本3.7.1 Zookeeper是一个开源的分布式协调服务。 Zookeeper是Apache软件基金会的一个项目,它提供了分布式应用程序协调的通用服务,如分布式同步、命名服务、集群维护等,以简化分布式应用协…...
leetcode 1110. 删点成林
给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成的集合)。 返回森林中的每棵树。你可以按任意顺序组织答案…...
华为Harmony应用开发初探
HarmonyOS是一款面向万物互联时代的、全新的分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体…...
电脑应用程序发生异常怎么办?
有时候我们打开电脑上面的某个软件时,会打不开,并且会弹出如下的错误提示“应用程序发生异常 未知的软件异常(xxx),位置为xx”。相信大多数的人在使用电脑的时…...
【JAVA】准备工作------Java开发环境搭建,IDEA的基础设置与操作
🍉内容专栏:【JAVA】 🍉本文脉络:JAVA的准备工作,IDEA的安装以及基础设置和快捷操作 🍉本文作者:Melon西西 🍉发布时间 :2023.7.11 目录 1. 概述JDK、JRE 2. 第一个程序——创建…...
操作系统真象还原——第5章 保护模式进阶,向内核迈进
第5章 保护模式进阶,向内核迈进 BIOS中断利用0x15子功能0xe802获取内存 汇编语言子功能的调用 填写调用前相关寄存器进行int中断调用获取返回结果输出到对应寄存器的值 80286 拥有24 位地址线,其寻址空间是16MB 。有一些ISA 只使用15MB,剩下…...
设计一款助听器可能需要用到以下音频算法
设计一款助听器可能需要用到以下音频算法: 1 响度补偿算法:助听器可能需要根据用户的听力损失情况调整不同频率范围内的增益,以提供个性化的听力补偿。这可以通过基于用户配置或自适应算法的频率响应调整来实现。 2 噪声抑制:用于…...
【端午节】用Vue3写粽子——从零开始
前言 在端午节即将到来之际,我们来一起写一个粽子组件来庆祝这个传统节日。 准备工作 首先,我们需要安装Vue3及其相关依赖,这里使用Vue CLI来创建项目。 # 安装Vue CLI npm install -g vue/cli # 创建Vue3项目 vue create zongzi接下来&a…...
大象机器人人工智能套装2023版深度学习协作机器人、先进机器视觉与应用场景
引言: 介绍当前的版本 今天我们要介绍的是aikit2023,aikit2023是aikit的全新升级版。 AIkit 2023 是一套集视觉,定位抓取、自动分拣模块为一体的入门级人工智能套装。 该套装基于python平台,可通过开发软件实现机械臂的控制&am…...
Cesium Token申请
一、什么是Cesium ion? Cesium ion是一个提供瓦片图和3D地理空间数据的平台,支持把数据添加到用户自己的应用程序中。 二、为什么需要access token? 使用Cesium ion需要申请access token,当用户将数据添加到自己的账户后,便可以…...
ubuntu系统自带的Text Editor编辑器不高亮解决办法
平时在写launch文件时,我喜欢用ubuntu系统自带的text编辑器,但发现使用text打开launch 文件时,没有高亮功能了,如下图所示: 解决办法非常简单,因为launch和xml文件语法规则类似,只需将text编辑…...
Docker NGINX 加载Geoip模板
前提环境: Docker 环境 涉及参考文档: ngx_http_geoip_module 模块Loki NGINX Service MeshGeoIP IP库 一、下载GeoIP IP库 二、配置Nginx主配置文件 vim /data/nginx/MangoMoh/dos/nginx.confuser nginx; worker_processes auto;error_log /var…...
springboot基于协同过滤算法商品推荐系统
开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器&…...
基于机器学习算法:朴素贝叶斯和SVM 分类-垃圾邮件识别分类系统(含Python工程全源码)
目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境安装pytesseract注册百度云账号 模块实现1. 数据模块2. 模型构建3. 附加功能 系统测试1. 文字邮件测试准确率2. 网页测试结果 工程源代码下载其它资料下载 前言 本项目采用朴素贝叶斯和支持向量机(S…...
AQM0802字符LCD轻量驱动库:裸机printf级显示方案
1. 项目概述AQM0802 是一款由旭化成(AKM)推出的超低功耗、单色字符型液晶显示模块,采用 COG(Chip-on-Glass)封装工艺,内置 KS0066 兼容控制器。其典型型号为 AQM0802A-YBW,具备 8 字符 2 行的显…...
WebPages 发布
WebPages 发布 引言 随着互联网技术的飞速发展,Web技术已经成为现代信息社会不可或缺的一部分。WebPages作为Web技术的重要应用,旨在为用户提供高效、便捷的网页浏览体验。本文将详细介绍WebPages的发布过程,包括技术选型、功能设计、性能优化以及用户体验等方面。 技术选…...
Libre Barcode:终极免费条码字体解决方案,让条码生成变得简单高效
Libre Barcode:终极免费条码字体解决方案,让条码生成变得简单高效 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode Libre Barcode 是一个…...
RT-Thread下STM32与BH1750光照传感器的快速驱动实现
1. RT-Thread与BH1750的完美组合 第一次接触BH1750光照传感器时,我还在用裸机开发。当时为了调试IIC通讯,整整花了两天时间排查时序问题。后来接触到RT-Thread,发现它的软件包生态简直是为传感器开发量身定制的。就拿BH1750来说,官…...
企业内网必看:用U盘搞定Ubuntu服务器Docker离线部署(含依赖树分析)
企业级Ubuntu服务器Docker离线部署全指南:从依赖分析到实战落地 在金融、医疗等对网络安全要求极高的行业,服务器往往部署在物理隔离的内网环境中。这种封闭式架构虽然最大程度降低了外部攻击风险,却给软件部署带来了独特挑战——如何在没有互…...
Go语言中的Interface:面向接口编程
Go语言中的Interface:面向接口编程 1. Interface的基本概念 Interface是Go语言中用于定义行为的一种类型,它指定了一组方法签名,但不提供具体实现。Interface是Go语言实现多态和解耦的核心机制,也是面向接口编程的基础。 Go语言的…...
C++程序崩溃别慌!手把手教你用backward-cpp+glog捕获并记录堆栈信息(附完整CMake配置)
C程序崩溃别慌!手把手教你用backward-cppglog捕获并记录堆栈信息(附完整CMake配置) 深夜两点,服务器告警突然响起。你揉着惺忪的睡眼查看日志,只看到一行冰冷的"Segmentation fault"——没有调用栈…...
基于Phi-3-mini-128k-instruct构建运维智能助手:Linux命令分析与故障排查
基于Phi-3-mini-128k-instruct构建运维智能助手:Linux命令分析与故障排查 1. 引言 想象一下这个场景:凌晨两点,服务器监控告警突然响起,CPU使用率飙升到90%,内存也快见底。你睡眼惺忪地登录服务器,面对满…...
MiniCPM-o-4.5-nvidia-FlagOS跨平台部署:Windows系统配置要点
MiniCPM-o-4.5-nvidia-FlagOS跨平台部署:Windows系统配置要点 想在自己的Windows电脑上跑起来最新的MiniCPM-o-4.5-nvidia-FlagOS,结果被一堆环境问题卡住了?别急,这太正常了。很多朋友在Windows上部署这类AI项目时,总…...
洛雪音乐音源项目终极指南:如何免费获取全网高品质音乐资源
洛雪音乐音源项目终极指南:如何免费获取全网高品质音乐资源 【免费下载链接】lxmusic- lxmusic(洛雪音乐)全网最新最全音源 项目地址: https://gitcode.com/gh_mirrors/lx/lxmusic- 你是否曾为寻找免费的高品质音乐资源而烦恼?或者厌倦了在多个音…...
