侯鴻杰,王竹剛
(1.中國科學院 國家空間科學中心,北京 100190;2.中國科學院大學 北京100190)
基于MicroBlaze的可靠網絡接口設計
侯鴻杰1,2,王竹剛1
(1.中國科學院 國家空間科學中心,北京 100190;2.中國科學院大學 北京100190)
Microblaze是Xilinx公司設計一種軟核SOPC,它是FPGA芯片內部邏輯組成的一種32位軟核嵌入式處理器。為了實現(xiàn)數據從FPGA到計算機的高速傳遞,本文介紹了一種基于uIP及LwIP的網絡協(xié)議棧,提出了一種可靠UDP(reliable UDP,RLUDP)協(xié)議,并完成了嵌入式TCP/IP協(xié)議棧設計與實現(xiàn),實現(xiàn)了PC與MicroBlaze的高速數據傳輸,并對其性能進行了簡單的測試,最終達到了設計要求。
MicroBlaze;SOPC;可靠UDP;嵌入式TCP/IP
現(xiàn)場可編程門陣列(FPGA)廣泛應用于數傳,遙測,調制解調等領域。隨著我國測控通信技術的極速發(fā)展,對通信基帶數據發(fā)射和接收的速度及實時性要求日漸提高。針對FPGA與計算機等信源信宿的高速數傳需求,需要有一種基于現(xiàn)有通信協(xié)議的解決方案。網絡方式可以滿足長距離(100 m及以上級別)的高速數傳需求。近年來SOPC技術得到了迅速的發(fā)展,基于FPGA的SOPC系統(tǒng)結合FPGA及微處理器的優(yōu)點在點對點數傳方面的得到了廣泛應用。文獻[1]描述了一種基于MicroBlaze的嵌入式協(xié)議棧移植,并搭建了簡單LED外設進行驗證。文獻[2]提出了基于FPGA的Micro Blaze+DM9000網卡以太網接口方案,并實現(xiàn)了TCP,UDP通信。基于以上需求及成功的應用案例本文采用了Xilinx的FPGA,并使用其嵌入式軟核處理器MicroBlaze,采用嵌入式TCP/IP協(xié)議棧的方法實現(xiàn)了高速數傳。
系統(tǒng)總體硬件框圖如圖1所示,系統(tǒng)分為兩部分,分別PC上位機和FPGA,F(xiàn)PGA端包括MicroBlaze處理器系統(tǒng)[3-5],調制解調軟核,PC端主要為上位機。數據調制解調模塊主要完成通信物理層相關的數字信號處理工作,MicroBlaze是本系統(tǒng)的核心,在其上運行嵌入式TCP/IP協(xié)議棧,其他模塊包括基于DMA[6]的千兆網卡MAC IP核[7],LED外設[8]等。PC上位機是協(xié)議棧的客戶端點,完成數據收發(fā)請求,寄存器配置,連接建立保持等功能。FPGA采用了Xilinx的7系列芯片,由于調制解調數據有高速傳輸需求,因此采用的是千兆網卡的MAC IP核。

圖1 系統(tǒng)總體結構圖
本系統(tǒng)的數傳端點分別為FPGA和PC,對于FPGA協(xié)議棧選擇了在MicroBlaze中實現(xiàn),總體的協(xié)議棧參考模型如圖2所示,F(xiàn)PGA網絡接口層使用的是Xilinx的千兆以太網IP核,其余各層則在MicroBlaze中實現(xiàn)。PC端采用Windows操作系統(tǒng),使用MFC界面[9],用戶代碼主要完成傳輸層以上的處理。

圖2 系統(tǒng)協(xié)議棧模型
UDP協(xié)議是一種面向無連接的協(xié)議[10],它不提供可靠性,如果數據包發(fā)生丟失UDP也不提供丟失信息。然而由于沒有確認信息,差錯信息的額外開銷,UDP相比于TCP具有了高速的特點。由于點對點的近距離網絡通信環(huán)境誤碼率較低,并且由于網卡內部緩沖區(qū)有限,可能存在丟包的現(xiàn)象,因此設計一種通過重傳來保證可靠性的UDP成為了最佳選擇。SOPC作為嵌入式系統(tǒng)內存資源有限,在高速通信時可能存在緩存區(qū)溢出的情況,因此需要對UDP數據包的發(fā)送速率進行控制,本文設計的可靠UDP協(xié)議主要包括了兩部分:超時重傳,流量控制。在標準的TCP/IP的協(xié)議棧基礎上加入超時重傳,流量控制功能,RLUDP的首部設計如圖3所示。

