当前位置: 首页 > news >正文

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

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 紫光同创FPGA相关方案推荐
    • 我这里已有的以太网方案
    • 本方案在Xilinx系列FPGA的应用方案
  • 3、设计思路框架
    • 工程设计原理框图
    • AD输入源
    • AD7606数据采集
      • AD7606数据手册解读
      • AD7606输入信号采集范围
      • AD7606输出模式选择
      • AD7606过采样率设置
      • AD7606串行输出模式采集
      • AD7606并行输出模式采集
    • AD7606数据缓存控制模块
    • AD数据缓存架构
    • QT上位机与FPGA数据交互逻辑
    • FPGA 命令应答模块
    • FPGA AD数据应答模块
    • UDP协议栈
      • MAC层发送
      • MAC发送仲裁
      • ARP发送
      • IP层发送
      • IP发送仲裁
      • UDP发送
      • MAC层接收
      • ARP接收
      • IP层接收
      • UDP接收
    • RGMII互转GMII模块
    • PHY芯片
    • IP地址、端口号的修改
    • QT上位机
    • 工程源码架构
  • 4、PDS工程源码1详解
  • 5、上板调试验证并演示
    • 紫光同创FPGA实现AD7606数据采集转UDP网络传输效果演示
  • 6、福利:工程源码获取

紫光同创FPGA实现AD7606数据采集转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实现AD7606数据采集转UDP网络传输;输入源为示波器输出的AD正弦波,并通过线缆连接至AD7606模块实现AD转换;FPGA首先采集AD7606传来的AD数据,本设计支持串行和并行模式的AD7606出书模式。通过顶层参数配置,默认选择并行AD7606输出模式;然后选择第1通道的AD7606数据送入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正弦波,并通过线缆连接至AD7606模块实现AD转换;FPGA首先采集AD7606传来的AD数据,本设计支持串行和并行模式的AD7606出书模式。通过顶层参数配置,默认选择并行AD7606输出模式;然后选择第1通道的AD7606数据送入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实现AD7606数据采集转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模块;

AD7606数据采集

AD7606数据手册解读

AD7606英文原版数据手册只有37页,但真正看懂的兄弟却很少,下面解读一下这个手册:
DAQ7606 是 16 位 8 通道同步采样模数数据采集系统(DAS)。
AD7606内置模拟输入箝位保护、二阶抗混叠滤波器、跟踪保持放大器、16位电荷再分配逐次逼近型ADC、灵活的数字滤波器、2.5V基准电压源、基准电压缓冲以及高速串行和并行接口。AD7606采用5V单电源供电,可以处理±10V 和±5V 真双极性输入信号,同时所有通道均能以高达200 KSPS的吞吐速率采样。输入箝位保护电路可以耐受最高达±16.5V 的电压。无论以何种采样频率工作,AD7606的模拟输入阻抗均为1 MΩ。它采用单电源工作方式,具有片内滤波和高输入阻抗,因此无需驱动运算放大器和外部双极性电源。AD7606抗混叠滤波器的3 dB截止频率为22 kHz;当采样速率为200 KSPS时,它具有40 dB抗混叠抑制特性。灵活的数字滤波器采用引脚驱动,可以改善信噪比(SNR),并降低3 dB带宽。
写了这么多你看懂了吗?
我猜你应该是云里雾里,下面举例说人话,让你听得懂:
AD7606芯片框图如下:
在这里插入图片描述
红线即是信号输出输出的数据通路;

AD7606输入信号采集范围

AD7606可以处理±10V 和±5V 真双极性输入信号,即输入信号可以是±10V 和±5V,由RANGE引脚上下拉决定;
下拉处理±5V 信号;
上拉处理±10V 信号;
一旦选择了输入信号范围,就别乱给信号源了,否则烧板子了。。。
原文如下:
在这里插入图片描述

AD7606输出模式选择

