在龙哥发的基于 RJ45 的 RGMII 千兆以太网(verilog-ethernet)上进行修改,实现一个能简单的ad采集并udp发送的千兆以太网方案
先把龙哥给的程序跑通,我将程序进行了略微修改,发送的数据如下
第一个字节08
表示8通道,后面是8个通道的采集数据,由于还未接入AD7606模块,故先用12 34
代替,以20
作为分隔符
将AD7606模块加入项目中,并添加FIFO缓存与BCD转换电路,然后通过udp发送到上位机,上位机使用NetAssist软件接收并打印
ad信号为信号发生器产生的信号,通过连线接入MA703FA FPGA开发板中,然后输出为位于RJ45端口的rgmii信号,通过网线连接到上位机,然后上位机使用NetAssist软件接收
ad7606模块使用spi接口接收串行ad信号并转换为8通道16位信号,本demo只使用了一个通道(ch1)进行数据缓冲和传输
注:ad7606能采集的范围为-10V ~ 10V,但信号发生器产生电压的范围为-5V ~ 5V
fifo模块缓存采集到的16位ad信号
vol_cal模块将16位ad信号转换成8位符号位加上20位数值位,便于后面udp组包发送
最终udp发送时ad信号的格式为±x.xxxxV
,如+4.9998V
或 -1.0012V
eth_top为以太网发送模块,在龙哥给的程序上修改而成,功能为将ad信号组包并转换成rgmii信号然后发送
值得一提的是千兆以太网的速度远远快于ad7606的采样率(1Gbps vs 200k×16b),所以程序设计里远远没有将以太网的速度跑满,但如果更换采集芯片或以太网发送端口,即这两边的速率有变化,程序都要重新进行合理的设计来匹配双边的速度
本demo的数据接收使用上位机NetAssist,功能比较简陋也不太好用(软件缓冲区有限,千兆以太网跑满一点就容易导致软件卡死),将NetAssist收到的电压数据复制黏贴到excel中然后绘图展示采集到的波形信号
excel的数据处理与绘图如下图所示,下面展示波形信号,大概都是选用了421个数据点绘图
修改了组包条件,更改为 每采样一个数据就组装发送一个udp包,测试效果如下
本文章使用limfx的vscode插件快速发布