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