紫光同创FPGA实现AD9280数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机

目录

紫光同创FPGA实现AD9280数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机

1、前言

国产FPGA现状:

"苟利国家生死以,岂因祸福避趋之!"大洋彼岸的我优秀地下档员,敏锐地洞察到祖国的短板在于先进制程半导体的制造领域,于是本着为中华民族伟大复兴的中国梦贡献绵薄之力的初心,懂先生站在高略高度和长远角度谋划,宁愿背当代一世之骂名也要为祖国千秋万世谋,2018年7月,懂先生正式打响毛衣战,随后又使出恰勃纸战术,旨在为祖国先进制程半导体领域做出自主可控的战略推动;2019年初我刚出道时,还是Xilinx遥遥领先的时代(现在貌似也是),那时的国产FPGA还处于黑铁段位;然而才短短7年,如今的国产FPGA属于百家争鸣、百花齐放、八仙过海、神仙打架、方兴未艾、得陇望蜀、友商都是XX的喜极而泣之局面,此情此景,不得不吟唱老人家的诗句:魏武挥鞭,东临碣石有遗篇,萧瑟秋风今又是,换了人间。。。

目前对于国产FPGA优势有以下几点:

1:性价比高,与同级别国外大厂芯片相比,价格相差几倍甚至十几倍;

2:自主可控,国产FPGA拥有完整自主知识产权的产业链,从芯片到相关EDA工具;

3:响应迅速,FAE技术支持比较到位,及时解决开发过程中遇到的问题,毕竟中文数据手册;

4:采购方便,产业链自主可控,采购便捷;

FPGA实现UDP网络通信现状:

FPGA实现UDP网络通信主要有两种方案,其一是使用PHY芯片实现物理层功能,比如常见的RTL8211、B50610等芯片,UDP协议栈部分很简单,可使用verilog代码直接实现;其二是使用Xilinx系列的IP核实现物理层功能,比如常见的1G/2.5G Ethernet PCS/PMA or SGMII、AXI 1G/2.5G Ethernet Subsystem、10G/25G Ethernet Subsystem、10G Ethernet Subsystem等,UDP协议栈部分很简单,可使用verilog代码直接实现;本设计使用PHY芯片方案实现物理层功能;

工程概述

本文使用紫光同创PG2L100H系列FPGA实现AD9280数据采集转UDP网络传输;输入源为示波器输出的AD正弦波,并通过线缆连接至AD9280模块实现AD转换;FPGA首先采集AD9280传来的AD数据;然后将AD9280数据送入AD数据缓存控制模块,产生AD缓存的控制信号;然后AD数据送入纯verilog实现的数据缓存模块,将AD数据融入板载DDR3中缓存;然后AD数据从DDR3中读出后,送入AD数据组包模块,将AD数据按照QT上位机接收要求进行组包;然后送入纯verilog实现的UDP协议栈,实现AD数据的以太网封装;然后以太网数据送入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换;然后数据进入板载PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端;最后电脑端QT上位机接收AD数据并显示波形;针对市场主流需求,本设计提供1套PDS工程源码,具体如下:

现对上述1套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为PG2L100H-6EBG676;输入源为示波器输出的AD正弦波,并通过线缆连接至AD9280模块实现AD转换;FPGA首先采集AD9280传来的AD数据;然后将采集的AD9280数据送入AD数据缓存控制模块,产生AD缓存的控制信号;然后AD数据送入纯verilog实现的数据缓存模块,将AD数据融入板载DDR3中缓存;然后AD数据从DDR3中读出后,送入AD数据组包模块,将AD数据按照QT上位机接收要求进行组包;QT上位机首先向FPGA开发板发送板卡信息查询指令,该指令以自定义UDP数据包形式发送,FPGA收到查询指令后,将自己的IP地址、MAC地址等信息打包成自定义的UDP包回复给QT上位机,至此,QT上位机与FPGA开发板建立了连接;然后QT上位机以100ms的频率向FPGA开发板发送请求AD数据指令,该指令以自定义UDP数据包形式发送,FPGA收到查询指令后,将缓存的AD数据从DDR3中读取,并打包成自定义的UDP包回复给QT上位机;然后数据进入纯verilog实现的RGMII互转GMII模块,实现单沿采集的GMII数据到双沿采集的RGMII数据转换,需要使用紫光的GTP_OSERDES_E2源语;然后数据进入板载KSZ9031RNX PHY芯片实现以太网物理层,输出差分信号,并通过网线发送到电脑端,KSZ9031RNX 工作于RGMII接口,延时模式;最后电脑端QT上位机接收AD数据并显示波形;该工程适用于紫光同创FPGA实现AD7606数据采集转UDP网络传输应用;

