本原创教程由芯驿电子科技(上海)有限公司(ALINX)创作,版权归本公司所有,如需转载,需授权并注明出处(http://www.alinx.com)。
适用于板卡型号:
PGL22G
1. 实验简介
本实验练习使用ADC的以太网传输,实验中使用的ADC模块型号为AN706,最大采样率200Khz,精度为16位。基于前面讲到的以太网实验,在本实验中把AN706的采集数据以千兆以太网方式传输到上位机软件,我们可以用更加直观的方式观察波形,是一个数字示波器雏形,并且可以保存ADC数据。
8路200K采样16位ADC模块实验预期结果
2. 实验原理
2.1 制定UDP包协议
为了体现上位机的灵活性,基于UDP传输,制定了以下通讯协议,此协议包含在UDP数据包中。
一、获取板卡信息
(1)询问命令(共5字节,由上位机通过以太网发送)
字节数 | 1 | 4 |
命令信息 | Header | 32’h00000000 或32’h00010001 |
(2)应答命令(共27字节,由开发板通过以太网发送)
字节数 | 命令信息 |
1 | Header|8’h01 |
4 | 32’h00010001 |
6 | 板卡MAC地址 |
4 | 板卡IP地址 |
1 | 符号位8’h00:无符号数 8’h01有符号数(设置无效,上位机要求为有符号数) |
1 | ADC有效数据长度,比如AD7606为16位,即8’d16 |
1 | 采集一次ADC的字节数(设置无效,上位机要求ADC数据位宽为两个字节) |
1 | 采样通道(此功能上位机未实现) |
4 | 采样率,即采样的频率,程序中设为200K |
4 | 缓存的ADC数据长度,单位为字节 |
二、获取数据
(1)控制命令(由上位机发送数据请求)
字节数 | 命令信息 |
1 | Header |
4 | 32’h00010002 |
6 | 板卡MAC地址,确认是本地的MAC地址 |
4 | 采样通道(此功能未实现) |
4 | 采样次数(采集数据为16位,采样次数为缓存数据长度的一半) |
(2)应答命令(由开发板发送)
字节数 | 命令信息 |
1 | Header|8’h01 |
4 | 32’h00010002 |
1024 | ADC数据 |
每个UDP包都包含有Header,在第一个字节,其格式如下:
比特位 | 值(0) | 值(1) |
bit 0 | 查询或控制 | 应答 |
bit1~bit7 | 随机数据 |
注:当应答时,高7位随机数据保持不变,bit0设置为1
2.2 程序实现
首先在空闲状态,上位机会通过以太网广播发送询问命令,因此在IP层接收时要加上判断是否是广播UDP数据,如果是,也接收数据,此段代码在ip_rx.v中,如下所示:
之后在eth_cmd.v文件中判断接收到的数据信息,是否是询问命令或控制命令,从而产生出命令的应答请求信号cmd_reply_req,或请求数据的信号ad_data_req。
信号名称 | 方向 | 宽度(bit) | 说明 |
clk | in | 1 | 系统时钟 |
rst_n | in | 1 | 异步复位,低电平复位 |
udp_rec_data_valid | in | 1 | UDP接收数据有效 |
udp_rec_ram_rdata | in | 8 | UDP接收到的数据 |
udp_rec_ram_read_addr | out | 11 | UDP接收数据RAM地址 |
udp_rec_data_length | in | 16 | UDP接收数据长度 |
udp_rd_en | in | 1 | UDP发送读使能信号 |
reply_data | out | 8 | 命令应答数据 |
local_ip_addr | in | 32 | 本地IP地址 |
local_mac_addr | in | 48 | 本地MAC地址 |
ch_sel | out | 32 | 通道选择(未使用) |
sample_num | out | 32 | 采样长度 |
header | out | 8 | 命令头 |
cmd_reply_ack | in | 1 | 命令应答响应 |
cmd_reply_req | out | 1 | 命令应答请求 |
cmd_send_len | out | 16 | 命令应答数据长度 |
ad_data_ack | in | 1 | ADC数据应答信号 |
ad_data_req | out | 1 | ADC数据请求信号 |
mac_ctrl.v文件实现以太网的传输控制,在IDLE状态下等待一定时间,进入CMD_WAIT状态,判断是否有命令请求cmd_reply_req或数据请求ad_data_req,之后进入CHECK_ARP状态,检查对应的IP地址是否在缓存列表中,如果没有,将发送ARP请求,等待应答。之后根据命令请求或数据请求进入相应的数据发送状态,CMD_SEND或AD_SEND状态。
信号名称 | 方向 | 宽度(bit) | 说明 |
clk | in | 1 | 系统时钟 |
rst_n | in | 1 | 异步复位,低电平复位 |
udp_send_data_length | out | 16 | UDP发送数据长度 |
ip_rec_source_ip_addr | in | 32 | UDP接收到的广播IP地址 |
destination_ip_addr | out | 32 | 目的IP地址 |
fifo_data | in | 16 | 从FIFO中读出的ADC数据 |
fifo_data_count | in | 11 | FIFO中可读数据数量 |
fifo_rd_en | out | 1 | FIFO读信号 |
udp_rd_en | in | 1 | UDP发送读请求信号 |
header | in | 8 | 命令头 |
sample_num | in | 32 | 采样长度 |
sample_len | out | 32 | 采样长度latch |
reply_data | in | 8 | 命令应答数据 |
cmd_reply_ack | out | 1 | 命令应答响应 |
cmd_reply_req | in | 1 | 命令应答请求 |
cmd_send_len | in | 16 | 命令应答数据长度 |
ad_data_ack | out | 1 | ADC数据应答信号 |
ad_data_req | in | 1 | ADC数据请求信号 |
ad_sample_req | out | 1 | ADC采集请求信号 |
ad_sample_ack | in | 1 | ADC采集应答信号 |
mac_send_end | in | 1 | MAC发送结束信号 |
mac_not_exist | in | 1 | IP对应MAC不存在 |
arp_found | in | 1 | 接收到MAC |
udp_tx_req | out | 1 | UDP发送请求 |
arp_request_req | out | 1 | ARP发送请求 |
udp_data | out | 8 | UDP发送数据 |
read_req_ack | in | 1 | 读FIFO应答 |
read_req | out | 1 | 读FIFO请求 |
identify_code | out | 16 | IP序列号 |
注意:上位机设置的缓存空间为1M字节,请求数据间隔为100ms,因此在设置采样深度时要考虑到这两点。在eth_top.v程序中设置为32'h00008000,即32K字节,采样频率为200KHz,ADC采样端数据为两个字节长度,因此采样长度为采样字节除以2,即32’h00004000,计算需要82ms可采集完成。移除了UDP发送数据的检验和。
2.3 实验现象
1)首先要确保PC的网卡速度为千兆,否则无法显示。在网络连接中找到本地以太网, 双击出现如下界面,千兆网络默认连接如下图:
如未出现如上所述界面,先确认是否是千兆网线连接的和网卡是否支持千兆,网卡判别则右键属性
点击配置,可看到网卡型号查下是否支持千兆。
在链接速度中,可以看到目前的链接状态是多大速度,可在下拉菜单中查找链接选项,务必确保链接速度为1.0Gbps 全双工,如果没有这个选项,说明网卡不支持千兆以太网。
2)将AN706模块插入开发板的扩展口J8,注意1脚对齐,不要插错、插偏,不能带电操作。不清楚连接的可参考“AD7606波形显示例程”的教程。
3)连接AN706的CH1输入到信号发生器的输出,AN706模块本身没有焊接SMA插头,本实验为了方便,自行焊接了一个SMA插头。
AN706连接信号源示意图
4)下载程序,调节信号发生的频率和幅度,AN706输入范围-5V-5V,因此幅度最大设置为10Vpp,为了便于观察波形数据,建议信号输入频率50hz到10Khz。打开示波器.exe即可自动显示波形。此实验不需要设置PC的IP地址,用千兆网线连接PC和开发板即可。
附:上位机软件说明
绿色框显示发送板卡的MAC和IP地址。
红色框中为控制按钮,功能如下:
复位:点击复位可使波形显示到初始状态,如下图
自动:没有用处
垂直:“垂直“与“水平”切换,点击此按钮可进行水平垂直方向缩放的切换,在垂直状态下,滚动鼠标滚轴可进行垂直方向的缩放,水平状态下,进行水平方向的缩放。
暂停:“暂停“与”继续“切换,点击暂停波形,可再点击“继续”显示波形。
保存:保存ADC数据为TXT文档,保存路径在“路径”按钮处设置,默认为软件所在路径。
数值:“数值”与“电压”切换,Y方向坐标单位为原始值,即接收到的原始数据值,点击“电压”则显示电压值。
路径:选择保存路径
打开:打开已保存的TXT波形文件