圖3 可靠UDP首部
其各字段為:
GROUP ID(組標示號):一次傳輸單元(組)的唯一標示,即同一組的數據包GROUP ID字段相同,GROUP ID的長度為16位。
SEQ(包序列號):一個傳輸組中的單個數據包的序列號,長度為8位,功能為標示其在一個數據組的前后順序,一組中第一個數據包的SEQ為0。
FLAG(標志):8位,各個位有不同的功能,DEF位表示一個組的最后一個包,ACK位代表確認包,F(xiàn)CF位代表流量控制標志,其余5位保留。
GROUP LENGTH/ACKERR H16:GROUP LENGTH表示一個組攜帶的數據總長度(不包括首部),以字節(jié)為單位,該字段長度為16位。ACKERR H16表示該字段對應位置在數據確認包首部中表示數據丟失掩碼的高16位。
PACKET LENGTH/ACKERR L16:PACKET LENGTH表示本數據包所攜帶的數據長度,以字節(jié)為單位,長度為16位,該字段大小不超過網絡的MTU與協(xié)議首部的長度差。ACKERR L16表示該字段對應位置在數據確認包中標示數據丟失掩碼的低16位。
CHANNEL(通道號):RLUDP通道號,長度為8位,通道號與應用層傳輸需求對應。
OPTION(選項):8位,保留。
ACKERR中各個二進制位對應一組中數據包的SEQ序列號,序列號為n的數據包對應ACKERR的第n位二進制位。本協(xié)議一組最大包個數為32個。
RLUDP使用通道(channel)的方式來滿足應用層的不同傳輸要求,即調制數據的發(fā)送功能占用一個通道,調制數據的接收功能占用一個通道,寄存器讀寫占用一個通道,通過該方式可實現(xiàn)RLUDP層的復用,各通道之間相互獨立,其功能與傳輸層的端口功能類似,在所有的通道中0號通道為特殊通道,用于維護PC與FPGA端的連接信息。針對點對點簡單通信環(huán)境,RLUDP并未使用類似于TCP的3次握手過程。當PC端啟動時,PC向FPGA發(fā)送連接詢問包,其首部中SEQ字段為0xFF,CHANNEL字段為0,其余字段也均為0。該通道用于探測FPGA端的協(xié)議棧是否處于活動狀態(tài),連接詢問包始終由PC發(fā)送,在空閑時段,每隔一定時間就發(fā)送該詢問包,F(xiàn)PGA返回的響應包僅僅將對應詢問包中的ACK置位。若PC收到響應包,則表示連接存在,若約定時間內未收到響應包,則表示FPGA端未處于活動狀態(tài),PC端上位機釋放所有通道的緩存數據,禁止所有數據的傳輸功能。此時,由用戶決定是否重連FPGA。
數據收發(fā)過程:發(fā)送端一次發(fā)送一組數據包 (n個包,ACK為0),等待ACK包(flag字段中ACK置1的包)。接收端在接收到一個包后檢查GROUP ID是否和之前的相同,若相同丟棄該包,若不相同則啟動定時器,如圖4(a)所示,若在規(guī)定時間段內收到完整一組包,則向發(fā)送端發(fā)送ACK包,ACK ERR字段為全零,圖 4(b)中規(guī)定時間內未收到完整一組包返回ACK包并在ACKERR中指明丟失包的序號。由于SEQ指明了數據包在一組的序號,所以即使發(fā)生亂序也能將順序糾正,n值的選取直接影響了發(fā)送的速率,n值越大,應答的效率越高,等價傳輸的速率就越快,然而對于FPGA而言卻需要更大的緩沖區(qū)。
如圖 4(c)所示,若在接收完一組包后緩沖區(qū)大小小于設定值,則將返回的ACK包flag標志中FCF置位,PC端對應通道停止發(fā)送數據包,處于等待狀態(tài)。直到FPGA緩沖區(qū)大小大于設定值后發(fā)送該組ACK包,F(xiàn)CF復位。
在PC端,通道號與應用層數據傳輸功能進行了綁定,每個數據傳輸功能均由一個線程來完成。應用層數據傳輸需求包括3個線程,數據下行線程,數據上行線程,寄存器配置線程。RLUDP協(xié)議實現(xiàn)包括兩個線程:RS(Receive and Store)線程,RLU(Reliable UDP)線程。RS線程位于RLUDP的最底層,該線程主要負責數據包的接收工作,區(qū)分ACK包 (Flag中ACK置位)和DATA包(Flag中ACK復位)以及連接響應包(CHANNEL為0),ACK包和DATA包存放于相應的包隊列中,同時向RLU線程發(fā)送數據包到來的消息。RLU線程是RLUDP的核心線程,該線程工作于消息驅動模式,功能包括RLUDP協(xié)議主要部分:通道復用,通道分用,流量控制,數據發(fā)送,數據接收。
單個通道通過狀態(tài)機的模式來嚴格控制數據傳輸,其狀態(tài)機如圖5所示。其中有 4個狀態(tài) net idle,recv wait,ack wait,flow wait。

