FPGA采集AD7606数据UDP网络传输 提供工程源码和技术支持 附带上位机接收软件

news2025/1/19 23:26:15

目录

  • 1、前言
  • 2、我这里已有的UDP方案
  • 3、AD7606采集详解
  • 4、UDP设计方案
  • 5、AD7606 UDP传输详细设计方案
    • UDP应用的设计思路
    • 获取FPGA网卡信息
    • 获取数据
    • UDP发送数据组包
    • UDP发送流程
  • 6、vivado工程详解
  • 7、上板调试验证并演示
  • 8、福利:工程代码的获取

1、前言

目前网上的fpga实现udp基本生态如下:
1:verilog编写的udp收发器,但不带ping功能,这样的代码功能正常也能用,但不带ping功能基本就是废物,在实际项目中不会用这样的代码,试想,多机互联,出现了问题,你的网卡都不带ping功能,连基本的问题排查机制都不具备,这样的代码谁敢用?
2:带ping功能的udp收发器,代码优秀也好用,但基本不开源,不会提供源码给你,这样的代码也有不足,那就是出了问题不知道怎么排查,毕竟你没有源码,无可奈何;
3:使用了Xilinx的三速网IP实现,这样的代码也很优秀,但还是那个问题,没有源码,且三速网IP需要licence,官方提供的licence有效期只有120天,其实三速网IP仅仅实现了rgmii到gmii再到axis的转换,完全可以不用这个ip;
本设计使用的UDP方案使用Micrel公司的KSZ9031RNX作为网络PHY芯片,使用verilog代码设计UDP协议,并带有用户接口,使得用户无需关心复杂的UDP协议而只需关心简单的用户接口时序即可操作UDP收发,非常简单;

本设计使用UDP传输FPGA采集的AD7606数据,上位机通过接收网口的 UDP 数据包,将AD7606的波形数据数据显示在电脑上。我们可以用更加直观的方式观察波形,是一个数字示波器雏形,并且可以保存 ADC 数据。

2、我这里已有的UDP方案

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

3、AD7606采集详解

AD7606输出有串行和并行两种模式,要想玩儿转AD7606,首先要读懂数据手册,基于数据手册设计接口时许,我这里既有串行模式也有并行模式的采集,之前已经写过一篇文章详细讲解了,兄弟们可以先回头看看我那篇文章,打打基础:直接点击前往

4、UDP设计方案

本实验以千兆以太网 RGMII 通信为例来设计 verilog 程序,UDP分为两部分,分别为发送和接收,实现了 动态ARP,UDP,Ping 和10/100/1000M网速自动协商仲裁功能。以下为原理实现框图:详细的设计请参考我之前写的文章:直接点击前往

5、AD7606 UDP传输详细设计方案

AD7606 UDP传输详细设计方案如下:
在这里插入图片描述
用示波器产生一个正弦波作为输入源给到AD7606,AD7606数据采集支持并行和串行模式,在工程代码的顶层文件里做了整合,如下:
在这里插入图片描述
采集后的AD数据送DDR3缓存,这个数据缓存模块不仅可以缓存AD数据,还可以缓存图像数据,并做了4帧缓存模式,因为本设计主要介绍UDP的组包,所以数据缓存模块不做过多介绍,感兴趣的可以查看详细的源码。

UDP应用的设计思路

UDP本身只是一种通信协议,用verilog实现并不难,他的精髓在于应用,而UDP应用的要点在于数据的组包与拆包,就本设计而言,FPGA作为发送者,需要将AD7606采集的数据进行组包,拆包是上位机软件干的事儿。
注意!!!
这里的组包指的是在以太网帧格式的UDP有效数据段人为的组包,并非UDP协议里固定的帧头等信息的组包,这里的组包是为了两个节点之间的收发对应。。。
通信开始后,上位机会发送查询命令给FPGA,FPGA则将本地网卡的基本信息和AD7606的数据信息发送给上位机,上位机得到FPGA网卡的信息后会选择对应的拆包和现实程序,FPGA会按照自己定义的UDP数据包向上位机发送数据,这样一来,一个简单的UDP通信应用就组件完成了。。。
本设计组包协议如下:

获取FPGA网卡信息

询问命令(共 5 字节,由上位机通过以太网发送)
在这里插入图片描述
应答命令(共 27 字节,由开发板通过以太网发送)
在这里插入图片描述
代码层面表现如下:(eth_cmd.v)
在这里插入图片描述

获取数据

控制命令(由上位机发送数据请求)
在这里插入图片描述
每个 UDP 包都包含有 Header,在第一个字节,其格式如下:
在这里插入图片描述

UDP发送数据组包

