1、前言
目前網(wǎng)上的fpga實現(xiàn)udp基本生態(tài)如下:
1:verilog編寫的udp收發(fā)器,但不帶ping功能,這樣的代碼功能正常也能用,但不帶ping功能基本就是廢物,在實際項目中不會用這樣的代碼,試想,多機互聯(lián),出現(xiàn)了問題,你的網(wǎng)卡都不帶ping功能,連基本的問題排查機制都不具備,這樣的代碼誰敢用?
2:帶ping功能的udp收發(fā)器,代碼優(yōu)秀也好用,但基本不開源,不會提供源碼給你,這樣的代碼也有不足,那就是出了問題不知道怎么排查,畢竟你沒有源碼,無可奈何;
3:使用了Xilinx的三速網(wǎng)IP實現(xiàn),這樣的代碼也很優(yōu)秀,但還是那個問題,沒有源碼,且三速網(wǎng)IP需要licence,官方提供的licence有效期只有120天,其實三速網(wǎng)IP僅僅實現(xiàn)了rgmii到gmii再到axis的轉(zhuǎn)換,完全可以不用這個ip;
本設(shè)計使用的UDP方案使用Micrel公司的KSZ9031RNX作為網(wǎng)絡(luò)PHY芯片,使用verilog代碼設(shè)計UDP協(xié)議,并帶有用戶接口,使得用戶無需關(guān)心復(fù)雜的UDP協(xié)議而只需關(guān)心簡單的用戶接口時序即可操作UDP收發(fā),非常簡單;
本設(shè)計使用UDP傳輸FPGA采集的AD7606數(shù)據(jù),上位機通過接收網(wǎng)口的 UDP 數(shù)據(jù)包,將AD7606的波形數(shù)據(jù)數(shù)據(jù)顯示在電腦上。我們可以用更加直觀的方式觀察波形,是一個數(shù)字示波器雛形,并且可以保存 ADC 數(shù)據(jù)。
2、我這里已有的UDP方案
目前我這里有如下幾種UDP方案和應(yīng)用實例:
我的博客主頁有個FPGA以太網(wǎng)通信專欄,專欄是免費的,里面有很多FPGA實現(xiàn)的UDP應(yīng)用,對網(wǎng)絡(luò)通信有需求的兄弟可以去看看:直接點擊前往
3、AD7606采集詳解
AD7606輸出有串行和并行兩種模式,要想玩兒轉(zhuǎn)AD7606,首先要讀懂?dāng)?shù)據(jù)手冊,基于數(shù)據(jù)手冊設(shè)計接口時許,我這里既有串行模式也有并行模式的采集,之前已經(jīng)寫過一篇文章詳細(xì)講解了,兄弟們可以先回頭看看我那篇文章,打打基礎(chǔ):直接點擊前往
4、UDP設(shè)計方案
本實驗以千兆以太網(wǎng) RGMII 通信為例來設(shè)計 verilog 程序,UDP分為兩部分,分別為發(fā)送和接收,實現(xiàn)了 動態(tài)ARP,UDP,Ping 和10/100/1000M網(wǎng)速自動協(xié)商仲裁功能。以下為原理實現(xiàn)框圖:詳細(xì)的設(shè)計請參考我之前寫的文章:直接點擊前往
5、AD7606 UDP傳輸詳細(xì)設(shè)計方案
AD7606 UDP傳輸詳細(xì)設(shè)計方案如下:
用示波器產(chǎn)生一個正弦波作為輸入源給到AD7606,AD7606數(shù)據(jù)采集支持并行和串行模式,在工程代碼的頂層文件里做了整合,如下:
采集后的AD數(shù)據(jù)送DDR3緩存,這個數(shù)據(jù)緩存模塊不僅可以緩存AD數(shù)據(jù),還可以緩存圖像數(shù)據(jù),并做了4幀緩存模式,因為本設(shè)計主要介紹UDP的組包,所以數(shù)據(jù)緩存模塊不做過多介紹,感興趣的可以查看詳細(xì)的源碼。
UDP應(yīng)用的設(shè)計思路
UDP本身只是一種通信協(xié)議,用verilog實現(xiàn)并不難,他的精髓在于應(yīng)用,而UDP應(yīng)用的要點在于數(shù)據(jù)的組包與拆包,就本設(shè)計而言,F(xiàn)PGA作為發(fā)送者,需要將AD7606采集的數(shù)據(jù)進行組包,拆包是上位機軟件干的事兒。
注意!?。?br> 這里的組包指的是在以太網(wǎng)幀格式的UDP有效數(shù)據(jù)段人為的組包,并非UDP協(xié)議里固定的幀頭等信息的組包,這里的組包是為了兩個節(jié)點之間的收發(fā)對應(yīng)。。。
通信開始后,上位機會發(fā)送查詢命令給FPGA,F(xiàn)PGA則將本地網(wǎng)卡的基本信息和AD7606的數(shù)據(jù)信息發(fā)送給上位機,上位機得到FPGA網(wǎng)卡的信息后會選擇對應(yīng)的拆包和現(xiàn)實程序,F(xiàn)PGA會按照自己定義的UDP數(shù)據(jù)包向上位機發(fā)送數(shù)據(jù),這樣一來,一個簡單的UDP通信應(yīng)用就組件完成了。。。
本設(shè)計組包協(xié)議如下:
獲取FPGA網(wǎng)卡信息
詢問命令(共 5 字節(jié),由上位機通過以太網(wǎng)發(fā)送)
應(yīng)答命令(共 27 字節(jié),由開發(fā)板通過以太網(wǎng)發(fā)送)
代碼層面表現(xiàn)如下:(eth_cmd.v)
獲取數(shù)據(jù)
控制命令(由上位機發(fā)送數(shù)據(jù)請求)
每個 UDP 包都包含有 Header,在第一個字節(jié),其格式如下:
UDP發(fā)送數(shù)據(jù)組包
注意?。。?br> 注意?。。?br> 注意?。?!
這里是整個工程的重點,AD7606的數(shù)據(jù)就是以這個格式發(fā)送出去的:
代碼層面表現(xiàn)如下:(mac_ctrl.v)
UDP發(fā)送流程
首先在空閑狀態(tài),上位機會通過以太網(wǎng)廣播發(fā)送詢問命令,因此在 IP 層接收時要加上判斷是否是廣播 UDP 數(shù)據(jù),如果是,也接收數(shù)據(jù),此段代碼在 ip_rx.v 中,如下所示:
之后在 eth_cmd.v 文件中判斷接收到的數(shù)據(jù)信息,是否是詢問命令或控制命令,從而產(chǎn)生出
命令的應(yīng)答請求信號 cmd_reply_req,或請求數(shù)據(jù)的信號 ad_data_req。
eth_cmd.v 模塊頂層接口如下:
mac_ctrl.v 文件實現(xiàn)以太網(wǎng)的傳輸控制,在 IDLE 狀態(tài)下等待一定時間,進入 CMD_WAIT 狀態(tài),判斷是否有命令請求 cmd_reply_req 或數(shù)據(jù)請求 ad_data_req,之后進入 CHECK_ARP 狀態(tài),檢查對
應(yīng)的 IP 地址是否在緩存列表中,如果沒有,將發(fā)送 ARP 請求,等待應(yīng)答。之后根據(jù)命令請求或數(shù)據(jù)請求進入相應(yīng)的數(shù)據(jù)發(fā)送狀態(tài),CMD_SEND 或 AD_SEND 狀態(tài)。
mac_ctrl.v 模塊頂層接口如下:
上位機設(shè)置的緩存空間為 1M 字節(jié),請求數(shù)據(jù)間隔為 100ms,因此在設(shè)置采樣深度時要考慮到這兩點。在 eth_top.v 程序中設(shè)置為 32’h00008000,即 32K 字節(jié),采樣頻率為 200KHz,ADC 采樣端數(shù)據(jù)為兩個字節(jié)長度,因此采樣長度為采樣字節(jié)除以 2,即 32’h00004000,計算需要82ms 可采集完成。移除了 UDP 發(fā)送數(shù)據(jù)的檢驗和。
代碼層面表現(xiàn)如下:(eth_top.v)
6、vivado工程詳解
工程介紹:
開發(fā)板:Xilinx Artix7開發(fā)板;
開發(fā)環(huán)境:vivado2019.1;
網(wǎng)絡(luò)PHY:KSZ9031;
輸入:AD7606;
輸出:UDP-RJ45網(wǎng)口;
工程代碼架構(gòu)如下:
FPGA資源消耗和功耗預(yù)估如下:
7、上板調(diào)試驗證并演示
上位機軟件位置如下:
上位機未收到數(shù)據(jù)時如下:
用示波器產(chǎn)生一個5V的正弦波接入AD7606轉(zhuǎn)接板,上位機現(xiàn)實波形如下:
綠色框顯示發(fā)送板卡的 MAC 和 IP 地址;
復(fù)位:點擊復(fù)位可使波形顯示到初始狀態(tài);
垂直:“垂直“與“水平”切換,點擊此按鈕可進行水平垂直方向縮放的切換,在垂直狀態(tài)下,滾動鼠標(biāo)滾軸可進行垂直方向的縮放,水平狀態(tài)下,進行水平方向的縮放;
暫停:“暫?!芭c”繼續(xù)“切換,點擊暫停波形,可再點擊“繼續(xù)”顯示波形;
保存:保存 ADC 數(shù)據(jù)為 TXT 文檔,保存路徑在“路徑”按鈕處設(shè)置,默認(rèn)為軟件所在路徑;
數(shù)值:“數(shù)值”與“電壓”切換,Y 方向坐標(biāo)單位為原始值,即接收到的原始數(shù)據(jù)值,點擊“電壓”則顯示電壓值;
路徑:選擇保存路徑;
打開:打開已保存的 TXT 波形文件;文章來源:http://www.zghlxwxcb.cn/news/detail-423628.html
8、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤資料如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-423628.html
到了這里,關(guān)于FPGA采集AD7606數(shù)據(jù)UDP網(wǎng)絡(luò)傳輸 提供工程源碼和技術(shù)支持 附帶上位機接收軟件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!