一、实验要求
本文基于AN108模块,将ADC采集的数据通过以太网传输到上位机。
二、任务分析
本实验的硬件设计部分及vitis均参照了ALINX FPGA ZYNQ Ultrascale+ MPSOC教程中实验 基于 AN9280模块的 ADC 采集以太网传输,其B站视频链接如下
【62】ALINX Zynq MPSoC XILINX FPGA视频教程 SDK 裸机开发—ADC以太网传输协议_哔哩哔哩_bilibili
首先AD9280模块进行AD转换的模拟信号来源,根据实验二ADDA测试的经验,本实验通过FPGA+DAC产生正弦波,通过同轴电缆自环将正弦波输入到AD9280模块进行AD转换。
然后,我们需要用zynq读取ADC数据,该过程涉及了PL与PS之间的数据交换,对于传输速度要求较高、数据量大、地址连续的场合,如高速AD/DA,可以通过 AXI DMA 来完成。通过在 PL 中添加 AXI DMA IP 核,并利用 AXI_HP 接口完 成高速的数据传输(ZYNQ 提供了两种 DMA,一种是集成在 PS 中的硬核 DMA,另一种是PL中使用的软核AXI DMA IP,关于DMA(Direct Memory Access,直接存储器访问)的具体内容计划另写一篇文章呈现,先挖个坑)
另外,由于ADC采集模块需要将ADC数据发送到DMA,AXI DMA IP 核的接口形式为AXIS接口,因此我们需要创建一个带有 AXI 接口的 IP 核来实现ADC数据的发送。
关于以太网传输方面,采用UDP将ADC采集的数据传输到上位机,因此采用了以下基于UDP传输的通信协议,该协议包含在UDP数据包中:
1、获取板卡信息
①询问命令(共5字节,由上位机通过以太网发送)
字节数 |
1 |
4 |
命令信息 |
Header |
0x00000000或0x00010001 |
②应答命令(共27字节,由开发板通过以太网发送)
字节数 |
命令信息 |
1 |
Header|0x01 |
4 |
0x00010001 |
6 |
板卡MAC地址 |
4 |
板卡IP地址 |
1 |
符号位 0x00:无符号数 0x01 有符号数此功能无效,上位机要求无符号数 |
1 |
ADC有效数据长度,如AD9280为8位,即ADC_BITS=8 |
1 |
采集一次ADC的字节数,此功能无效,上位机要求数据位宽为两个字节 |
1 |
采样通道,此功能上位机未实现,本实验为单通道采样 |
4 |
采样率,即采样的频率,程序中设为32MHz |
4 |
缓存的ADC数据长度,单位为字节 |
2、获取数据
①、控制命令(共19字节,上位机发送数据请求)
字节数 |
命令信息 |
1 |
Header |
4 |
0x00010002 |
6 |
板卡MAC地址,确认是本地的MAC地址 |
4 |
采样通道(本功能未实现) |
4 |
采样次数(采集数据为8位,采样次数位缓存数据长度的一半) |
②、应答命