【紫光同創國產FPGA教程】【第二十五章】AD7606以太網傳輸


本原創教程由芯驛電子科技(上海)有限公司(ALINX)創作,版權歸本公司所有,如需轉載,需授權並注明出處()。

適用於板卡型號:

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波形文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM