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的Tri Mode Ethernet MAC三速網(wǎng)IP實現(xiàn),這樣的代碼也很優(yōu)秀,但還是那個問題,沒有源碼,且三速網(wǎng)IP需要licence,三速網(wǎng)IP實現(xiàn)了rgmii到gmii再到axis的轉(zhuǎn)換;
4:使用FPGA的GTX資源利用SFP光口實現(xiàn)UDP通信,這種方案不需要外接網(wǎng)絡(luò)變壓器即可完成,本方案就是此種設(shè)計;
本設(shè)計調(diào)用Xilinx的AXI 1G/2.5G Ethernet Subsystem IP,使用硬件語言編寫的UDP協(xié)議棧實現(xiàn)UDP通信的MAC層設(shè)計,調(diào)用Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核實現(xiàn)了網(wǎng)絡(luò)變壓器的功能,從而實現(xiàn)無需外掛網(wǎng)絡(luò)芯片即可實現(xiàn)UDP通信的方案;UDP協(xié)議棧已封裝為FIFO接口,使得用戶無需關(guān)心復(fù)雜的UDP協(xié)議而只需關(guān)心簡單的用戶接口時序即可操作UDP收發(fā),非常簡單;本設(shè)計調(diào)用AXI DMA和MicroBlaze,實現(xiàn)軟核通過DMA發(fā)起UDP通信,MicroBlaze也可以用zynq代替,實現(xiàn)了zynq里PS軟件通過調(diào)用PL端硬件資源實現(xiàn)1G千兆網(wǎng)UDP通信的功能;
本設(shè)計連接1路SFP光口,并使SFP光口的收發(fā)兩端相連形成數(shù)據(jù)回環(huán);FPGA開發(fā)板配置為UDP服務(wù)器;本設(shè)計經(jīng)過反復(fù)大量測試穩(wěn)定可靠,可在項目中直接移植使用,工程代碼可綜合編譯上板調(diào)試,可直接項目移植,適用于在校學(xué)生、研究生項目開發(fā),也適用于在職工程師做項目開發(fā),可應(yīng)用于醫(yī)療、軍工等行業(yè)的數(shù)字通信領(lǐng)域;
提供完整的、跑通的工程源碼和技術(shù)支持;
工程源碼和技術(shù)支持的獲取方式放在了文章末尾,請耐心看到最后;
2、我這里已有的UDP方案
目前我這里有如下幾種UDP方案和應(yīng)用實例:
我的博客主頁有個FPGA以太網(wǎng)通信專欄,專欄是免費的,里面有很多FPGA實現(xiàn)的UDP應(yīng)用,既有常規(guī)千兆網(wǎng)也有萬兆網(wǎng)方案,對網(wǎng)絡(luò)通信有需求的兄弟可以去看看:直接點擊前往
3、詳細(xì)設(shè)計方案
傳統(tǒng)UDP網(wǎng)絡(luò)通信方案
在講述設(shè)計方案之前,我們先來看看FPGA實現(xiàn)UDP通信方案應(yīng)具備什么條件,大體如下:
1:用戶邏輯:
開發(fā)者需要收發(fā)的實際數(shù)據(jù),可以以多種形勢存在,比如自定義格式、AXIS數(shù)據(jù)流格式等等,用戶邏輯的接口時序必須與MAC層的接口時序一致;
2:MAC層
主要由UDP、IP、ARP、ICMP等具體的協(xié)議邏輯組成,實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的組包與拆包,相當(dāng)于做了軟件里Sockte做的事兒,Sockte依賴CPU做網(wǎng)絡(luò)數(shù)據(jù)包,而這里的MAC層直接使用硬件資源做網(wǎng)絡(luò)數(shù)據(jù)包,解放了網(wǎng)絡(luò)數(shù)據(jù)包對CPU的奴役,在當(dāng)今時髦兒的RDMA中得以完美體現(xiàn)。。。本設(shè)計的MAC層采用米聯(lián)客的UDP協(xié)議棧,關(guān)于這部分,請參考我之前寫的文章
3:網(wǎng)絡(luò)變壓器
主要由PCS/PMA組成,PCS主要實現(xiàn)并行數(shù)據(jù)的編解碼,比如經(jīng)典的8b/10編解碼,PMA主要實現(xiàn)并串/串并轉(zhuǎn)換,輸出接口是高速差分信號,可直接與SFP或者RG45網(wǎng)口連接;
4:RJ45網(wǎng)口:俗稱水晶頭,插網(wǎng)線的。。。
5:遠(yuǎn)端節(jié)點
本FPGA開發(fā)板可以理解為一個網(wǎng)卡,遠(yuǎn)端節(jié)點就是與之連接的另一個網(wǎng)卡,比如電腦主機上的網(wǎng)卡;
本方案詳細(xì)設(shè)計說明
本設(shè)計與上述傳統(tǒng)的FPGA實現(xiàn)UDP方案不同的是網(wǎng)絡(luò)變壓器部分,前面的網(wǎng)絡(luò)變壓器是真實的網(wǎng)絡(luò)PHY芯片,比如我常用到的RTL8211、B50610、88E1518等等;本設(shè)計沒有用到網(wǎng)絡(luò)變壓器,而是調(diào)用Xilinx官方的AXI 1G/2.5G Ethernet Subsystem IP核實現(xiàn)了網(wǎng)絡(luò)變壓器的功能,通過SFP光口輸出實現(xiàn)UDP協(xié)議數(shù)據(jù)通信,設(shè)計框圖如下:
DMA和BRAM
AXI-BRAM充當(dāng)存儲介質(zhì),可以用DDR代替,AXI-BRAM負(fù)責(zé)存儲待發(fā)送UDP模塊的數(shù)據(jù),也存儲從UDP模塊接收到的UDP數(shù)據(jù),如果數(shù)據(jù)量大,則可換成DDR,將AXI-BRAM換成AXI-MIG;AXI-DMA充當(dāng)軟件和硬件之間的橋梁,MicroBlaze軟核通過AXI-Lite接口控制DMA的數(shù)據(jù)流向,也可以將軟件側(cè)的數(shù)據(jù)通過DMA發(fā)送出去,后端的UDP模塊和AXI-Ethernet等硬件資源完全無需關(guān)心;如果是zynq系列器件,則可把MicroBlaze軟核替換為Zynq軟核,這樣就實現(xiàn)了PS和PL資源的交互,且PS軟件可直接控制硬件UDP協(xié)議完成數(shù)據(jù)收發(fā),在架構(gòu)上屬于高端架構(gòu)。。。
AXIS-FIFO
AXIS-FIFO充當(dāng)AXI-DMA與UDP模塊的橋梁,因為AXI-DMA的用戶接口為AXIS數(shù)據(jù)流,而UDP模塊也已封裝為FIFO接口,所以直接調(diào)用兩個AXIS-FIFO輕松實現(xiàn)不同數(shù)據(jù)接口模塊之間的屋里連接,這里調(diào)用兩個AXIS-FIFO,一個作為接收,另一個作為發(fā)送;
UDP模塊設(shè)計
該UDP協(xié)議棧的功能和性能參數(shù)如下:原諒我裝13秀一波英文。。。
FEATURES:
Implements UDP, IPv4, ARP protocols
Zero latency between UDP and MAC layer
? (combinatorial transfer during user data phase)
? See simulation diagram below
Allows full control of UDP src & dst ports on TX.
Provides access to UDP src & dst ports on RX (user filtering)
Couples directly to Xilinx Tri-Mode eth Mac via AXI interface
Separate building blocks to create custom stacks
Easy to tap into the IP layer directly
Supports TX and RX with IP layer broadcast address
Separate clock domains for tx & rx paths
Choice of smaller single slot ARP or multislot up to 255 slots
Tested for 1Gbit Ethernet, but applicable to 100M and 10M
UDP協(xié)議棧 Bolck Design設(shè)計框圖如下:
核心代碼采用VHDL語言實現(xiàn),是為了更好的時序,頂層代碼采用verilog語言實現(xiàn),是為了方便用戶例化,UDP模塊已封裝為FIFO接口,使得用戶無需關(guān)心復(fù)雜的UDP協(xié)議而只需關(guān)心簡單的用戶接口時序即可操作UDP收發(fā),非常簡單;UDP模塊帶動態(tài)ARP、IP仲裁等功能,但不帶ping功能;具體設(shè)計框圖如下:
UDP層代碼頂層文件直接拖入Block Design中可生成IP界面,IP界面可配置IP地址等信息,如圖:
UDP模塊FIFO
作用與前面說的AXIS-FIFO功能類似,充當(dāng)UDP模塊與AXI-Ethernet的橋梁,因為AXI-Ethernet的用戶接口為AXIS數(shù)據(jù)流,而UDP模塊也已封裝為FIFO接口,所以手寫一個UDP模塊FIFO輕松實現(xiàn)不同數(shù)據(jù)接口模塊之間的屋里連接;
AXI 1G/2.5G Ethernet Subsystem:
本設(shè)計使用 AXI 1G/2.5G Ethernet Subsystem IP 核實現(xiàn)物理層功能,IP核通過MicroBlaze軟核配置;根據(jù)官方文檔介紹,該IP功能如下:
更多關(guān)于該IP的細(xì)節(jié),請自行閱讀官方手冊《pg138-axi-ethernet》;
AXI 1G/2.5G Ethernet Subsystem IP 核具體配置說明如下:
1: 配置鏈路速率為 1Gbps。;
2: 配置 PHY 接口類型為 1000BaseX;
3: 配置 MDIO PHY Address 為 1;
具體配置界面如圖:
輸出
AXI 1G/2.5G Ethernet Subsystem IP核直接輸出到SFP接口,并使SFP光口的收發(fā)兩端相連形成數(shù)據(jù)回環(huán),即可完成工程的硬件連接,另外,為了與FPGA開發(fā)板通信和打印測試信息,工程還調(diào)用了一個AXI Uart IP,所以還需要一根USB轉(zhuǎn)串口線連接開發(fā)板與電腦,電腦打開串口調(diào)試助手接口收到FPGA開發(fā)板打印的信息;串口波特率為115200,數(shù)據(jù)位8,無校驗;
4、vivado工程詳解
開發(fā)板FPGA型號:Xilinx-xc7k325tffg676-2;
開發(fā)環(huán)境:vivado2019.1;
輸入/輸出:SFP光口;
測試項:UDP數(shù)據(jù)回環(huán);
工程Block Design如下:
綜合后的工程代碼架構(gòu)如下:
綜合編譯后的FPGA資源消耗和功耗預(yù)估如下:
SDK代碼架構(gòu)如下:
5、上板調(diào)試驗證并演示
本設(shè)計連接1路SFP光口,并使SFP光口的收發(fā)兩端相連形成數(shù)據(jù)回環(huán),如下:
打開vivado工程,編譯后導(dǎo)出bit,運行SDK,然后通過SDK下載程序運行,打開電腦的串口調(diào)試助手,你會看到如下打印即可看到串口調(diào)試終端打印 SFP+光口外部回環(huán)的數(shù)據(jù)傳輸測試信息。
本案例的 GTX 帶寬配置為 1Gbps,即 125MB/s。如下:
可從上圖得到如下信息:
SFP+光口外部回環(huán)的數(shù)據(jù)傳輸速率為 84MB/s;
SFP+光口外部回環(huán)的數(shù)據(jù)傳輸誤碼率為 0;
SDK軟件代碼主要完成如下功能:
1:初始化 AXI Ethernet 驅(qū)動程序,如下:
2:設(shè)置 MAC 地址,需與UDP模塊所設(shè)置的 MAC 地址一致,如下:
3:設(shè)置 PHY 參數(shù),如鏈路速率等,如圖:
4:啟動 AXI Ethernet 設(shè)備,如下:
5:初始化并校準(zhǔn)定時器,如下:
6:初始化 GPIO 驅(qū)動程序,用于監(jiān)測 DMA AXIS MM2S Tvalid 信號;
由于本案例使用的 UDP 協(xié)議棧所支持的標(biāo)準(zhǔn) UDP 包的數(shù)據(jù)長度小于 AXI DMA IP核內(nèi)置 FIFO,當(dāng) AXI DMA 傳輸完成后,DMA 內(nèi)部狀態(tài)寄存器不會發(fā)生改變,因此無法通過檢測 DMA 內(nèi)部狀態(tài)寄存器判斷是否傳輸完成。故需增加 AXI GPIO IP 核來監(jiān)測 AXI DMA的 Stream 端的 MM2S Tvalid 信號,從而判斷 DMA 是否傳輸完成。如下:
7:初始化 DMA 設(shè)備,使用輪詢模式,關(guān)閉 DMA 中斷,構(gòu)建每次傳輸所要發(fā)送的數(shù)據(jù)包,分別往 DMA 設(shè)備寫入源地址、目的地址以及數(shù)據(jù)量,并啟動 DMA 傳輸。啟動DMA 傳輸后,使用 Timer 進(jìn)行計時,等待 DMA 傳輸完成后計算數(shù)據(jù)傳輸速率;每次傳輸完成后,對傳輸數(shù)據(jù)進(jìn)行校驗;計算數(shù)據(jù)傳輸平均速率與誤碼率;這部分代碼太多,就不截圖了;
注意事項
AXI 1G/2.5G Ethernet Subsystem IP核需要Licence才能編譯生成比特流,請到官方申請Licence文章來源:http://www.zghlxwxcb.cn/news/detail-499302.html
6、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網(wǎng)盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網(wǎng)盤資料如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-499302.html
到了這里,關(guān)于FPGA基于AXI 1G/2.5G Ethernet Subsystem實現(xiàn)UDP通信DMA傳輸 提供工程源碼和技術(shù)支持的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!