注意!!!
注意!!!
注意!!!
这里是整个工程的重点,AD7606的数据就是以这个格式发送出去的:
在这里插入图片描述
代码层面表现如下:(mac_ctrl.v)
在这里插入图片描述

UDP发送流程

首先在空闲状态,上位机会通过以太网广播发送询问命令,因此在 IP 层接收时要加上判断是否是广播 UDP 数据,如果是,也接收数据,此段代码在 ip_rx.v 中,如下所示:
在这里插入图片描述
之后在 eth_cmd.v 文件中判断接收到的数据信息,是否是询问命令或控制命令,从而产生出
命令的应答请求信号 cmd_reply_req,或请求数据的信号 ad_data_req。
eth_cmd.v 模块顶层接口如下:
在这里插入图片描述
mac_ctrl.v 文件实现以太网的传输控制,在 IDLE 状态下等待一定时间,进入 CMD_WAIT 状态,判断是否有命令请求 cmd_reply_req 或数据请求 ad_data_req,之后进入 CHECK_ARP 状态,检查对
应的 IP 地址是否在缓存列表中,如果没有,将发送 ARP 请求,等待应答。之后根据命令请求或数据请求进入相应的数据发送状态,CMD_SEND 或 AD_SEND 状态。
mac_ctrl.v 模块顶层接口如下:
在这里插入图片描述
上位机设置的缓存空间为 1M 字节,请求数据间隔为 100ms,因此在设置采样深度时要考虑到这两点。在 eth_top.v 程序中设置为 32’h00008000,即 32K 字节,采样频率为 200KHz,ADC 采样端数据为两个字节长度,因此采样长度为采样字节除以 2,即 32’h00004000,计算需要82ms 可采集完成。移除了 UDP 发送数据的检验和。
代码层面表现如下:(eth_top.v)
在这里插入图片描述

6、vivado工程详解

工程介绍:
开发板:Xilinx Artix7开发板;
开发环境:vivado2019.1;
网络PHY:KSZ9031;
输入:AD7606;
输出:UDP-RJ45网口;
工程代码架构如下:
在这里插入图片描述
FPGA资源消耗和功耗预估如下:
在这里插入图片描述

7、上板调试验证并演示

上位机软件位置如下:
在这里插入图片描述
上位机未收到数据时如下:
在这里插入图片描述
用示波器产生一个5V的正弦波接入AD7606转接板,上位机现实波形如下:
在这里插入图片描述
绿色框显示发送板卡的 MAC 和 IP 地址;
复位:点击复位可使波形显示到初始状态;
垂直:“垂直“与“水平”切换,点击此按钮可进行水平垂直方向缩放的切换,在垂直状态下,滚动鼠标滚轴可进行垂直方向的缩放,水平状态下,进行水平方向的缩放;
暂停:“暂停“与”继续“切换,点击暂停波形,可再点击“继续”显示波形;
保存:保存 ADC 数据为 TXT 文档,保存路径在“路径”按钮处设置,默认为软件所在路径;
数值:“数值”与“电压”切换,Y 方向坐标单位为原始值,即接收到的原始数据值,点击“电压”则显示电压值;
路径:选择保存路径;
打开:打开已保存的 TXT 波形文件;

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

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

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

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

相关文章

如何将音频文件转换为MP3格式?

音频文件有很多种格式,如 WAV、FLAC、AAC 等,其中 MP3 是最为常见的一种格式,因为它具有压缩比高、音质损失少、兼容性强等优点,适合在各种设备上播放。如果你想将一个音频文件转换为 MP3 格式,可以采用以下几种方法&a…

实现mini智能助理—模型训练

背景 距离上篇打带你实现自己迷你chatgpt文章,到现在已经过去快两个月。自制mini chatgpt文章一直没有更新,原因有二:1.一直在找合适体量表现不错模型 2.公司内部太卷了,没太多时间好好梳理文章。这篇文章会给大家介绍一些大模型…

踩坑:IDEA中Junit、Test模块无法使用Scanner

今天在做作业,在一个测试功能需要输入数据,于是想起了Scanner,运行之后发现控制台无法输入。 然后打开我心爱的浏览器,开始搜索,网上很多关于“IDEA中Test模块无法使用Scanner”的解决方法,基本上都是修改I…

Pandas入门实践2 -数据处理