本博客描述了紫光同创FPGA实现AD9280数据采集转UDP网络传输的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;

提供完整的、跑通的工程源码和技术支持;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

紫光同创FPGA相关方案推荐

鉴于国产FPGA的优异表现和市场需求,我专门开设了一个人紫光同创FPGA专栏,里面收录了基于紫光同创FPGA的图像处理、UDP网络通信、GT高速接口、PCIE等博客,感兴趣的可以去看看,博客地址:点击直接前往

我这里已有的以太网方案

目前我这里有大量UDP协议的工程源码,包括UDP数据回环,视频传输,AD采集传输等,也有TCP协议的工程,还有RDMA的NIC 10G 25G 100G网卡工程源码,对网络通信有需求的兄弟可以去看看:
直接点击前往

其中千兆TCP协议的工程博客如下:
直接点击前往

本方案在Xilinx系列FPGA的应用方案

本方案在Xilinx系列FPGA上也有部署和应用,有这方面需求的用户可以参考本博之前的博客,博客链接如下:
点击直接前往

3、设计思路框架

工程设计原理框图

工程设计原理框图如下:

AD输入源

本设计使用示波器为AD输入源,示波器配置为AD正弦波,当然,你也可以使用其他ADC输入源;示波器通过BNC线缆连接至AD7606模块;

AD9280数据采集

AD9280芯片是由ADI公司推出的8位采样精度、最大采样率32MSPS、输入参考电压2.7~5.5V的ADC芯片,内部结构图如下图所示:

AD9280芯片操作不需要软件配置,给个时钟信号就工作,简单得很;其引脚图如下:

STBY引脚接高电平进入休眠模式,接低电平则一直工作;需要根据电路板功耗要求设计;这里重点将一下输入电压AIN;作为模拟输入,它可以配置为多种模式,分别由不同引脚得上下拉决定,具体看手册,说得很清楚,这里只将我这里的配置,参考了官方给的设计如下:

根据官方给的公式:

所以对于FPGA来说,其实是省去了配置AD9280和采集AD9280的环节,因为只要硬件设计完成,FPGA给AD9280一个参考时钟,AD9280就会连续的将ADC数据送入FPGA;

AD9280数据缓存控制模块

将采集到的AD9280数据送入AD数据缓存控制模块,产生AD缓存的控制信号;当AD数据采集到以后,经过此模块发起数据写入DDR3的控制信号,模块代码架构如下:

AD数据缓存架构

AD数据缓存架构实现的功能是将采集的AD数据缓存到板载DDR3中再读出送后续模块,目的是实现AD数据的随时读取,实现输入AD数据到输出AD数据的跨时钟域问题,更好的呈现显示效果;由于调用了紫光官方的HMIC_S IP核作为DDR控制器,所以AD数据缓存架构就是实现用户数据到HMIC_S的桥接作用;架构如下:

AD数据缓存架构由AD数据缓存帧更新模块+写AD数据控制逻辑+读AD数据控制逻辑+AXI4-FULL-Master总线模块组成;AXI4-FULL-Master总线模块实际上就是一个AXI4-FULL总线主设备,与HMIC_S IP核对接,HMIC_S IP核配置为AXI4-FULL接口;写AD数据控制逻辑、读AD数据控制逻辑实际上就是一个AD数据读写状态机,以写AD数据为例,假设一帧AD数据的大小为M,写AD数据控制逻辑每次写入一次突发传输的AD数据数据,记作Y,即每次向DDR3中写入Y个AD数据,写M÷Y次即可完成1帧AD数据的缓存,读AD数据与之一样;同时调用两个FIFO实现输入输出AD数据的跨时钟域处理,使得用户可以忽略AXI4内部代码,以简单地像使用FIFO那样操作AXI4总线,从而达到读写DDR的目的,进而实现AD数据缓存;AD数据缓存模块代码架构如下:

