基于Altera FPGA無操作系統的LWIP移植
由于環(huán)境的特殊性,不僅要求設備具有較高的性能,也對設備的體積功耗等提出了嚴格的要求。為增加系統運行的可靠性,硬件設備需盡可能的緊湊。在滿足系統運行需求的前提下,硬件中分立元件越少越好?;诂F場可編程門陣列(FPGA)的以太網設計是一個較好的解決方案。
本文引用地址:http://www.ex-cimer.com/article/201609/303790.htmSOPC Builder是一種特殊的嵌入式系統,其是片上系統,即由單個芯片完成系統的主要邏輯功能,并具有靈活的設計方式,可裁剪、可擴充和升級、且具備軟硬件在系統可編程功能。NiosⅡ嵌入式處理器是Altera公司推出的采用哈佛結構、具有32位指令集的第二代可編程軟核處理器,其最大優(yōu)勢是模塊化的硬件結構,在設計階段根據實際需求來增減外設的種類和數量。LWIP是瑞士計算機科學院的Adam Dunkela等開發(fā)出的一套用于嵌入式系統的開放源代碼TCP/IP協議棧。一般情況下,LWIP既可移植到操作系統上,又可在無操作系統的情況下獨立運行。LWIP實現的主要優(yōu)點是在保持TCP/IP協議主要功能的基礎上,又減少了其對RAM的占用,這使得LWIP協議適合在嵌入式系統中使用。
1 移植過程及設計流程
1.1 系統的組成
以軟核NiosⅡ為核心,在FPGA中搭建存儲器、DMA、三速以太網MAC等多種外設的SOPC系統,在片外配置三速以太網物理層芯片(PHY)。通過對TCP/IP協議棧的移植以及基于UDP協議的網絡編程實現以太網應用。系統整體設計方案如圖1所示,系統設計主要分整體硬件電路設計、基于FPGA的SOPC系統設計和系統軟件設計。
1.2 系統硬件設計
硬件模塊主要由FPGA模塊、網絡接口模塊及電源模塊等組成。核心器件是FPGA,其作為SOPC系統的搭載平臺,并對其他硬件進行控制。網絡接口模塊選用Marvell公司的三速以太網物理層芯片88e1111,硬件結構如圖2所示。
1.3 使用SOPC Builder搭建硬件環(huán)境
用SOPC Builder工具從NiosⅡ處理器內核和開發(fā)套件提供的外設列表中選取合適的CPU,存儲器以及各自的外圍器件,并定制和配置其作用;分配外設地址及中斷號;設定復位地址;最后生成系統。硬件開發(fā)使用Quanus II和SOPC Builder CUI處理器庫選擇并配置外設。設計中除了必要的外設外還需添加MAC子層,MAC是以太網控制器的核心,主要提供與上層協議間的接口及與PHY設備間的介質無關接口,并對以太網數據包進行封裝、解封裝以及錯誤監(jiān)測等。設計選擇三速以太網(10/100/1 000 Mbit·s-1)MAC,其結構如圖3所示。
FIFO用于緩存接收或發(fā)送的數據。設計采用M9K存儲器塊作為FIFO,設置發(fā)送FIFO為2 048×32 bit,接收FIFO設置為512×32 bit,因系統主要用于向上位機傳送數據并接收上位機控制命令,因此接收FIFO需求較小。
在與PHY通信一側,三速以太網MAC核提供RGMII接口,工作在全雙工模式,并提供PHY管理接口。其中,PHY管理接口提供4個信號,分別是數據管理時鐘MDC、管理數據輸入MDIO_in、管理數據輸出MDIO_out:以及管理數據輸出使能MDIO_oen。由于在PHY芯片上只有時鐘MDC和雙向數據接口MDIO,所以MAC與PHY對接時中間需要一個雙向三態(tài)緩沖器,連接電路如圖4所示。
1.4 系統軟件設計LWIP的移植
LWIP的移植可分為兩大類,第一類是只移植內核核心,此時用戶應用程序的編寫只能基于raw/callback API進行;第二類是移植內核核心和上層API函數模塊,此時用戶可使用3種API進行編程,即除了raw/callback API外,還有sequentia API和BSD-style socket API。本文進行的是第一種移植,該移植較為簡單,移植者只需完成頭文件的定義,同時根據使用的具體網卡情況完成ethernetif.c中函數的編寫。
介紹LWIP的源代碼結構。解壓后,源代碼目錄共有doc、src和test 3個文件夾。其中,doc文件夾下包含了幾個與協議棧使用相關的文本文檔,較為重要的文件有兩個:rawa pi.txt為告訴讀者如何使用協議棧的raw/callback API進行編程,其通過直接與協議棧內核函數交互以實現編程;sys_arch.txt在移植時被使用到,其中描述了移植說明,規(guī)定了移植者需實現的函數、宏定義等。Test文件夾則是LWIP提供的一些協議棧的內核測試程序。文件夾src包含了協議棧內核的所有源代碼。
在NiosⅡ中建立新工程,添加srccore文件夾下的所有文件,同時包括其下IPV4文件夾中的所有文件。應該注意,這里添加了較多的文件,但其中有些是可條件編譯的,如文件sys.c,若不提供操作系統模擬層的文件,則該文件不會被編譯。接著添加netif文件夾中的loopif.c、etharp.c、ethernetif.c文件到工程中,同時在源文件目錄下新建lwipopts.h、perf.h和cc.h這3個頭文件,并同時將其添進工程。這3個頭文件是內核要求用戶在移植時需完成的頭文件。
Cc.h文件主要完成協議棧內部使用的數據類型定義,用戶應根據具體編譯器和處理器特性定義這些數據類型的長度;此外,cc.h文件還要完成臨界代碼的保護、協議棧調試信息輸出相關的宏和大小端的定義等。
Perf. h文件是與系統統計和測量相關的頭文件,該頭文件和平臺的處理器密切相關,本文平臺無需使用任何統計和測量功能。因此,該頭文件中的兩個宏直接定義為空。
最后一個頭文件lwipopts.h,其包含用戶對協議棧內核的參數設置,在內核的opt.h文件中,包含了內核所有參數的默認配置,當用戶在lwipopts.h中配置相關參數,若用戶對某個參數未配置,則內核將使用opt.h中的默認值。需注意,在移植時重新定義某些內核參數是必要的,否則協議??赡軣o法正常運行。
評論