蔣滬生,柴志雷,鐘傳杰
(江南大學 物聯(lián)網(wǎng)學院 輕工過程先進控制教育部重點實驗室,江蘇 無錫214122)
隨著FPGA器件被廣泛的使用,F(xiàn)PGA系統(tǒng)中的網(wǎng)絡數(shù)據(jù)通信成為當前研究的熱點之一。以太網(wǎng)技術因其數(shù)據(jù)吞吐量大,傳輸距離遠,布線靈活,與PC端連接方便等優(yōu)勢得到越來越多的使用。隨著物聯(lián)網(wǎng)技術的發(fā)展,以太網(wǎng)技術在嵌入式系統(tǒng)中的應用必將越來越多。
目前,F(xiàn)PGA中實現(xiàn)嵌入式以太網(wǎng)的方案多為SOPC實現(xiàn)方案[1-3],這種方式被稱為軟件方式實現(xiàn)方案,它需要在FPGA內(nèi)部植入硬核處理器或軟核處理器,一方面增加了系統(tǒng)資源消耗,另一方面軟件方式執(zhí)行一條指令需要多個時鐘周期,運行時間難以估計。而硬件方式實現(xiàn)的以太網(wǎng)方案采用硬件描述語言設計專用硬件電路,占用資源少,執(zhí)行效率高,得到很多學者關注。文獻 [4]介紹了一種使用開源IP核開發(fā)的以太網(wǎng)實現(xiàn)方案,由于IP核設計時一般經(jīng)過一定的加密處理,其實現(xiàn)的UDP/IP核所消耗的硬件資源達本文系統(tǒng)的20倍,文獻 [5]介紹了一種硬件上實現(xiàn)TCP/IP協(xié)議棧的方案,但是沒有對網(wǎng)絡通信協(xié)議棧盡可能的裁剪,也沒有對裁剪后的協(xié)議棧在移植應用上做出相應處理。
本文以FPGA上的數(shù)據(jù)傳輸為應用背景,對傳統(tǒng)網(wǎng)絡通信協(xié)議協(xié)議棧進行了最大限度的裁剪,并采用Verilog HDL以全硬件方式實現(xiàn)了該精簡協(xié)議棧,并對其進行可移植性處理。協(xié)議棧包括UDP、IP、以及MAC層驅動。在應用系統(tǒng)中,該協(xié)議棧作為網(wǎng)絡通信模塊和應用模塊整合在一片F(xiàn)PGA中且具有很好的可移植性。
完整的TCP/IP協(xié)議棧是一個規(guī)模龐大的協(xié)議簇,在FPGA中實現(xiàn)需占用大量資源,因此必須對網(wǎng)絡協(xié)議棧進行裁剪[6]。國內(nèi)外學者對TCP/IP協(xié)議棧的剪裁較為成功的案例有LwIP、uIP、Linux IP等,這些協(xié)議棧涉及的協(xié)議較多,內(nèi)容較全,移植時需要考慮的問題相對復雜[7-9],如存儲器管理、上層協(xié)議與底層驅動的接口等。
本文依據(jù)具體應用,分析了FPGA中網(wǎng)絡通信需求:以數(shù)據(jù)傳輸接收為目的,并保證簡單的測試功能,對FPGA中網(wǎng)絡通信協(xié)議棧進行如下裁剪:①應用層:針對系統(tǒng)中無HTTP、FTP等應用,應用層協(xié)議全部裁剪。②傳輸層:保留UDP協(xié)議。傳輸層中主要協(xié)議有TCP協(xié)議和UDP協(xié)議,TCP為兩臺主機提供面向連接的、可靠的、無重復的雙向數(shù)據(jù)流傳輸服務,實現(xiàn)連接和關閉連接的過程對系統(tǒng)資源的耗費非常大。而UDP數(shù)據(jù)傳輸高效、設計實現(xiàn)簡單,在本文系統(tǒng)中其可靠性滿足實際需求,而在一些可靠性要求更高的場合中,可以在應用層編寫重發(fā)機制提高可靠性。③網(wǎng)絡層:保留IP層和部分ICMP,其中ICMP只保留Ping功能應答部分。④MAC層由以太網(wǎng)控制器芯片DM9000A提供。
在FPGA中實現(xiàn)網(wǎng)絡協(xié)議棧就是依照網(wǎng)絡協(xié)議和以太網(wǎng)MAC幀格式[10],對數(shù)據(jù)封裝后發(fā)送,當接收到網(wǎng)絡幀時對網(wǎng)絡幀正確解包,并做出相應處理。FPGA的主程序流程如圖1所示。
圖1 主程序流程
1.1.1 網(wǎng)絡數(shù)據(jù)幀封裝
網(wǎng)絡數(shù)據(jù)幀的封裝是從上層往下逐層加入?yún)f(xié)議首部的過程。網(wǎng)絡數(shù)據(jù)幀解析與封裝過程相反,即從下往上逐層分析網(wǎng)絡協(xié)議。通過詳細的網(wǎng)絡數(shù)據(jù)幀封裝及解析過程,本文實現(xiàn)了UDP/IP協(xié)議、ICMP應答協(xié)議、ARP應答協(xié)議。
UDP/IP協(xié)議實現(xiàn):
應用層:提供用戶數(shù)據(jù),即待封裝數(shù)據(jù)。
傳輸層:給用戶數(shù)據(jù)添加UDP包首部。具體操作為填寫源端口號,目的端口號,信息長度,信息校驗和。
網(wǎng)絡層:對上層數(shù)據(jù)添加IP首部。具體操作為填寫IP首部中必須的一部分數(shù)據(jù),包括版本,首部長度,數(shù)據(jù)報標識符,生存時間,協(xié)議,首部校驗和,源地址,目的地址等,其余填入零。
MAC層:對IP數(shù)據(jù)報添加MAC幀首部。具體操作為填寫源MAC地址,目的MAC地址,協(xié)議類型:0x0800。
UDP/IP協(xié)議封裝中填入數(shù)據(jù)中有部分是由外部設置的如:UDP協(xié)議中源端口號、目的端口號、信息長度;IP協(xié)議中版本、首部長度、數(shù)據(jù)包標識符等;MAC層中源MAC地址。這些數(shù)據(jù)在程序中使用宏定義,填寫時直接使用宏定義的值即可完成封裝。
其余協(xié)議封裝數(shù)據(jù)的生成由FPGA完成,以IP首部校驗和計算為例:IP首部各信息由宏定義中獲得,計算時,先將校驗和先置0,其余信息按16bit重組并取反,然后進行流水線的累加處理,并使用延遲進位法,將累加和存于累加和寄存器中,累加和寄存器中的累加和數(shù)據(jù)同樣倆倆累加。最后將累加和寄存器的值與累加結果相加并取反,即為校驗碼數(shù)據(jù)。IP首部的校驗碼計算只需要4個周期即可完成。校驗碼計算仿真結果如圖2所示。其計算速度與文獻 [5]中校驗碼計算相比提高了一倍以上。
圖2 IP首部校驗碼計算仿真結果
Ping應答幀封裝實現(xiàn)
網(wǎng)絡層:具體操作為填寫IP首部數(shù)據(jù),包括版本,首部長度,數(shù)據(jù)報標識符,生存時間,協(xié)議,首部校驗和,源IP地址,目的IP地址,ICMP協(xié)議中用到的類型,代碼,IP校驗和,標志,序列號及數(shù)據(jù)。
MAC層:MAC層:添加MAC幀首部。具體操作為填寫源 MAC地址,目的 MAC地址,IP協(xié)議類型:0x0800。
ARP應答幀封裝實現(xiàn)
數(shù)據(jù)鏈路層:具體操作為填寫硬件類型,協(xié)議類型,硬件地址長度,協(xié)議地址長度,操作類型,源MAC地址,源IP地址,目的MAC地址,目的IP地址。
MAC層:添加MAC幀首部。具體操作為填寫源MAC地址,目的MAC地址,ARP協(xié)議類型:0x0806。
1.1.2 網(wǎng)絡數(shù)據(jù)幀解析
網(wǎng)絡數(shù)據(jù)解包過程與封裝過程相反,系統(tǒng)從以太網(wǎng)控制器的接收緩沖區(qū)讀取到數(shù)據(jù)后,先對目的地址進行判斷,確認目的地址正確后,獲取此包的協(xié)議類型。如果是0x0806,則是ARP包,系統(tǒng)接收到PC端廣播的ARP請求幀時,提取發(fā)送者IP地址、MAC地址送至ARP應答幀構建模塊,ARP應答幀構建模塊構建ARP應答幀然后送至發(fā)送模塊。
如果是0x0800,則是IP包,獲取的有效數(shù)據(jù)為IP數(shù)據(jù)報,解析并去除IP報首部,根據(jù)協(xié)議號判斷是否是UDP包,是則讀取其中的有效數(shù)據(jù),存入SRAM中,供其它模塊使用,對于其它數(shù)據(jù)包,都將從以太網(wǎng)控制器芯片的接受緩沖區(qū)中舍棄。
以太網(wǎng)MAC層由以太網(wǎng)控制器芯片DM9000A提供,實現(xiàn)網(wǎng)絡數(shù)據(jù)幀的收發(fā)包括DM9000A初始化和DM9000A收發(fā)兩個部分。
1.2.1 DM9000A初始化
以太網(wǎng)控制器DM9000A的初始化需要按照DM9000A的接口時序要求,對其進行內(nèi)部寄存器設置,本文初始化設計時,分層實現(xiàn)了接口邏輯,最下層的是端口讀寫模塊,第二層是數(shù)據(jù)鏈路層寄存器讀寫模塊,物理寄存器讀寫模塊是通過調用前兩層讀寫模塊完成的,最上層是初始化模塊,初始化模塊主要內(nèi)容包括:啟動內(nèi)部PHY電路,兩次軟復位,設置PHY工作模式,配置控制寄存器,設置MAC地址,使能RX/TX中斷。以太網(wǎng)接口上的LED燈與DM9000A的LED引腳相連,可以指示初始化是否成功。
1.2.2 DM9000A收發(fā)
以太網(wǎng)控制器接收和發(fā)送數(shù)據(jù)都采用中斷方式,圖3為DM9000A發(fā)送及接收數(shù)據(jù)的流程圖。具體收發(fā)過程祥見文獻 [11]。
為了方便硬件協(xié)議棧的移植使用,結合FPGA設計的特點,本設計采用模塊化設計。首先協(xié)議棧設計本身含有多個模塊,各模塊之間的調度由協(xié)議棧頂層模塊中的狀態(tài)機控制。其次協(xié)議棧本身可以被當作UDP/IP協(xié)議棧模塊調用。另外本設計大量使用宏定義,以減少IO接口數(shù)量。IO接口數(shù)量是衡量一個設計復雜程度及可移植性的重要標志,當設計IO接口過多引腳連線復雜時,很容易造成移植的過程出現(xiàn)錯誤。以文獻 [12]中提到的頂層模塊為例,不考慮網(wǎng)絡通信模塊與片外SRAM的接口,其使用的IO接口數(shù)量達到170個。采用本設計中使用宏定義替換部分IO接口的方法可以將其數(shù)目減少至34個,是原接口數(shù)目的1/5。在移植UDP/IP協(xié)議棧模塊時,需要同時修改其宏文件,設定IP地址、UDP端口、UDP包長度等信息。
圖4為系統(tǒng)硬件框架,主要包括主芯片F(xiàn)PGA,存儲器,以太網(wǎng)控制芯片,以太網(wǎng)接口,JTAG接口電路等組成。FPGA選用Altera公司生產(chǎn)的CycloneⅡ系列EP2C35F484C8型芯片;以太網(wǎng)控制芯片選用Davicom公司的DM9000A,它具備了MAC控制器,簡化了設計流程;存儲器為ISSI公司的61LV25616AL;兩片SRAM交替工作,實現(xiàn)乒乓緩沖,提高了并行性。以太網(wǎng)接口選用HanSun公司的HR911105,它自帶隔離變壓器,簡化了電路的設計。
圖4 系統(tǒng)硬件框架結構
本文協(xié)議棧邏輯全部使用Verilog編寫,在Quartus11.1環(huán)境下編譯,占用2178個LE (logic elegment)資源,在EP2C35F484C8型FPGA中占用了7%的邏輯資源、整個硬件協(xié)議棧邏輯最大運行頻率為78MHz。
2.2.1 UDP發(fā)送測試
系統(tǒng)在50M主頻下全速發(fā)送UDP數(shù)據(jù)包,同時使用SignalTapⅡ邏輯分析工具采樣部分DM9000A的控制端口及數(shù)據(jù)端口。為了提高數(shù)據(jù)吞吐率,測試中采用系統(tǒng)與PC端直連,不存在以太網(wǎng)中數(shù)據(jù)包沖突的情況。
圖5是由SignalTapⅡ采樣得到的FPGA輸出的UDP發(fā)送數(shù)據(jù)波形。此時DM9000A的數(shù)據(jù)總線上為發(fā)送數(shù)據(jù),此時每隔4個周期發(fā)送一個16bit的數(shù)據(jù),不考慮數(shù)據(jù)預處理耗費的時鐘,此時的數(shù)據(jù)傳輸速率達到了理論最高數(shù)據(jù)傳輸速率100Mbps。另外,需要注意的是,DM9000A以16bit模式發(fā)送數(shù)據(jù)時,數(shù)據(jù)口低八位先發(fā)送。
圖5 SignalTapⅡ采樣結果
圖6為靜荷大小為1000Byte時,PC端實際抓取到的UDP數(shù)據(jù)包。抓取工具為WireShark網(wǎng)絡偵聽工具。由圖所知,30秒內(nèi)抓取到21.5萬個UDP數(shù)據(jù)包,數(shù)據(jù)包長度為1042Byte。計算得知此時的數(shù)據(jù)傳輸率為7.5MB/s。
2.2.2 接收處理測試
圖6 WireShark抓取到的UDP數(shù)據(jù)包
本文接收處理測試硬件環(huán)境與UDP發(fā)送測試一致,圖7為PC端執(zhí)行Ping命令時WireShark抓包工具抓取到的ARP應答及Ping應答數(shù)據(jù)包。圖中,幀2為ARP應答幀,其中,目的MAC地址和目的IP地址是由ARP請求幀中提取得到,其它數(shù)據(jù)為宏定義的可變參數(shù)。這里DM9000A對于長度小于最小發(fā)送長度60的網(wǎng)絡數(shù)據(jù)幀會自動填充數(shù)據(jù)至60。幀4,幀6,幀8及幀10為Ping應答包,由圖可以看出,系統(tǒng)具備正確解析數(shù)據(jù)幀并按協(xié)議封裝數(shù)據(jù)包的能力,硬件封裝實現(xiàn)的Ping應答包響應速度均在1ms以內(nèi),可以滿足實際需求。
圖7 WireShark抓取到的ARP應答包
本文以數(shù)據(jù)傳輸系統(tǒng)為應用背景,對網(wǎng)絡通信協(xié)議棧進行了盡可能的裁剪,并以FPGA和DM9000A為硬件平臺,使用Verilog HDL語言,通過FPGA對網(wǎng)絡數(shù)據(jù)進行封裝、解析、轉存,使用DM9000A對網(wǎng)絡數(shù)據(jù)進行發(fā)送、接收,全硬件方式實現(xiàn)了FPGA中的網(wǎng)絡通信協(xié)議棧。該設計既具有以太網(wǎng)傳輸具有的數(shù)據(jù)率高、傳輸距離長、成本低、通用性強的特點,又融合了FPGA硬件實現(xiàn)的邏輯資源消耗少,可移植性好等優(yōu)勢。測試結果表明,該硬件網(wǎng)絡協(xié)議棧性能穩(wěn)定,移植方便可靠。
[1]WANG Zhidong,MA Wantai.Implementation of embedded ethernet communcation based on FPGA [J].Mechatronics,2010,16(9):64-67 (in Chinese). [王志東,馬萬太.基于 FPGA 的嵌入式以太網(wǎng)通信 [J].機電一體化,2010,16 (9):64-67.]
[2]de Souza R N,IFSC Sao Jose Brazil,Muniz D N,et al.Ethernet communication platform for synthesized devices in xinlinx FPGA[C]//EUROCON International Conference on Computer as a Tool.Lisbon:IEEE Conference Publications,2011.
[3]YANG Hancheng,WANG Fang,ZHANG Jiajie,et al.Design of embedded tri-mode ethernet based on FPGA [J].Computer Engineering,2007,33 (15):139-141 (in Chinese).[楊瀚程,王芳,張佳杰,等.基于FPGA的嵌入式三態(tài)以太網(wǎng)設計 [J].計算機工程,2007,33 (15):139-141].
[4]Nikolaos Alachiotis,Simon A Berger,Alexandros Stamatakis.Efficient PC-FPGA communication over gigabit ethernet [C]//Computer and Information Technology.Bradford:IEEE Conference Publications,2011.
[5]MA Wenchao,ZHANG Tao.Ethernet high-speed transmission platform based on FPGA [J].Computer Engineering,2012,38 (1):242-244 (in Chinese).[馬文超,張濤.一種基于FPGA的以太網(wǎng)高速傳輸平臺 [J].計算機工程,2012,38 (1):242-244.]
[6]XU Haijun,LIU Jingang,WANG Yihua.Simplified realization of embedded TCP/IP protocol stack based on ARM core[J].Application Research of Computers,2009,23 (10):251-253 (in Chinese). [徐海軍,劉金剛,王易華.基于ARM核的嵌入式TCP/IP協(xié)議棧簡化實現(xiàn) [J].計算機應用研究,2009,23 (10):251-253.]
[7]ZHAO Hu,LI Ying,YOU Qian.LwIP transplantation and its application in parallel system [J].Information Technology,2010,10 (1):170-172 (in Chinese). [趙虎,黎英,游謙.LwIP的移植及其在并行系統(tǒng)中的應用 [J].信息技術2010,10 (1):170-172.]
[8]CHEN Shuo,YU Chunhai,PAN Feng.Improvement and implementation of ulP on network time protocol [J].Computer Engineering and Applications,2011,47 (36):76-79 (in Chinese).[陳碩,于春海,潘豐.基于NTP的uIP協(xié)議棧改進與實現(xiàn) [J].計算機工程與應用,2011,47 (36):76-79.]
[9]LI Shidong.Transplantation method of Linux IP stack [J].Information System and Network,2012,42 (6):5-7 (in Chinese).[李士東.開源Linux中IP協(xié)議棧的移植方法 [J].信息系統(tǒng)與網(wǎng)絡,2012,42 (6):5-7.]
[10]Richard Stevens W.TCP/IP illustrated volume 1:The protocols[M].Beijing:China Machine Press,2012:107-109.
[11]DAVICOM Semiconductor. DM9000A16-bit 10/100M Ethernet controller with processor interface.48pin/LQFP.Product Brief Data sheet Circuit [EB/OL].http://www.davicom.com.tw/page1.aspx?no=143762.2008-5.
[12]TU Rui,OU Chun,LIU Bichen,et al.Design of embedded tri-mode ethernet based on FPGA [J].Semiconductor Optoelectronics,2010,31 (3):439-442 (in Chinese).[涂銳,歐春,劉必晨,等.基于FPGA的嵌入式三態(tài)以太網(wǎng)的設計[J].半導體光電,2010,31 (3):439-442.]