蔣滬生,柴志雷,鐘傳杰
(江南大學 物聯網學院 輕工過程先進控制教育部重點實驗室,江蘇 無錫214122)
隨著FPGA器件被廣泛的使用,FPGA系統中的網絡數據通信成為當前研究的熱點之一。以太網技術因其數據吞吐量大,傳輸距離遠,布線靈活,與PC端連接方便等優勢得到越來越多的使用。隨著物聯網技術的發展,以太網技術在嵌入式系統中的應用必將越來越多。
目前,FPGA中實現嵌入式以太網的方案多為SOPC實現方案[1-3],這種方式被稱為軟件方式實現方案,它需要在FPGA內部植入硬核處理器或軟核處理器,一方面增加了系統資源消耗,另一方面軟件方式執行一條指令需要多個時鐘周期,運行時間難以估計。而硬件方式實現的以太網方案采用硬件描述語言設計專用硬件電路,占用資源少,執行效率高,得到很多學者關注。文獻 [4]介紹了一種使用開源IP核開發的以太網實現方案,由于IP核設計時一般經過一定的加密處理,其實現的UDP/IP核所消耗的硬件資源達本文系統的20倍,文獻 [5]介紹了一種硬件上實現TCP/IP協議棧的方案,但是沒有對網絡通信協議棧盡可能的裁剪,也沒有對裁剪后的協議棧在移植應用上做出相應處理。
本文以FPGA上的數據傳輸為應用背景,對傳統網絡通信協議協議棧進行了最大限度的裁剪,并采用Verilog HDL以全硬件方式實現了該精簡協議棧,并對其進行可移植性處理。協議棧包括UDP、IP、以及MAC層驅動。在應用系統中,該協議棧作為網絡通信模塊和應用模塊整合在一片FPGA中且具有很好的可移植性。
完整的TCP/IP協議棧是一個規模龐大的協議簇,在FPGA中實現需占用大量資源,因此必須對網絡協議棧進行裁剪[6]。國內外學者對TCP/IP協議棧的剪裁較為成功的案例有LwIP、uIP、Linux IP等,這些協議棧涉及的協議較多,內容較全,移植時需要考慮的問題相對復雜[7-9],如存儲器管理、上層協議與底層驅動的接口等。
本文依據具體應用,分析了FPGA中網絡通信需求:以數據傳輸接收為目的,并保證簡單的測試功能,對FPGA中網絡通信協議棧進行如下裁剪:①應用層:針對系統中無HTTP、FTP等應用,應用層協議全部裁剪。②傳輸層:保留UDP協議。傳輸層中主要協議有TCP協議和UDP協議,TCP為兩臺主機提供面向連接的、可靠的、無重復的雙向數據流傳輸服務,實現連接和關閉連接的過程對系統資源的耗費非常大。而UDP數據傳輸高效、設計實現簡單,在本文系統中其可靠性滿足實際需求,而在一些可靠性要求更高的場合中,可以在應用層編寫重發機制提高可靠性。③網絡層:保留IP層和部分ICMP,其中ICMP只保留Ping功能應答部分。④MAC層由以太網控制器芯片DM9000A提供。
在FPGA中實現網絡協議棧就是依照網絡協議和以太網MAC幀格式[10],對數據封裝后發送,當接收到網絡幀時對網絡幀正確解包,并做出相應處理。FPGA的主程序流程如圖1所示。