圖4 可靠UDP發(fā)送過程

圖5 可靠UDP程序狀態(tài)機
其中各個轉換條件為:c1表示一組中所有包接收完畢,c2表示收到一組中一個包,c3表示包發(fā)送完畢,c4表示接收到ACK包(FCF=0),c5表示接收到ACK包(FCF=1)。每個通道(0號除外)的初始狀態(tài)為net idle,當應用層的某個線程要發(fā)送一組數據時,就將數據存入該線程對應通道的RLUDP類對象的數據緩沖區(qū)中,并通知RLU線程,發(fā)送該組數據。此時若該通道的RLU狀態(tài)為net idle那么就將該組數據的各個數據包加上RLU的協(xié)議首部,發(fā)送一組數據,接著就將RLU狀態(tài)置為ack wait狀態(tài),等待ACK包的到來。若收到了ACK包,就檢查是否無數據包丟失,若無丟失就向應用層相應的線程發(fā)送消息,通知應用層該組數據已經發(fā)送成功,同時將RLU狀態(tài)置為net idle狀態(tài)。若有數據包丟失就發(fā)送丟失的數據包,直到收到ACK包指示無數據丟失為止,應用層要接收數據時,向FPGA應用層發(fā)送通知包,該通道處于net idle狀態(tài),接收到數據包后轉換為recv wait狀態(tài)接收完一組包后就轉換為net idle狀態(tài)。
當FPGA內存剩余空間大小小于指定閾值時,將RLUDP的ACK確認包首部的FCF字段置一,PC端接收到該ACK包就將相應的通道RLU狀態(tài)置為flow wait狀態(tài),此時應用層線程阻塞在消息等待處,就不會繼續(xù)發(fā)送下一組數據。當FPGA的內存空間大于閾值時就再次發(fā)送ACK數據包并清除相應的FCF標志,此時PC收到該ACK包后就將向應用層線程發(fā)送該組數據發(fā)送完成的消息,應用層可繼續(xù)發(fā)送下一組數據,同時RLU狀態(tài)置為net idle。
本協(xié)議棧的傳輸層及以下各協(xié)議根據uIP和LwIP協(xié)議改寫。uIP和LwIP是瑞典計算機科學院的AdamDunkels等開發(fā)嵌入式TCP/IP協(xié)議棧,uIP協(xié)議棧針對嵌入式系統(tǒng)資源有限的特點保留了網絡通訊必須的協(xié)議[11]。LwIP的主要目的是在保持 TCP/IP協(xié)議主要功能的情況下減少對 RAM的使用[12-13]。在MicroBlaze處理器的主頻限制下,LwIP其他功能會占用大量的時間,從而導致數傳的時間片有限,無法保證較高的傳輸速率。
針對高速數傳需求,本協(xié)議在uIP的基礎上,保留了ARP,IP,ICMP,UDP,在UDP之上架設一層可靠UDP協(xié)議。采用LwIP的協(xié)議棧內存管理模型,在內存中申請一片緩沖池,使用隊列方式來對內存進行管理,提供內存的申請釋放API。MicroBlzae系統(tǒng)采用Xilinx XPS環(huán)境開發(fā)[14],軟件開發(fā)環(huán)境為EDK[15],協(xié)議棧各層的設計如下:
1)網絡接口層:使用了FPGA的DMA模式下MAC IP核,在協(xié)議棧初始化階段將自定義的內存區(qū)指針交給DMA,在MAC IP核中由DMA對該內存區(qū)進行操作,數據發(fā)送操作也是向DMA傳遞指針。2)ARP協(xié)議:接收操作對底層接收的數據包進行解析,只對廣播包機地址為本機的包進行處理,發(fā)送操作在初始化階段發(fā)送ARP請求,并執(zhí)行退避算法,在已存在目標IP映射的情況下,填充MAC地址,以太網協(xié)議類型字段0x8000。3)IP協(xié)議:接收操作對底層接收的數據包長度,校驗和,及協(xié)議等字段進行解析,只處理合法的UDP和ICMP包;發(fā)送操作完成IP首部各字段填充。4)ICMP協(xié)議:對收到的ECHO請求包進行應答。5)UDP協(xié)議:接收操作對端口號進行解析,處理端口匹配的數據包,發(fā)送操作對UDP首部進行填充。
系統(tǒng)性能測試主要為數據速率的測試,運行MicroBlaze,主頻配置為最大值100 MHz。性能測試分為兩個方向:PC到FPGA,發(fā)送116 MB的文件,F(xiàn)PGA只進行接收操作,測試不同的n值(一組包中包的個數)對速率的影響,以及其他一些簡單的功能測試。進行測試時,首先在PC端進行ping的測試如圖6所示,PC端可成功ping通FPGA,用WireShark抓包軟件可看到ping相關的ARP包,ICMP包,接著進行功能復用測試,在發(fā)送調制數據的同時對寄存器進行讀寫操作,可成功配置寄存器,觀察LED可看到配置的寄存器值。