!!!注意

本设计使用的DDR3控制器IP版本为ips2l_hmic_s_v1_3,安装包以放在资料中,请用户自行安装,安装包目录如下:

QT上位机与FPGA数据交互逻辑

QT上位机与FPGA数据交互逻辑框图如下:

第一步:

QT上位机首先向FPGA开发板发送板卡信息查询指令,该指令以自定义UDP数据包形式发送,板卡信息查询指令的UDP数据包格式如下:

第二步:

FPGA收到查询指令后,将自己的IP地址、MAC地址等信息打包成自定义的UDP包回复给QT上位机,回复给QT上位机查询指令的UDP数据包格式如下:

至此,QT上位机与FPGA开发板建立了连接;

第三步:

然后QT上位机以100ms的频率向FPGA开发板发送请求AD数据指令,该指令以自定义UDP数据包形式发送,请求AD数据指令的UDP数据包格式如下:

第四步:

FPGA收到查询指令后,将缓存的AD数据从DDR3中读取,并打包成自定义的UDP包回复给QT上位机;回复AD数据的UDP数据包格式如下:

每个UDP包都包含有Header,在第一个字节,用于标志是板卡信息查询回复还是AD数据回复,其格式如下:

FPGA 命令应答模块

基于前面《QT上位机与FPGA数据交互逻辑》章节的描述,FPGA 命令应答模块就是实现第1步和第2步的功能,模块代码架构如下:

模块组建回复板卡信息数据包核心部分如下:

!!!注意

!!!注意

上位机设置的缓存空间为1M字节,请求数据间隔为100ms,因此在设置采样深度时要考虑到这两点,根据AD7606特性,在顶层模块中缓存空间设置为 32'h00008000,即 32K 字节,采样频率缓存空间为 200KHz,ADC采样端数据为2个字节长度,因此采样长度为采样字节除以2,即 32'h00004000,计算需要82ms可采集完成,如下:

FPGA AD数据应答模块

基于前面《QT上位机与FPGA数据交互逻辑》章节的描述,FPGA 命令应答模块就是实现第3步和第4步的功能,模块代码架构如下:

模块组建回复AD数据包核心部分如下:

UDP协议栈

UDP协议栈是以太网的协议层,由纯verilog代码实现,具有动态ARP、ICMP功能,占用逻辑资源少,性能不错,设计精简等特点,代码有详细中文注释,UDP协议栈设计架构如下:

UDP协议栈代码架构如下:

MAC层发送

发送部分中,mac_tx.v为MAC层发送模块,首先在SEND_START状态,等待mac_tx_ready信号,如果有效,表明IP或ARP的数据已经准备好,可以开始发送。再进入发送前导码状态,结束时发送mac_data_req,请求IP或ARP的数据,之后进入发送数据状态,最后进入发送CRC状态。在发送数据过程中,需要同时进行CRC校验。MAC层发送顶层接口如下:

MAC发送仲裁

工程中的mac_tx_mode.v为发送仲裁,根据发送模式是IP或ARP选择相应的信号与数据,MAC发送仲裁顶层接口如下:

ARP发送

发送部分中,arp_tx.v为ARP发送模块,在IDLE状态下,等待ARP发送请求或ARP应答请求信号,之后进入请求或应答等待状态,并通知MAC层,数据已经准备好,等待mac_data_req信号,之后进入请求或应答数据发送状态。由于数据不足46字节,需要补全46字节发送,ARP发送顶层接口如下:

IP层发送

在发送部分,ip_tx.v为IP层发送模块,在IDLE状态下,如果ip_tx_req有效,也就是UDP或ICMP发送请求信号,进入等待发送数据长度状态,之后进入产生校验和状态,校验和是将IP首部所有数据以16位相加,最后将进位再与低16位相加,直到进入为0,再将低16位取反,得出校验和结果。此程序中校验和以树型加法结构,并插入流水线,能有效降低加法部分的延迟,但缺点是会消耗较多逻辑资源。如下图 ABCD 四个输入,A与B相加结果为E,C与D相加结果为F,再将E与F相加结果为G,在每个相加结果之后都有寄存器。校验和设计框图如下:

