吳長瑞 徐建清 蔣景紅
摘 要: 為解決嵌入式領(lǐng)域中數(shù)據(jù)量大、速度高、實時性強(qiáng)等傳輸問題,提出FPGA和PHY芯片相結(jié)合的設(shè)計方案,用于實現(xiàn)UDP/IP協(xié)議。通過深入研究TCP/IP協(xié)議棧體系結(jié)構(gòu)和工作原理,按照以太網(wǎng)的幀格式封包和解包,在FPGA中實現(xiàn)UDP/IP數(shù)據(jù)的正確發(fā)送和接收。在自主研發(fā)的硬件平臺上驗證了該方案的正確性和可靠性。由于使用FPGA實現(xiàn)UDP/IP協(xié)議,系統(tǒng)具有移植性高和易于集成等優(yōu)點。
關(guān)鍵詞: UDP/IP; 協(xié)議棧; 千兆以太網(wǎng); 現(xiàn)場可編程門陣列; 幀格式; 系統(tǒng)集成
中圖分類號: TN913?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2018)09?0001?05
Abstract: In order to solve the transmission problems of large data amount, high speed and strong real?time performance of the embedded field, a design scheme combining FPGA and PHY chip is proposed to implement the UDP/IP protocol. The system architecture and working principle of TCP/IP protocol stack are studied deeply. According to the packed and unpacked frame format of Ethernet, the UDP/IP data is sent and received correctly in FPGA. The correctness and reliability of the scheme are verified on the autonomously?developed hardware platform. The system using FPGA to implement the UDP/IP protocol has the advantages of high portability and easy integration.
Keywords: UDP/IP; protocol stack; Gigabit Ethernet; FPGA; frame format; system integration
0 引 言
千兆以太網(wǎng)在視頻和音頻等大數(shù)據(jù)量和高實時性的領(lǐng)域存在廣泛的應(yīng)用。在點對點通信中,數(shù)據(jù)傳輸?shù)膶崟r性是通信雙方非常關(guān)心的問題。針對此類應(yīng)用,UDP(User Data Protocol)提供了一種高效、低延遲的稱為數(shù)據(jù)報的傳輸協(xié)議,采用UDP這種面向非連接的傳輸協(xié)議,可以有效解決數(shù)據(jù)實時傳輸?shù)膯栴}。目前業(yè)界常用的嵌入式以太網(wǎng)解決方案有微控制器內(nèi)移植TCP/IP協(xié)議棧和ASIC內(nèi)置協(xié)議棧,上述方案都不能同時兼顧傳輸效率、可集成化和可移植性[1?2]。
本文提出一種基于FPGA的UDP/IP協(xié)議,實現(xiàn)千兆以太網(wǎng)傳輸方案兼顧傳輸效率、易于集成和便于移植等特點,該方案已在實際工程中得到廣泛應(yīng)用。
1 TCP/IP協(xié)議棧結(jié)構(gòu)及工作原理
OSI參考模型(Open System Interconnection Reference Model)是國際互聯(lián)網(wǎng)標(biāo)準(zhǔn)化組織提出的網(wǎng)絡(luò)結(jié)構(gòu)標(biāo)準(zhǔn)模型。該模型的目的是使各種硬件在相同的層次上相互通信。實際應(yīng)用中,OSI模型因為實現(xiàn)太過復(fù)雜而很少被采用,TCP/IP模型因簡潔而被廣泛使用。TCP/IP協(xié)議棧并不是TCP和IP這兩個協(xié)議的合稱,而是指因特網(wǎng)整個TCP/IP協(xié)議族[3?5]。TCP/IP參考模型的分層結(jié)構(gòu)與OSI模型的參照圖如圖1所示。
第一層:主機(jī)到網(wǎng)絡(luò)層,主要包括物理層PHY和介質(zhì)訪問控制層MAC。TCP/IP參考模型中沒有描述這一層的具體實現(xiàn)方式,只規(guī)定其為上一層提供IP數(shù)據(jù)包的接口,以太網(wǎng)是其中一種實現(xiàn)方式。
第二層:網(wǎng)絡(luò)互連層,是TCP/IP協(xié)議棧的核心。該層定義了分組格式和協(xié)議類型,具有路由、網(wǎng)際互連和擁塞控制等。
第三層:傳輸層,包含傳輸控制協(xié)議(Transmission Control Protocol,TCP)以及用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)兩種協(xié)議。TCP協(xié)議是一種面向連接、可靠、基于字節(jié)流的傳輸協(xié)議。它利用IP層的機(jī)制,在不可靠的連接基礎(chǔ)上實現(xiàn)可靠的連接,通過發(fā)送窗口控制、超時重發(fā)、分包等一系列方法,將字節(jié)流從一臺主機(jī)發(fā)送到其他主機(jī)。UDP協(xié)議是一種無連接協(xié)議,是不可靠的,主要應(yīng)用于不需要對數(shù)據(jù)報進(jìn)行排序以及流量控制的場景。
第四層:應(yīng)用層,它面向用戶,可實現(xiàn)很多用戶應(yīng)用協(xié)議。
UDP協(xié)議是TCP/IP傳輸層協(xié)議的一部分。UDP是面向報文的傳輸協(xié)議,由于其只負(fù)責(zé)把報文發(fā)送出去,接收方也不會提供反饋機(jī)制,所以它是不可靠的。但正是因為UDP沒有建立連接、撤銷連接、確認(rèn)報文等開銷,因而相對于TCP協(xié)議,它的執(zhí)行速度更快,實時性更強(qiáng),具有很高的傳輸效率而且它對系統(tǒng)造成的負(fù)載低[6]。本文從具體的實際應(yīng)用出發(fā),系統(tǒng)傳輸層中采用UDP 傳輸協(xié)議提供點對點的數(shù)據(jù)報傳輸服務(wù),網(wǎng)絡(luò)層為IP協(xié)議,數(shù)據(jù)鏈路層為ARP協(xié)議和MAC協(xié)議,物理層采用自適應(yīng)千兆網(wǎng)1000Base?T的連接通道。
UDP/IP協(xié)議的工作原理可以看作是兩個簡單的處理過程:從上層到下層的封包過程和由下層至上層的解包過程,每個過程都是依照每層采用的傳輸協(xié)議傳輸數(shù)據(jù)。當(dāng)通信主機(jī)向從機(jī)發(fā)送數(shù)據(jù)時,應(yīng)用層的數(shù)據(jù)首先被送入?yún)f(xié)議棧中,然后逐層通過協(xié)議棧的每一層直至送到網(wǎng)絡(luò)。每一層對收到的數(shù)據(jù)都要增加一些首部信息(有些還要增加尾部信息),整個過程稱作是封包過程。當(dāng)通信主機(jī)接收從機(jī)傳過來的以太網(wǎng)數(shù)據(jù)幀時,幀數(shù)據(jù)就開始從協(xié)議棧的物理層開始傳輸,通過相應(yīng)層時,檢驗是否匹配當(dāng)前層的協(xié)議幀首部信息,如果不滿足就丟棄該幀,這個過程稱作解包。封包和解包過程如圖2所示。
在實際傳輸應(yīng)用過程中遵照協(xié)議透明的原理,在各自的層中按照標(biāo)準(zhǔn)封包和解包數(shù)據(jù)后交付下一層。精簡后的協(xié)議棧具備以下功能:實現(xiàn)基于UDP傳輸協(xié)議的數(shù)據(jù)傳輸;按需求可以對目的IP地址和源IP地址進(jìn)行靈活配置;支持ARP地址解析;支持checksum幀校驗;支持?jǐn)?shù)據(jù)流控制。
2 以太網(wǎng)的幀格式
以太網(wǎng)幀包含6個域:前導(dǎo)碼,8 B;目的地址,6 B;源地址,6 B;類型域,2 B;數(shù)據(jù),46~1 500 B;幀校驗序列FCS,4 B。前導(dǎo)碼是MAC數(shù)據(jù)到物理層添加的,目的是實現(xiàn)比特同步。前7個字節(jié)是1和0交替的序列,稱為前同步碼,這種序列可以使接收端快速實現(xiàn)比特同步。最后一個字節(jié)是幀開始的定界符,規(guī)定為10101011,接收端在接收到該字節(jié)后,就知道后面的數(shù)據(jù)是MAC幀了。
以太網(wǎng)MAC層主要實現(xiàn)數(shù)據(jù)幀的構(gòu)建與差錯檢查、傳輸控制、接口轉(zhuǎn)換等功能。常用的以太網(wǎng)MAC幀格式有DIX Ethernet V2和IEEE 802.3兩種。
圖3給出了最常用的以太網(wǎng)MAC V2幀格式,共包含5個字段。開始的兩個字段分別為6 B的目的地址和源地址,即通常所說的MAC地址或者物理地址,它們是固化在網(wǎng)卡中并且是唯一的。第3個字段是用來標(biāo)記上層協(xié)議的類型字段,共2 B,根據(jù)該類型就可以把收到的MAC幀數(shù)據(jù)交給上一層的對應(yīng)協(xié)議。如該類型字段的值是0x0800時,表示上層使用的是IP數(shù)據(jù)報。第4個字段是數(shù)據(jù)字段,長度在46~1 500 B之間。最后1個字段是4 B的幀檢驗序列FCS,作為整個數(shù)據(jù)包的校驗字節(jié)[7?8]。
以太網(wǎng)協(xié)議規(guī)定的最短幀長為64 B,這就要求數(shù)據(jù)填充至少為46 B。當(dāng)數(shù)據(jù)字段的長度小于46 B時,為了保證以太網(wǎng)的MAC幀長不小于64 B,MAC子層就會在數(shù)據(jù)字段的后面添加若干字節(jié)的填充字段[9]。
3 FPGA實現(xiàn)千兆以太網(wǎng)協(xié)議的硬件設(shè)計
常見FPGA實現(xiàn)以太網(wǎng)協(xié)議的結(jié)構(gòu)圖如圖4所示。利用Xilinx公司提供的MAC IP核和IOB以MII(Media Independent Interface),GMII,RGMII或者SGMII形式與PHY芯片連接,PHY芯片以1000Base?T 形式接到RJ45上。其中MII又稱介質(zhì)無關(guān)接口,收發(fā)各有4位數(shù)據(jù)線,工作在2.5 MHz或者25 MHz時鐘下,理論傳輸速率為10 Mb/s或100 Mb/s。不能滿足千兆以太網(wǎng)的要求,IEEE 208.3工作組又引入了GMII,即千兆介質(zhì)無關(guān)接口,收發(fā)數(shù)據(jù)線各8位,收發(fā)時鐘為125 MHz,理論速度為1 000 Mb/s。RGMII(Reduced MII)是簡化的GMII接口。收發(fā)數(shù)據(jù)各有4位,與GMII相比,信號線減半,但收發(fā)時鐘還是125 MHz,為了達(dá)到1 Gb/s,TXD和RXD信號線上在時鐘的上升沿發(fā)送GMII接口中的TXD[3:0]/RXD[3:0],在時鐘的下降沿發(fā)送GMII接口中的TXD[7:4]/RXD[7:4]。
MII,GMII和RGMII使用FPGA的GPIO實現(xiàn),SGMII 使用FPGA的MGT實現(xiàn)。本文給出兩種實現(xiàn)方式的設(shè)計方案。
3.1 FPGA GPIO實現(xiàn)以太網(wǎng)協(xié)議
本節(jié)描述FPGA使用GPIO以GMII或RGMII接口的形式接入PHY 88E1111,通過PHY 88E1111轉(zhuǎn)換為1000Base?T;這種情況下不占用MGT資源。
FPGA和PHY連接及PHY的配置設(shè)計成GMII或者RGMII是可以選擇的。這樣邏輯設(shè)計時可以靈活選擇是生成RGMII接口的IP核還是生成GMII接口的IP核。無論是RGMII還是GMII接口,用戶接口都是locallink形式。所以對于邏輯開發(fā)者來說都是一樣的。FPGA GPIO實現(xiàn)千兆以及網(wǎng)協(xié)議的結(jié)構(gòu)框圖見圖5。
3.2 FPGA MGT實現(xiàn)以太網(wǎng)協(xié)議
在GPIO資源不足的情況下,還可以采用FPGA的MGT實現(xiàn)千兆以太網(wǎng)。圖6給出FPGA MGT實現(xiàn)千兆以太網(wǎng)協(xié)議的結(jié)構(gòu)框圖。MGT連接的是SGMII信號形式。如果要通過SGMII實現(xiàn)1000Base?T就需要2個IP核級聯(lián),即Tri?mod?eth_mac和 Ethernet 1000Base?x PCS/PMA or SGMII 級聯(lián)。其中,Tri?mod?eth?mac IP用戶接口是Local link接口,另一端是GMII接口;而PCS/PMA or SGMII IP core一端是GMII接口和Tri?mod?eth?mac相連;另一端是使用FPGA的MGT實現(xiàn)的SGMII接口,SGMII通過PHY 88E1111轉(zhuǎn)換成1000Base?T;由于PCS/PMA or SGMII core 支持1G和2.5G,故本設(shè)計以太網(wǎng)傳輸協(xié)議可以工作在1 Gb/s或者2.5 Gb/s兩種速率下。PCS/PMA or SGMII core工作在SGMII模式下[10?12]。
4 UDP/IP協(xié)議邏輯實現(xiàn)
根據(jù)UDP/IP的工作原理和以太網(wǎng)MAC幀格式,設(shè)計發(fā)送和接收模塊對數(shù)據(jù)進(jìn)行封包和解包。圖7給出了UDP/IP發(fā)送模塊的封包狀態(tài)跳轉(zhuǎn)圖。從狀態(tài)轉(zhuǎn)移圖中idle狀態(tài)跳轉(zhuǎn)的三個分支可以看出,這個發(fā)送模塊可以發(fā)送ARP包,UDP/IP數(shù)據(jù)包和用戶自定義的包。這里著重介紹UDP/IP數(shù)據(jù)包的發(fā)送過程。狀態(tài) send_mac_ dstaddr_sof 是發(fā)送以太網(wǎng)MAC幀的起始狀態(tài),在send_mac_dst_addr狀態(tài)發(fā)送6 B的MAC幀的目的地址,在send_mac_src_addr狀態(tài)發(fā)送6 B的MAC幀的源地址。
send_mac_dst_addr狀態(tài)發(fā)送協(xié)議類型,如果類型是0x0800就是IP包,用戶還可以定義別的類型,如圖7中0x5160發(fā)送自定義的數(shù)據(jù)包格式。
在IP數(shù)據(jù)包的發(fā)送中,按照IP頭長度(send_ip_header_ length)、服務(wù)器類型(send_ip_server_type)、IP總長度(send_ip_total_length)、IP ID(send_ip_id),IP偏移地址(send_ip_fragandoffset)、生成周期(send_ip_ttl),IP協(xié)議(send_ip_protocol)、校驗和(send_ip_headchecksum)、IP的源地址(send_ip_srcaddr)、IP目的地址(send_ip_dstaddr)等順序跳轉(zhuǎn)狀態(tài)機(jī)。
最后跳入UDP的封包狀態(tài)機(jī),按照UDP的源端口號(send_udp_srcport)、UDP的目的端口號(send_ udp_dstport)、UDP長度(send_udp_dstport)、校驗和(send_udp_checksum)、數(shù)據(jù)頭(send_ack_data_head)和數(shù)據(jù)(send_ack_data)的順序發(fā)送MAC數(shù)據(jù)幀。
本設(shè)計除了能發(fā)送UDP/IP數(shù)據(jù)包,同時還能傳輸用戶自定義的數(shù)據(jù)包格式。接收模塊按照同樣的MAC數(shù)據(jù)幀格式接收數(shù)據(jù)包。這里不再給其狀態(tài)機(jī)。
5 測試平臺與結(jié)果分析
在自主研發(fā)的以SP6LX45T?CSG484 FPGA為主芯片的板卡上實現(xiàn)UDP/IP協(xié)議棧,外部配置物理層收發(fā)芯片88E1111,通過RJ45連接搭建千兆以太網(wǎng)傳輸通路。按照圖8搭建測試環(huán)境進(jìn)行系統(tǒng)測試。
通過網(wǎng)線將自研板卡與PC相連,在PC上使用Anysend軟件發(fā)送UDP/IP包,在FPGA內(nèi)部接收該UDP/IP包,然后通過FPGA轉(zhuǎn)發(fā)給PC。使用Wireshark分別抓取PC發(fā)給FPGA的以太網(wǎng)數(shù)據(jù)和FPGA發(fā)送給PC的以太網(wǎng)數(shù)據(jù)如圖9所示。圖9a)所示為Anysend發(fā)送是標(biāo)準(zhǔn)UDP/IP包,該包被FPGA接收后重新定義了MAC的源地址和目的地址,然后發(fā)送給PC,所以圖9b)是IPv4的以太網(wǎng)包。通過數(shù)據(jù)分析,本文設(shè)計的協(xié)議棧功能正確,邏輯端能夠正確發(fā)送和接收以太網(wǎng)數(shù)據(jù)。并且通過長時間測試(大于24 h),平均丟包率為百萬分之一的量級。
6 結(jié) 語
本文介紹了兩種在FPGA實現(xiàn)UDP/IP協(xié)議棧的實現(xiàn)方法。無論是利用FPGA GPIO資源還是利用FPGA MGT資源實現(xiàn)千兆以太網(wǎng)通信,邏輯端的收發(fā)模塊設(shè)計都是一樣的。因此,這種方法可移植性高,實現(xiàn)簡單,利于系統(tǒng)集成,在實時性要求比較高的點對點通信領(lǐng)域有著廣泛的應(yīng)用。
參考文獻(xiàn)
[1] 崔鶴,劉云清,盛家進(jìn).基于FPGA的UDP/IP協(xié)議棧的研究與實現(xiàn)[J].長春理工大學(xué)學(xué)報(自然科學(xué)版),2014,37(2):133?137.
CUI He, LIU Yunqing, SHENG Jiajin. Research and implementation of UDP/IP protocol stack based on FPGA [J]. Journal of Changchun University of Science and Technology (natural science edition), 2014, 37(2): 133?137.
[2] 史鵬騰.基于千兆網(wǎng)的FPGA多通道數(shù)據(jù)采集系統(tǒng)設(shè)計[J].電子科技,2015,28(2):123?126.
SHI Pengteng. Design of multi?channel FPGA?based data acquisition system based on Gigabit Ethernet [J]. Electronic technology, 2015, 28(2): 123?126.
[3] 謝希仁.計算機(jī)網(wǎng)絡(luò)[M].5版.北京:電子工業(yè)出版社,2005.
XIE Xiren. Computer network [M]. 5th ed. Beijing: Electronic Industry Press, 2005.
[4] 卡薩德·威爾斯. TCP/IP 24學(xué)時教程[M].王建華,譯.北京:機(jī)械工業(yè)出版社,1999.
WALES J C. TCP/IP 24 hours tutorial [M]. WANG Jianhua, Translation. Beijing: Mechanical Industry Press, 1999.
[5] KOZIEROK C M.TCP/IP指南(卷一):底層核心協(xié)議[M].陳鳴,賈永興,宋麗華,譯.北京:人民郵電出版社,2008.
KOZIEROK C M. TCP/IP guide (volume I): the underlying core protocol [M]. CHEN Ming, JIA Yongxing, SONG Lihua, Translation. Beijing: People′s Posts and Telecommunications Press, 2008.
[6] 徐鑫,曹奇英.基于LwIP協(xié)議棧的UDP協(xié)議分析與優(yōu)化[J].計算機(jī)應(yīng)用與軟件,2011,28(3):246?249.
XU Xin, CAO Qiying. UDP protocol analysis and optimization based on LwIP protocol stack [J]. Computer applications and software, 2011, 28(3): 246?249.
[7] 黃維超,劉橋,黃初華.基于FPGA的循環(huán)冗余校驗并行實現(xiàn)[J].信息技術(shù),2009,33(6):181?183.
HUANG Weichao, LIU Qiao, HUANG Chuhua. Parallel implementation of cyclic redundancy checks based on FPGA [J]. Information technology, 2009, 33(6): 181?183.
[8] 葉懋,劉宇紅,劉橋.CRC碼的FPGA實現(xiàn)[J].重慶工學(xué)院學(xué)報(自然科學(xué)版),2007,21(3):85?87.
YE Mao, LIU Yuhong, LIU Qiao. Implementation of CRC code based on FPGA [J]. Journal of Chongqing Institute of Technology (natural science edition), 2007, 21(3): 85?87.
[9] 嚴(yán)力.基于FPGA的以太網(wǎng)MAC協(xié)議的設(shè)計與實現(xiàn)[D].武漢:華中科技大學(xué),2011.
YAN Li. FPGA?based Ethernet MAC protocol design and implementation [D]. Wuhan: Huazhong University of Science and Technology, 2011.
[10] Xilinx. Tri?mode Ethernet MAC v9.0 [EB/OL]. [2015?09?30]. http://china.xilinx.com/support/documentation/ip_documentation/ru/tri?mode?ethernet?mac.html.
[11] Xilinx. 1 G/2.5 G Ethernet PCS/PMA or SGMII v15.1 [EB/OL]. [2015?11?18]. http://www.xilinx.com/support/answers/54667.html.
[12] Xilinx. LogiCORE IP tri?mode Ethernet MAC V5.1 user guide [EB/OL]. [2015?07?28]. http://www.xilinx.com/support/answers/33111.html.