红线以通道1为例:
输入数据位单端模拟数据,进过复杂的转换后可输出串行数字信号或者并行数据信号;
如果你的板子设计引脚资源有限,则选择串行输出;串行输出的优点是节约IO,缺点是采集时序复杂些;
如果你的板子设计引脚足够多,则选择并行输出,并行输出数据线占用16个IO口,并行输出的优点是采集时序简单,缺点是费IO;可自行选择;
输出模式选择通过PAR/SER/BYTE SEL引脚的上下拉决定;
上拉选择串行输出;
下拉选择并行输出;
具体的时序细节放在后面的章节;
原文如下:
在这里插入图片描述

AD7606过采样率设置

过采样率设置由OS的三个引脚上下拉决定,可以固定用电阻上下拉,这种模式就定死了,除非飞线,也可以用FPGA引脚给高低电平配置,具体配置模式如下图:
在这里插入图片描述
作为FPGA开发者,需要知道这些就行了,具体的时序细节放在后面的章节;

AD7606串行输出模式采集

AD7606串行输出模式采集模块顶层接口如下:
在这里插入图片描述
AD7606串行采集时钟的范围要求如下:
在这里插入图片描述
这里我们选择16.666MHz时钟,不高也不低;
系统参考时钟选择100M,那个1个时钟周期就是1000÷100=10ns;
采集时钟是16.666M,那个1个时钟周期就是1000÷16.666=60ns;
记住这两个时钟周期,很重要;
串行输出流程时序图如下:
在这里插入图片描述
这张图采用边转换边读取的方式,还有转换完成后再读取的方式,既然可以边转换边读取,为何还要等转换完成后再读取呢?所以我们直接用这种方式。
并行采集使用的则是转换完成后再读取的方式。
第一步:拉高RESET引脚至少至少50ns,数据手册规定如下:
在这里插入图片描述
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns),注意这里是最多,所以在代码里只需一个参考时钟周期足以,比如你用的100M,一个参考时钟周期就是10ns,当然,CONVSTA和CONVSTB也可同时拉低,这样就是8个通道同时采集,时间由数据手册得知,如下:
在这里插入图片描述
CONVSTA开启V1-V4通道的转换;
CONVSTB开启V5-V8通道的转换;
原文如下:
在这里插入图片描述
第三步:等待BUSY为高后,拉低CS,这个BUSY是AD7606输出给用户的,表征AD转换正在进行,他有一个最大时间,我们一定要满足他的最大时间,不然人家还没转换完你就结束采集了,岂不唧唧了;那么,CS在什么时刻拉低呢?既然前面我们已经选择了边转换边读取的方式,所以在BUSY拉高的期间CS拉低,数据手册最大推荐4.15us,代码里直接设置5ms,由数据手册得知,如下:
在这里插入图片描述
流程看完了,来看具体的采集时序:
在这里插入图片描述
采集时序如下:
首先用户拉低CS,并给出SCLK到AD7606,AD7606在CS为低期间,在SCLK的上升沿输出数据(但根据时序图,我感觉是SCLK高电平期间输出的),一个通道一次转换后输出16位采样数据;
既然AD7606是在SCLK上升沿输出,那么FPGA就应该在SCLK下降沿采集(或者低电平采集);
AD7606有8个模拟输入通道,串行输出模式下只有两个数字输出通道,每个输入通道输出16位采样数据;
DOUTA对应CH1、CH2、CH3、CH4四个输出通道;
DOUTB对应CH5、CH6、CH7、CH8四个输出通道;
因为每个输入通道输出16位采样数据,需要16个SCLK周期,所以4个输入通道输出16位采样数据,需要64个SCLK周期;那个我们需要一个计数器,计数到64时输出64位的采集数据,呢么采集到的每个通道数据对应如下:
wire [15:0] ad_ch1 = ad_out_a[63:48];
wire [15:0] ad_ch2 = ad_out_a[47:32];
wire [15:0] ad_ch3 = ad_out_a[31:16];
wire [15:0] ad_ch4 = ad_out_a[15: 0];
wire [15:0] ad_ch5 = ad_out_b[63:48];
wire [15:0] ad_ch6 = ad_out_b[47:32];
wire [15:0] ad_ch7 = ad_out_b[31:16];
wire [15:0] ad_ch8 = ad_out_b[15: 0];