在生成校验和之后,等待MAC层数据请求,开始发送数据,并在即将结束发送IP首部后请求UDP或ICMP数据。等发送完,进入 IDLE状态,IP层发送顶层接口如下:

IP发送仲裁

工程中的ip_tx_mode.v为发送仲裁,根据发送仲裁是UDP或ICMP选择相应的信号与数据。IP发送仲裁顶层接口如下:

UDP发送

发送部分中,udp_tx.v为UDP发送模块,第一步将数据写入UDP发送RAM,同时计算校验和,第二步将RAM中数据发送出去。UDP校验和与IP校验和计算方法一致。在计算时需要将伪首部加上,伪首部包括目的IP地址,源IP地址,网络类型,UDP数据长度,UDP发送顶层接口如下:

MAC层接收

在接收部分,其中mac_rx.v为mac层接收文件,首先在IDLE状态下需要判断rx_dv信号是否为高,在REC_PREAMBLE前导码状态下接收前导码。之后进入接收MAC头部状态,接收目的MAC地址、源MAC地址、类型,并将它们缓存起来,在此状态判断前导码是否正确,错误则进入REC_ERROR错误状态,在REC_IDENTIFY状态判断类型是IP(8'h0800)或ARP(8'h0806),然后进入接收数据状态,将数据传送到IP或ARP模块,等待IP或ARP数据接收完毕,再接收CRC数据,并在接收数据的过程中对接收的数据进行CRC处理,将结果与接收到的CRC数据进行对比,判断数据是否接收正确,正确则结束,错误则进入ERROR状态,MAC层接收顶层接口如下:

ARP接收

工程中的arp_rx.v为ARP接收模块,实现ARP数据接收,在IDLE状态下,接收到从MAC层发来的arp_rx_req信号,进入ARP接收状态,在此状态下,提取出目的MAC地址,源MAC地址,目的IP地址,源IP地址,并判断操作码OP是请求还是应答。如果是请求,则判断接收到的目的IP地址是否为本机地址,如果是,发送应答请求信号arp_reply_req,如果不是,则忽略。如果OP是应答,则判断接收到的目的IP地址及目的MAC地址是否与本机一致,如果是,则拉高arp_found 信号,表明接收到了对方的地址。并将对方的MAC地址及IP地址存入ARP缓存中。ARP接收顶层接口如下:

IP层接收

在工程中,ip_rx 为 IP层接收模块,实现IP层的数据接收,信息提取,并进行校验和检查。首先在IDLE状态下,判断从MA 层发过来的ip_rx_req信号,进入接收IP首部状态,先在REC_HEADER0提取出首部长度及IP总长度,进入REC_HEADER1状态,在此状态提取出目的IP地址、源IP地址、协议类型,根据协议类型发送udp_rx_req或icmp_rx_req。在接收首部的同时进行校验和的检查,将首部接收的所有数据相加,存入32位寄存器,再将高16位与低16位相加,直到高16位为0,再将低16位取反,判断其是否为0,如果是0,则检验正确,否则错误,进入IDLE状态,丢弃此帧数据,等待下次接收。IP层接收顶层接口如下:

UDP接收

在工程中,udp_rx.v为UDP接收模块,在此模块首先接收UDP首部,再接收数据部分,并将数据部分存入RAM 中,在接收的同时进行UDP校验和检查,如果UDP数据是奇数个字节,在计算校验和时,在最后一个字节后加上 8'h00,并进行校验和计算。校验方法与IP校验和一样,如果校验正确,将拉高udp_rec_data_valid 信号,表明接收的UDP数据有效,否则无效,等待下次接收。UDP接收顶层接口如下:

RGMII互转GMII模块

RGMII互转GMII模块由纯verilog实现;功能是实现双沿采集的RGMII数据互转单沿采集的GMII数据,需要使用紫光的GTP_ISERDES_E2和GTP_OSERDES_E2源语;模块代码架构如下:

其中的相位偏移时钟用于工作于延时模式的PHY芯片;

PHY芯片

本例程提供5套vivado工程源码,分别用到了RTL8211、KSZ9031、YT8531等市面上主流的PHY型号,通过这些型号PHY的使用,你将能学会其他型号PHY的使用,因为很多都是兼容的;此外,还提供了PHY的参考原理图,一并放在了资料包中;如下:

IP地址、端口号的修改

工程留出了IP地址、端口号的修改端口供用户自由修改,位置在顶层模块如下:

QT上位机

QT上位机用于接收并显示AD波形,界面如下:

下载程序到FPGA开发板后,连接网线至PC端,然后打开QT上位机可自动显示波形,绿色框显示FPGA开发板的MAC和IP地址;

复位:点击复位可使波形显示到初始状态;

垂直:"垂直"与"水平"切换,点击此按钮可进行水平垂直方向缩放的切换,在垂直状态下,滚动鼠标滚轴可进行垂直方向的缩放,水平状态下,进行水平方向的缩放;

暂停:"暂停"与"继续"切换,点击暂停波形,可再点击"继续"显示波形;

保存:保存ADC数据为TXT文档,保存路径在"路径"按钮处设置,默认为软件所在路径;

数值:"数值"与"电压"切换,Y方向坐标单位为原始值,即接收到的原始数据值,点击"电压"则显示电压值;

路径:选择保存路径;

打开:打开已保存的 TXT 波形文件;

QT上位机已放在了资料包中,如下:

!!!注意

!!!注意

QT上位机只做测试用,故只提供QT上位机可执行文件,不提供QT上位机源码;

工程源码架构

工程源码架构如下:

4、PDS工程源码1详解

开发板FPGA型号:紫光同创--PG2L100H-6EBG676;

开发环境:Pango Design Suite 2021.1;

AD数据输入:AD9280,32M采样率,8位采样精度;

AD数据输出:以太网输出,千兆UDP协议;

PC端接收方案:QT上位机接收并显示AD波形;

以太网物理层方案:KSZ9031RNX芯片,延时模式,RGMII接口;

以太网MAC层方案:纯verilog实现的RGMII互转GMII方案;

以太网协议层方案:千兆网版本的UDP协议栈,纯verilog实现;

网口数量:1个网口,即1个FPGA工程里运行1个UDP协议栈;

工程源码架构请参考前面第3章节中的《工程源码架构》小节;

工程作用:此工程目的是让读者掌握紫光同创FPGA实现AD9280数据采集转UDP网络传输的设计能力,以便能够移植和设计自己的项目;

工程的资源消耗和功耗如下:

5、上板调试验证并演示

需要准备的器材如下:

FPGA开发板,没有开发板可以找本博提供;

示波器或者其他ADC输入源;

AD7606模块;

网线;

电脑主机;

我的开发板了连接如下:

然后将电脑端IP地址设置为如下:

然后下载bit或者固化bin文件,即可开始测试;

紫光同创FPGA实现AD7606数据采集转UDP网络传输效果演示

紫光同创FPGA实现AD7606数据采集转UDP网络传输效果演示如下:

AD-UDP

相关推荐
国产化创客7 分钟前
OpenHarmony轻量系统--BearPi-Nano开发板网络程序测试
网络·物联网·harmonyos·国产化
靡樊20 分钟前
网络基础概念
linux·服务器·网络·c++·学习
君鼎21 分钟前
TCP/IP-——C++编程详解
网络·c++·tcp/ip
tiantianuser23 分钟前
NVMe简介1
fpga开发·nvme·可编程逻辑·verilogy
筑梦之月1 小时前
全流量解析:让安全防御从“被动挨打”升级为“主动狩猎”
网络·安全
FPGA_ADDA1 小时前
基于RFSOC ZU28DR+DSP 6U VPX处理板
fpga开发·dsp·rfsoc28dr·zu28dr·射频采集
Waitccy2 小时前
深度解析网闸策略:构建坚固的网络安全防线
网络·安全·web安全
蹦蹦跳跳真可爱5892 小时前
Python----神经网络(《Inverted Residuals and Linear Bottlenecks》论文概括和MobileNetV2网络)
网络·人工智能·python·深度学习·神经网络
像风一样自由20203 小时前
局部放电在线监测系统的数据传输协议选择研究:Modbus TCP 与 MQTT
网络·网络协议·tcp/ip
PHASELESS4113 小时前
TCP协议十大核心特性深度解析:构建可靠传输的基石
网络·网络协议·tcp/ip