圖6 WireShark抓取的ICMP包
速率測試,改變n值測試文件傳輸時間,得出傳輸速率,n值對應速率測試結果如表1所示。從表中可以看出n值越大速率越高。

表1 速率測試結果
經過改寫后的TCP/IP協(xié)議棧加上RLUDP協(xié)議可完成丟包環(huán)境下的數據傳輸,該通信處理器應用于SOPC環(huán)境下的測控通信數據傳輸,通過接收確認方式完成了高速通信數據的傳輸功能。上位機采用多線程方式,通過多通道的方法完成了FPGA[16-17]下位機多功能復用。文中的流量控制方法很好的解決了CPU在內存資源有限的條件下,對數據傳輸速率的動態(tài)控制問題,目前該接口已應用于相關的測控通信系統(tǒng),運行狀態(tài)穩(wěn)定可靠,速率高,達到了系統(tǒng)設計需求。
[1]高一沅,黃春暉.基于MicroBlaze的以太網通信系統(tǒng)平臺設計的研究[J].現(xiàn)代電子技術,2007(17):29-31.
[2]薛昊,佘勇,姚振東,等.基于MicroBlaze和DM9000A的以太網接口設計[J].通信技術,2013(2):32-34.
[3]何賓.基于AXI4的可編程SOC系統(tǒng)設計[M].北京:清華大學出版社,2011.
[4]Xilinx Inc.MicroBlaze Processor Reference Guide[EB/OL].http: //www.xilinx.com/support/documentation/sw_manuals/xilinx14_ 3/mb_ref_guide.pdf
[5]Xilinx Inc.LogiCORE IP AXI Timer v1.03a[EB/OL](2012). http://www.xilinx.com.
[6]Xilinx Inc.LogiCORE IP AXI Ethernet v3.01a[EB/OL](2012).http://www.xilinx.com/support/documentation/ip_documentation/axi_ethernet/v3_01_a/ds759_axi_ethernet.pdf.
[7]Xilinx Inc.LogiCORE IP AXI DMA v6.02a[EB/OL](2012). http://www.xilinx.com.
[8]Xilinx Inc.LogiCORE IP AXI GPIO v1.01.b[EB/OL](2012). http://www.xilinx.com.
[9]孫鑫.VC++深入詳解[M].北京:電子工業(yè)出版社,2013.
[10]W.Richard Stevens TCP/IP詳解卷1:協(xié)議[M].范建華,胥光輝,等譯.北京:機械工業(yè)出版社,2014.
[11]Dunkels A.uIP-A Free Small TCP/IP Stack[EB/OL].(2002-01-15).http://www.sics.se/adam/uip.
[12]Dunkels A.Design an implementation of the LwIP TCP/IP Stack[EB/OL].http://www.sics.se/adam/lwip.
[13]張燕芳,沈麗.基于Xilinx Spartan-3E和LwIP協(xié)議的以太網通訊[J].核電子學與探測技術,2013(5):540-543.
[14]Xilinx Inc.EDK Profiling User Guide[EB/OL](2012).http:// www.xilinx.com.
[15]Xilinx Inc.OS and Libraries Document Collection[EB/OL](2013).http://www.xilinx.com.
[16]李威,翟社平.模擬路標識別及其FPGA實現(xiàn)[J].電子科技,2016(2):45-47.
[17]黨俊博,李哲,李雅俊.基于FPGA的串口通信電路設計與實現(xiàn)[J].電子科技,2016(7):106-109.
Design of reliable network interface based on MicroBlaze
HOU Hong-jie1,2,WANG Zhu-gang1
(1.National Space Science Center,Chinese Academy of Sciences,Beijing 100190,China;2.University of Chinese Academy of Sciences,Beijing 100190,China)
Microblaze is a kind of soft-core SOPC designed by Xilinx.It is a 32-bit soft-core embedded processor that consist of FPGA logic units.In order to achieve high-rate data transmission from FPGA to computer,a reliable UDP(RLUDP)protocol is proposed in this paper based on uIP and LwIP network protocol stacks.This paper introduces the design and implement of embedded TCP/IP protocol stacks,and illustrates the high-rate data transmission between PC and MicroBlaze according to the proposed protocol.Simple test on system performance is described,which shows that the designed system meets the design requirement.
MicroBlaze;SOPC;reliable UDP;Embeded TCP/IP
TN925
A
1674-6236(2016)21-0105-04
2015-11-12稿件編號:201511117
侯鴻杰(1991—),男,四川宜賓人,碩士研究生。研究方向:時間馴服與時間同步,嵌入式技術。