AC6102 開發板千兆以太網UDP傳輸實驗
在芯航線AC6102開發板上,設計了一路GMII接口的千兆以太網電路,通過該以太網電路,用戶可以將FPGA采集或運算得到的數據傳遞給其他設備如PC或服務器,或者接收其他設備傳輸過來的數據並進行處理。
接觸過以太網的用戶,應該最常聽說的是TCP/IP協議,確實,在PC端或者嵌入式系統中,TCP/IP協議應用非常廣泛,因此,當大家看到FPGA上帶有以太網接口時,可能第一個想到的也是實現TC/IP協議。這里,首先可以很肯定的告訴大家,使用FPGA實現TCP/IP協議是完全沒有問題的,但是,實現的方式卻不是大家最期望的直接使用Verilog編寫協議層代碼來實現。FPGA發展到現在,三十多年了,卻鮮見有成功商用的RTL級的TCP/IP的設計,而大部分使用Verilog或者VHDL實現的以太網傳輸,都是基於非常簡單的UDP協議的。當然,探索或者實現其中部分功能的人還是有的,只是,很難做到像PC那樣靈活應用。
個人理解,TCP/IP協議設計之初就是根據軟件靈活性設計的,因此在很多設計考慮上,並不適合使用硬線邏輯實現。TCP/IP協議非常的復雜,如果使用硬件邏輯實現,工程量必然十分浩大,而且功能和性能都無法得到保證。
那么怎樣在FPGA上實現TCP/IP協議呢?答案就是SOPC技術。即使用嵌入式軟核技術,在FPGA上搭建軟核CPU系統,再通過CPU來運行軟件TCP/IP協議,從而實現相應功能。但是這種實現方式對於很多用戶來說,前期系統創建的過程比較繁瑣,因此很多朋友都難以上手,因此這種方式使用的也並不是很廣泛。
上面說過,在FPGA上,可以使用Verilog實現UDP協議來進行數據的傳輸。UDP協議是一種不可靠傳輸,發送方只負責將數據發送出去,而不管接收方是否正確的接收。非常類似於UART串口傳輸。但是,在很多場合,是可以接受這種潛在的不可靠性的,例如視頻實時傳輸顯示。在這類系統中,由於數據並不需要進行運算並得到非常精確的結果用於其他功能,而僅僅是顯示在屏幕上,因此可以接受一定程度的丟包或者誤碼。此類應用在LED大屏顯示系統中應用非常廣泛。本節就介紹提供給大家的一個基於UDP傳輸例程的使用方法。
關於使用SOPC技術實現完整的TCP/IP連接,將在后續教程中提供。
1、本例提供的UDP傳輸例程工程壓縮包名為AC6102_GETH_Test.rar
2、解壓AC6102_GETH_Test.rar到不含中文或者空格的目錄中,如D:\fpga。解壓后工程目錄下內容如下所示:
其中Src文件夾下存放的為程序源碼,如下圖所示:
這里對其中幾個重要文件(夾)簡單說明下功能:
3、確認自己PC的網卡是否是千兆網卡,用戶可以點擊本地連接查看。如果不是千兆網卡,請更換帶千兆網卡的電腦或加裝千兆網卡。再用五類+或者六類網線連接開發板的網口和PC的網口。使用配套的5V電源給開發板供電,打開電源開關,插上USB Blaster下載器。
4、雙擊Ethernet.qpf以打開工程(強烈建議使用工程創建時候對應的版本即Quartus II 13.0,使用其他版本打開或編譯遇到問題,請郵件告知我們,以獲得解決方案郵箱:xiaomeige_fpga@foxmail.com)
5、修改UDP發送模塊(ipsend.v)中的目標mac address為你使用的網卡的 mac address,修改后重新編譯一邊。
如果不知道自己PC網卡的mac address,就在DOS命令窗口,用ipconfig –all命令看一下。
6、修改PC的IP地址為192.168.0.3。PC的IP Address需要和發送模塊(ipsend.v)中設置一致,不然PC端會接收不到開發板發送的UDP數據包。當然,用戶也可以修改代碼中的目標IP地址,如下所示:
代碼中本機(FPGA)和目標機(PC)IP地址
修改PC的IP地址
7、在DOS命令窗口綁定開發板的IP地址和MAC地址,(由於本測試工程不支持ARP協議,因此只能通過這種IP和MAC綁定的方式來強制將開發板的IP地址和MAC地址關聯在一起,這樣,當 PC發送給192.168.0.2的數據包的時候,目標MAC地址自動為開發板的MAC地址。)
運行命令:ARP -s 192.168.0.2 00-0a-35-01-fe-c0
綁定后我們可以用arp -a命令來查看PC上綁定的結果。
如果運行ARP出現加載失敗,換另一種方法綁定
1) 使用netsh i i show in命令查看本地連接的idx編號,如“11”
2) 使用netsh -c “i i”add neighbors 11(idx編號) “192.168.0.2” “00-0a-35-01-fe-c0”
3) 使用arp -a命令來查看PC上幫定的結果
8、安裝網絡抓包工具 Wireshark, 我們在實驗的時候可以用這工具來查看 PC 網口發送的數據和接收到的數據。
9、打開Quartus II的Programer,選擇下載器和需要下載的文件,然后點擊下載以開始下載Ethernet.sof文件到開發板中。
10、打開安裝好的wireshark抓包工具。在軟件界面選擇您PC的千兆網卡,按開始按鈕開始抓包。
在wireshark抓包窗口我們可以看到開發板(192.168.0.2)向PC網口(192.168.0.3)發來的數據
包。
11、打開網絡調試助手並按照如圖所示設置各項參數,再按連接按鈕(這里的本地的IP地址為PC的IP Address, 本地端口需要跟FPGA程序中的一致,為8080)
點就連接后,目標主機(192.168.0.2)和目標端口(8080)都是默認值。
12、再在網絡調試助手的發送窗口發送一大串字符,在網絡的數據接收窗口我們可以看到從FPGA返回的數據也變成剛發送字符串。
注意:以太網的數據幀的傳輸有包長的要求, 一般在46~1500字節。所以在發送以太網數據包的時候,數據幀的長度不能太短, 不然會導致PC數據包發送而FPGA收不到數據包的情況。
小梅哥
2016年12月8日於成都市駟馬橋