圖1 主程序流程
1.1.1 網絡數據幀封裝
網絡數據幀的封裝是從上層往下逐層加入協議首部的過程。網絡數據幀解析與封裝過程相反,即從下往上逐層分析網絡協議。通過詳細的網絡數據幀封裝及解析過程,本文實現了UDP/IP協議、ICMP應答協議、ARP應答協議。
UDP/IP協議實現:
應用層:提供用戶數據,即待封裝數據。
傳輸層:給用戶數據添加UDP包首部。具體操作為填寫源端口號,目的端口號,信息長度,信息校驗和。
網絡層:對上層數據添加IP首部。具體操作為填寫IP首部中必須的一部分數據,包括版本,首部長度,數據報標識符,生存時間,協議,首部校驗和,源地址,目的地址等,其余填入零。
MAC層:對IP數據報添加MAC幀首部。具體操作為填寫源MAC地址,目的MAC地址,協議類型:0x0800。
UDP/IP協議封裝中填入數據中有部分是由外部設置的如:UDP協議中源端口號、目的端口號、信息長度;IP協議中版本、首部長度、數據包標識符等;MAC層中源MAC地址。這些數據在程序中使用宏定義,填寫時直接使用宏定義的值即可完成封裝。
其余協議封裝數據的生成由FPGA完成,以IP首部校驗和計算為例:IP首部各信息由宏定義中獲得,計算時,先將校驗和先置0,其余信息按16bit重組并取反,然后進行流水線的累加處理,并使用延遲進位法,將累加和存于累加和寄存器中,累加和寄存器中的累加和數據同樣倆倆累加。最后將累加和寄存器的值與累加結果相加并取反,即為校驗碼數據。IP首部的校驗碼計算只需要4個周期即可完成。校驗碼計算仿真結果如圖2所示。其計算速度與文獻 [5]中校驗碼計算相比提高了一倍以上。

圖2 IP首部校驗碼計算仿真結果
Ping應答幀封裝實現
網絡層:具體操作為填寫IP首部數據,包括版本,首部長度,數據報標識符,生存時間,協議,首部校驗和,源IP地址,目的IP地址,ICMP協議中用到的類型,代碼,IP校驗和,標志,序列號及數據。
MAC層:MAC層:添加MAC幀首部。具體操作為填寫源 MAC地址,目的 MAC地址,IP協議類型:0x0800。
ARP應答幀封裝實現
數據鏈路層:具體操作為填寫硬件類型,協議類型,硬件地址長度,協議地址長度,操作類型,源MAC地址,源IP地址,目的MAC地址,目的IP地址。
MAC層:添加MAC幀首部。具體操作為填寫源MAC地址,目的MAC地址,ARP協議類型:0x0806。
1.1.2 網絡數據幀解析
網絡數據解包過程與封裝過程相反,系統從以太網控制器的接收緩沖區讀取到數據后,先對目的地址進行判斷,確認目的地址正確后,獲取此包的協議類型。如果是0x0806,則是ARP包,系統接收到PC端廣播的ARP請求幀時,提取發送者IP地址、MAC地址送至ARP應答幀構建模塊,ARP應答幀構建模塊構建ARP應答幀然后送至發送模塊。
如果是0x0800,則是IP包,獲取的有效數據為IP數據報,解析并去除IP報首部,根據協議號判斷是否是UDP包,是則讀取其中的有效數據,存入SRAM中,供其它模塊使用,對于其它數據包,都將從以太網控制器芯片的接受緩沖區中舍棄。
以太網MAC層由以太網控制器芯片DM9000A提供,實現網絡數據幀的收發包括DM9000A初始化和DM9000A收發兩個部分。
1.2.1 DM9000A初始化
以太網控制器DM9000A的初始化需要按照DM9000A的接口時序要求,對其進行內部寄存器設置,本文初始化設計時,分層實現了接口邏輯,最下層的是端口讀寫模塊,第二層是數據鏈路層寄存器讀寫模塊,物理寄存器讀寫模塊是通過調用前兩層讀寫模塊完成的,最上層是初始化模塊,初始化模塊主要內容包括:啟動內部PHY電路,兩次軟復位,設置PHY工作模式,配置控制寄存器,設置MAC地址,使能RX/TX中斷。以太網接口上的LED燈與DM9000A的LED引腳相連,可以指示初始化是否成功。
1.2.2 DM9000A收發
以太網控制器接收和發送數據都采用中斷方式,圖3為DM9000A發送及接收數據的流程圖。具體收發過程祥見文獻 [11]。
為了方便硬件協議棧的移植使用,結合FPGA設計的特點,本設計采用模塊化設計。首先協議棧設計本身含有多個模塊,各模塊之間的調度由協議棧頂層模塊中的狀態機控制。其次協議棧本身可以被當作UDP/IP協議棧模塊調用。另外本設計大量使用宏定義,以減少IO接口數量。IO接口數量是衡量一個設計復雜程度及可移植性的重要標志,當設計IO接口過多引腳連線復雜時,很容易造成移植的過程出現錯誤。以文獻 [12]中提到的頂層模塊為例,不考慮網絡通信模塊與片外SRAM的接口,其使用的IO接口數量達到170個。采用本設計中使用宏定義替換部分IO接口的方法可以將其數目減少至34個,是原接口數目的1/5。在移植UDP/IP協議棧模塊時,需要同時修改其宏文件,設定IP地址、UDP端口、UDP包長度等信息。