AD7606并行输出模式采集

AD760并行输出模式采集模块顶层接口如下:
在这里插入图片描述
并行采集时序,由于官方画的图太繁琐,我直接重画了一个图来表示,如下:
在这里插入图片描述
第一步:拉高RESET引脚至少至少50ns,和串行采集一样;
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms(500ns),和串行采集一样;
第三步:等待转换完成再读取数据,即采用转换完成后再读取的方式;
第四步:拉低CS片选信号;
第五步:拉低RD信号,在RD和CS同时为低时即可依次读取V1-V8通道的数据;
相应的时间问题也是重要的,具体查看手册;

AD7606数据缓存控制模块

选择第1通道的AD7606数据送入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上位机已放在了资料包中,如下:
在这里插入图片描述

工程源码架构

工程源码架构如下:
在这里插入图片描述

4、PDS工程源码1详解

开发板FPGA型号:紫光同创–PG2L100H-6EBG676;
开发环境:Pango Design Suite 2021.1;
AD数据输入:AD7606,默认使用并行输出模式;
AD数据输出:以太网输出,千兆UDP协议;
PC端接收方案:QT上位机接收并显示AD波形;
以太网物理层方案:KSZ9031RNX芯片,延时模式,RGMII接口;
以太网MAC层方案:纯verilog实现的RGMII互转GMII方案;
以太网协议层方案:千兆网版本的UDP协议栈,纯verilog实现;
网口数量:1个网口,即1个FPGA工程里运行1个UDP协议栈;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握紫光同创FPGA实现AD7606数据采集转UDP网络传输的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、上板调试验证并演示

需要准备的器材如下:
FPGA开发板,没有开发板可以找本博提供;
示波器或者其他ADC输入源;
AD7606模块;
网线;
电脑主机;
我的开发板了连接如下:
在这里插入图片描述
然后将电脑端IP地址设置为如下:
在这里插入图片描述
然后下载bit或者固化bin文件,即可开始测试;

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

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

AD-UDP

6、福利:工程源码获取

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

相关文章:

  • 基于C#+SQL Server开发(WinForm)租房管理系统
  • (2)python开发经验
  • 【React中函数组件和类组件区别】
  • 无需翻墙!3D 优质前端模板分享
  • el-select 结合 el-tree:树形下拉数据
  • AI 检测原创论文:技术迷思与教育本质的悖论思考
  • 部署安装git-2.49.0.tar.xz
  • Profibus DP主站转Modbus RTU/TCP如何把E+H流量计接入到modbus
  • BGP联邦实验
  • 【deekseek】TCP Offload Engine
  • Ozon平台产品关键词优化指南:精准引流与转化提升实战策略
  • 一文辨析Java基本数据类型与包装类
  • Oracle OCP认证考试考点详解083系列15
  • 【Redis】RedLock实现原理
  • Android Native 之 自定义进程
  • C++修炼:继承
  • 【HT周赛】T3.二维平面 题解(分块:矩形chkmax,求矩形和)
  • Springboot | 如何上传文件
  • 算法专题六: 模拟
  • 本地缓存的三种实现
  • 颜福庆与顾临的争论:1930年代在中国维持一家医学院要花多少钱
  • 最高降九成!特朗普签署降药价行政令落地存疑,多家跨国药企股价收涨
  • 中国恒大:清盘人向香港高等法院申请撤回股份转让
  • 总没胃口,一吃就饱……别羡慕,也可能是生病了
  • 左娅︱悼陈昊
  • 听企业聊感受,《外企聊营商》5月13日起推出