为了准备数据进行分析,我们需要执行数据处理。在本节中,我们将学习如何清理和重新格式化数据(例如,重命名列和修复数据类型不匹配)、对其进行重构/整形,以及对其进行丰富(例如,离散化…

rebar3安装-windows篇

rebar3是erlang的包管理工具,虽然不是官方出品,但它已经成为事实上的官方包管理工具了,github地址如下: https://github.com/erlang/rebar3 已经不难看出它的地位了。 rebar官网地址是http://rebar3.org/,上面有安装…

使用Socks5代理加强爬虫的网络安全

网络爬虫是获取互联网上数据的重要手段,但也会因为访问频率过高或其他不当行为,导致被网站封禁或IP被屏蔽。此时,使用代理服务器是解决这一问题的常用方法。本文介绍了Socks5代理的使用方式,以及如何将其应用到爬虫中,…

记录:解决with invalid types() or values()...问题【亲测有效】

👨‍🎓作者:bug菌✏️博客:CSDN、掘金、infoQ、51CTO等🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w,对一切…

红黑树(C++实现)

文章目录红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的查找红黑树的验证检测是否满足二叉搜索树检测是否满足红黑树的性质红黑树与AVL树的比较包含上述功能的红黑树代码红黑树的概念 红黑树,是一棵二叉搜索树,但在每一个结点上增加一个存储位表示结点的颜色,可…

《Netty》从零开始学netty源码(三十五)之DefaultChannelPromise

DefaultChannelPromise 在分析Unsafe或者ChannelPipeline的方法时经常出现Promise类,它用来保存channel的状态值,默认使用的是DefaultChannelPromise,接下来分析这个类。 类结构图 属性值 DefaultChannelPromise中有一个属性result&#xf…

Python之测试框架搭建【一】(毛坯框架)

前言一、框架基础(从最小步骤入手_毛坯框架) 1)首先我们自己建立一个项目,这个项目里面有testcases文件夹,testdatas文件夹2)在testdatas里面放测试数据3)建立一个main文件4)输出测试…

ASP.NET 记录 HttpRequest HttpResponse HttpServerUtility

纯属个人记录,会有错误 HttpRequest Browser是获取客户端浏览器的信息 Cookies是获取客户端的Cookies QueryString是获取客户端提交的数据 ServerVariables是获取服务器端或客户端的环境变量信息 Browser 语法格式: Request.Browser[“浏览器特性名”] 常见的特性名 名称说…

【grafana】使用多级变量解决Granfana模板变量中的大小限制

前言 最近对公司的Kafka 集群集成了 exporter prometheus granfana 服务,我们将 topic 变量抽象成模板变量,此时发现 granfana 变量有 10k 的个数限制。导致我们显示 topic 名称不全。 效果如下:全选后只有 10k 个变量。 解决 一番百度…

【Python】【进阶篇】二十二、Python爬虫的BS4解析库

目录二十二、Python爬虫的BS4解析库22.1 BS4下载安装22.2 BS4解析对象22.3 BS4常用语法1) Tag节点22.4 遍历节点22.5 find_all()与find()1) find_all()2) find()22.6 CSS选择器二十二、Python爬虫的BS4解析库 Beautiful Soup 简称 BS4(其中 4 表示版本号&#xff0…

C语言函数大全-- k 开头的函数

C语言函数大全 本篇介绍 C语言函数大全-- k 开头的函数 1. kcalloc 1.1 函数说明 函数声明函数功能void *kcalloc(size_t n, size_t size, gfp_t flags);它是 Linux 内核中的一个函数,用于在内核空间分配一块连续的指定大小的内存,它与标准库函数 ca…

RK3568平台开发系列讲解(设备驱动篇)内核空间与用户空间数据交互实验

🚀返回专栏总目录 文章目录 一、内核空间与用户空间二、用户空间和内核空间数据交换三、实验程序沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍对内核空间与用户空间的数据交换功能。 一、内核空间与用户空间 Linux 系统将可访问的内存空间分为了两个部…

指针的运算

在C语言中,指针是一个非常重要的概念。指针可以用来访问和修改内存中的数据,也可以用来进行指针的运算。在本篇博客中,我们将探讨指针的解引用、指针与整数的加减运算、同类型指针间的减法运算和指针的关系运算。 指针的解引用 在C语言中&a…

网络安全运维人员面临的痛点分析

1. 工作压力大:网络安全运维人员需要时刻关注系统的安全状况,发现并修复漏洞,保护系统免受攻击和数据泄露的风险。这需要他们不断学习新知识、掌握新技能,并且在短时间内快速响应和处理各种安全问题,这种高强度的工作压…

Arcgis小技巧【12】——ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的…

pr 是什么——可以做什么

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…

Boosting算法预测银行客户流失率

Boosting算法预测银行客户流失率 描述 为了防止银行的客户流失,通过数据分析,识别并可视化哪些因素导致了客户流失,并通过建立一个预测模型,识别客户是否会流失,流失的概率有多大。以便银行的客户服务部门更加有针对…