圖4為系統硬件框架,主要包括主芯片FPGA,存儲器,以太網控制芯片,以太網接口,JTAG接口電路等組成。FPGA選用Altera公司生產的CycloneⅡ系列EP2C35F484C8型芯片;以太網控制芯片選用Davicom公司的DM9000A,它具備了MAC控制器,簡化了設計流程;存儲器為ISSI公司的61LV25616AL;兩片SRAM交替工作,實現乒乓緩沖,提高了并行性。以太網接口選用HanSun公司的HR911105,它自帶隔離變壓器,簡化了電路的設計。

圖4 系統硬件框架結構
本文協議棧邏輯全部使用Verilog編寫,在Quartus11.1環境下編譯,占用2178個LE (logic elegment)資源,在EP2C35F484C8型FPGA中占用了7%的邏輯資源、整個硬件協議棧邏輯最大運行頻率為78MHz。
2.2.1 UDP發送測試
系統在50M主頻下全速發送UDP數據包,同時使用SignalTapⅡ邏輯分析工具采樣部分DM9000A的控制端口及數據端口。為了提高數據吞吐率,測試中采用系統與PC端直連,不存在以太網中數據包沖突的情況。
圖5是由SignalTapⅡ采樣得到的FPGA輸出的UDP發送數據波形。此時DM9000A的數據總線上為發送數據,此時每隔4個周期發送一個16bit的數據,不考慮數據預處理耗費的時鐘,此時的數據傳輸速率達到了理論最高數據傳輸速率100Mbps。另外,需要注意的是,DM9000A以16bit模式發送數據時,數據口低八位先發送。

圖5 SignalTapⅡ采樣結果
圖6為靜荷大小為1000Byte時,PC端實際抓取到的UDP數據包。抓取工具為WireShark網絡偵聽工具。由圖所知,30秒內抓取到21.5萬個UDP數據包,數據包長度為1042Byte。計算得知此時的數據傳輸率為7.5MB/s。
2.2.2 接收處理測試

圖6 WireShark抓取到的UDP數據包
本文接收處理測試硬件環境與UDP發送測試一致,圖7為PC端執行Ping命令時WireShark抓包工具抓取到的ARP應答及Ping應答數據包。圖中,幀2為ARP應答幀,其中,目的MAC地址和目的IP地址是由ARP請求幀中提取得到,其它數據為宏定義的可變參數。這里DM9000A對于長度小于最小發送長度60的網絡數據幀會自動填充數據至60。幀4,幀6,幀8及幀10為Ping應答包,由圖可以看出,系統具備正確解析數據幀并按協議封裝數據包的能力,硬件封裝實現的Ping應答包響應速度均在1ms以內,可以滿足實際需求。

圖7 WireShark抓取到的ARP應答包
本文以數據傳輸系統為應用背景,對網絡通信協議棧進行了盡可能的裁剪,并以FPGA和DM9000A為硬件平臺,使用Verilog HDL語言,通過FPGA對網絡數據進行封裝、解析、轉存,使用DM9000A對網絡數據進行發送、接收,全硬件方式實現了FPGA中的網絡通信協議棧。該設計既具有以太網傳輸具有的數據率高、傳輸距離長、成本低、通用性強的特點,又融合了FPGA硬件實現的邏輯資源消耗少,可移植性好等優勢。測試結果表明,該硬件網絡協議棧性能穩定,移植方便可靠。
[1]WANG Zhidong,MA Wantai.Implementation of embedded ethernet communcation based on FPGA [J].Mechatronics,2010,16(9):64-67 (in Chinese). [王志東,馬萬太.基于 FPGA 的嵌入式以太網通信 [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的嵌入式三態以太網設計 [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的以太網高速傳輸平臺 [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協議棧簡化實現 [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的移植及其在并行系統中的應用 [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協議棧改進與實現 [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協議棧的移植方法 [J].信息系統與網絡,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的嵌入式三態以太網的設計[J].半導體光電,2010,31 (3):439-442.]