楊定定 施慧彬 錢巨 李依桐
摘要:隨著FPGA在嵌入式領域的快速發展和網絡技術的日益成熟,基于FPGA的網絡開發成為嵌入式系統研究的重要分支。本文系統地研究了FPGA網絡通信,并成功運用Xilinx開發平臺EDK構建一個基于總線AXI4的嵌入式網絡服務系統。系統包括硬件系統設計和軟件程序設計,即采用MicroBlaze微處理器軟核,Xilkernel嵌入式操作系統和lwip以太網協議,實現了通過Web瀏覽器對開發板的實時控制和網絡數據回傳的實時顯示。這一設計在Spartan 6 Atlys開發平臺上得以實現和驗證,為需要使用該系列開發板進行的網絡通信設計提供了很好的指導作用。本文網絡版地址:http://www.eepw.com.cn/article/164385.htm
關鍵詞:FPGA;總線AXI4;lwip以太網;實時控制
DOI: 10.3969/j.issn.1005-5517.2013.9.006
*基金項目:國家自然科學基金項目(NSFC60903026)
引言
隨著嵌入式系統的發展和Internet的普及,越來越多的嵌入式系統引進Web Server和遠程等概念。以太網以其速度快、成本低,成為嵌入式Web Server和遠程文件傳輸接入網絡的主要方式。因此,實現基于以太網的嵌入式Web Server和遠程文件傳輸具有十分重要的實際意義。
本設計采用Spartan 6 XCSLX45芯片Atlys FPGA開發板,其具有容量大、資源多、性價比適中等特點,此外Atlys配備了各種高端接口,包括千兆以太網、HDMI視頻輸入輸出、128MByte DDR2存儲陣列、AC97 Codec及USB接口,其采用的是Marvell公司的千兆以太網(GbE)PHY收發器88E1111,支持GMII接口,GMII接口支持三種速度模式10/100/1000Mbit,這為本文的以太網通信提供了網絡通信條件。同時,AXI總線是ARM高級微控制器總線結構的一部分,擁有高產率、高靈活、廣泛IP可用性等優勢[1]。本文采用AXI4總線結合Atlys上的GMII接口,設計并實現了lwip以太網通信,為今后在嵌入式通信領域的進一步研究奠定了基礎。
系統的設計
本文將會從系統硬軟件兩方面的設計和實現進行闡述,本設計是基于Spartan 6 Atlys硬件開發平臺,利用Xilinx ISE 13.2軟件開發平臺進行硬軟件的設計,由于EDK集成的XPS(Xilinx Platform Studio)硬件設計平臺和SDK(Xilinx Software Development Kit)軟件設計平臺,本文的lwip以太網通信嵌入式系統的設計將會分成硬軟系統設計兩部分進行詳細地介紹。
系統間的數據交互是通過千兆以太網實現的[2],下面對關鍵IP核:AXI_DMA、Ethernet IP核[3]進行簡要的介紹。
E T H E R N E T _ d m a即A X I _ DMA(AXI直接內存訪問),是Xilinx嵌入式開發套件(EDK)中自帶的IP軟核,它為內存和AXI流型目標外圍設備提供高帶寬的直接內存訪問,它通過從CPU上卸載數據移動任務來體現分散/收集功能,如AXI以太網之間提供高速數據移動。
Ethernet核通過32位的AXI4-Lite接口子集為內部寄存器提供了一個控制接口,AXI4-Lite接口支持單拍讀和寫的數據傳輸(無突發傳輸)。發送和接收數據接口都是通過AXI4-Stream接口。AXI Ethernet通過AXI4-Lite總線接口連接到MicroBlaze處理器內核上,允許訪問寄存器,同時32位AXI4-Stream總線可供以太網數據在AXI Ethernet上發送和接收。在硬件沒有負載條件下,該AXI4-Stream總線提供TCP/UDP的部分校驗和。
由于本設計中使用Spartan 6 Atlys系列,本文為該系列的網絡通信研究提供的方法:使用Soft Ethernet IP核,設置使用GMII模式,該IP核是soft TEMAC需要特定的license,可在官方網站上下載。Ethernet核可以計算發送TCP/UDP校驗和以及驗證發送TCP/UDP校驗和,使用此邏輯可以顯著地提高最大以太網總線數據傳輸率,同時降低處理器對以太網任務的利用率。系統的MicroBlaze微處理器通過AXILITE總線接口訪問AXI DMA,分散/收集引擎從MCB_DDR2中查找緩沖區描述符,然后協調AXI Ethernet和MCB_DDR2之間的主要數據傳輸。例如MCB_DDR2中的參數設置:
P A R A M E T E R C _ I N T E R C O N N E C T _ S 0 _ A X I _ MASTERS = microblaze_0.M_AXI_ DC & microblaze_0.M_AXI_IC & ETHERNET_dma.M_AXI_SG & ETHERNET_dma.M_AXI_MM2S & ETHERNET_dma.M_AXI_S2MM
以及Ethernet中的接口設置:
BUS_INTERFACE AXI_STR_ TXD = ETHERNET_dma_txd
BUS_INTERFACE AXI_STR_TXC= ETHERNET_dma_txc
BUS_INTERFACE AXI_STR_RXS= ETHERNET_dma_rxs
BUS_INTERFACE AXI_STR_ RXD = ETHERNET_dma_rxd
通過上述設置和IP核的加入,一個基于AXI4總線lwip以太網嵌入式硬件系統搭建完畢,在Xilinx XPS硬件系統設計工具中修改相應的ucf約束文件,即可通過Hardware->Generate Bitstream產生比特流文件供后續軟件系統設計的調用。
軟件系統的設計
本文的軟件系統主要分為三部分:文件系統的建立、FTP遠程傳輸文件設計以及HTP(超文本傳輸協議)服務[4]利用網頁對Atlys開發板進行遠程顯示及實時控制的設計,從而使傳統控制設備轉變為具備了以TCP/ IP為底層通信協議,Web技術為核心[5]的Internet控制設備。軟件系統采用Xilinx ISE集成的Xilkernel系統內核,通過設置選擇相應的庫文件,如本文所需要的lwip130(用于輕量級以太網的通信,TCP/IP協議的一種,并且了解了輕量級TCP/IP協議棧和一般操作系統的TCP/IP協議棧的區別[6])和xilmfs(用于文件存儲系統)的庫文件,設計程序時調用所配置系統的庫文件、系統頭文件以及自定義的一些程序文件,從而設計出完整的lwip以太網通信系統。
以下先介紹Xilkernel系統內核主要參數的設置以及多線程的調用方式:
PARAMETER OS_NAME = xilkernel
PAR AMETER PTHRE AD_ STACK_SIZE = 8192
PA R A M E T E R C O N F I G _ PTHREAD_MUTEX = true
PARAMETER CONFIG_TIME = true
PARAMETER CONFIG_SEMA = true
PARMETER MAX_SEM = 50
PARMETER MAX_SEM_WAITQ= 20
PARAMETER ENHANCED_ FEATURES = true
PARAMETER CONFIG_YIELD = true
P A R A M E T E R S TA T I C _ PTHREAD_TABLE = ((run_kerl,1))//系統訪問入口函數run_kerl()
Xilkernel系統使用多線程通信的方法,通過調用相應的線程來實現對應的功能,如下述建立初始線程,訪問network_thread()函數:
PARAMETER PROC_INSTANCE= microblaze_0
PARAMETER NUMBYTES = 400000
PARAMETER BASE_ADDRESS = 0xC4000000
PARAMETER INIT_TYPE = MFSINIT_IMAGE
PARAMETER NEED_UTILS = true
END
最后,在xmd下執行
d o w - d a t a F : / E D K _ l a b / Ethernet13_2AXI/SDK/memfs/image. mfs 0xc4000000命令,下載文件系統鏡像到指定地址上,在軟件程序中調用xilmfs庫文件中定義的mfs_init_ fs(),mfs_exists_fle()等庫函數即可確定文件系統是否成功建立,同時文件系統也可供后續FTP設計中的文件上傳和下載作存儲器使用。
FTP文件傳輸設計
本文主要是通過以太網上傳和下載文件到MCB_DDR2上的文件系統中,通過調用文件系統中的mfs_file_ open(),mfs_file_read(),mfs_file_ write()以及mfs_fle_close()等庫函數進行文件系統的訪問。
以下是對lwip130庫文件的設置:BEGIN LIBRRY
PARAMETER LIBRARY_NAME = lwip130
PARAMETER LIBRARY_VER = 3.01.a
PARAMETER PROC_INSTANCE= microblaze_0
PARAMETER API_MODE = SOCKET_API
END
由以上的設置可以看出本文是基于Xilkernel內核系統的Socket API編程來實現以太網通信,設置MCB_DDR2作為文件存儲系統的存儲器進行文件的存儲和調用。
case TFTP_RRQ://讀文件
tftp_extract_filename(fname, args->request);printf("TFTP RRQ (read request): %s\r\n", fname);
tftp_process_read(sd, &args->from, fname);break;
case TFTP_WRQ://寫文件
tftp_extract_filename(fname, args->request);printf("TFTP WRQ (write request): %s\r\n", fname);
tfp_process_write(sd, &args->from, fname);break;
上述TFTP上傳和下載程序就是采用Socket API編程,調用lwip130庫中的庫函數編程來實現文件傳輸。
系統的實現與驗證
將主機的I P地址設置為1 9 2 . 1 6 8 . 1 . 1,子網掩碼為255.255.255.0,網關為192.168.1.1,將Atlys FPGA上的以太網口與主機電腦的以太網口使用網線連接,以便進行tftp文件上傳下載操作以及網頁對開發板的遠程動態顯示,同時將開發板上的串口與主機的串口使用串口線進行連接,可以進行串口通信,也可以將相應的操作結果顯示到主機屏幕上,圖3為命令操作界面,圖4為超級終端顯示指示信息和操作反饋信息,通過本機上的瀏覽器訪問192.168.1.10,如圖5為訪問顯示結果。
系統的驗證分成兩部分:運用網口通信的驗證和串口通信的驗證。
結束語
本文詳細介紹了利用Atlys開發平臺使用AXI總線設計lwip以太網通信的嵌入式系統,以及在Xilkernel系統上設置lwip130協議棧以及xilmfs文件系統協議棧開發嵌入式FTP以及web服務器的過程,開發的FTP具有遠程傳輸的功能,Web服務器具有遠程動態控制FPGA開發板LED燈亮滅以及動態顯示撥碼開關的狀態的功能,正是由于網絡在嵌入式領域的引入,因此實現基于以太網的嵌入式Web Server和遠程文件傳輸具有十分重要的實際意義,本設計為今后更深入的嵌入式系統遠程監控、遠程傳輸以及控制的研究做準備,也為即將進行的網絡遠程重構的實現提供網絡通信條件,是其中的關鍵技術之一。
參考文獻:
[1] 楊定定,施慧彬.基于AXI總線的MicroBlaze雙核SoPC系統設計[J].電子產品世界,2012,19,(1)
[2] 王長清,陳棟.基于FPGA的千兆以太網通信板的設計與實現[J].河南師范大學學報:自然科學版,2011,39,(1)
[3] Xilinx[Z/OL].Xilinx, http://www.xilinx.com/support/ documentation/ip_documentation/axi_dma_ds781.pdf
[4] 楊俊,呂建平,徐峰柳.基于uC/OS-II和Lwip的嵌入式Web服務器實現[J].電氣自動化:嵌入式系統,2011,33,(3)
[5] 李磊,楊柏林,胡維華.嵌入式Web服務器軟件的設計和實現[J].計算機工程與設計,2003,24,(10)
[6] 李慶江.基于Lwip協議棧的嵌入式Web服務器的設計及實現[J].山東輕工業學院學報,2008,22,(4)
[7] 張亞魁.基于LWIP的嵌入式WEB服務器的研究與實現[D].合肥工業大學碩士論文,2009:32-39
[8] Xilinx[Z/OL].Xilinx, http://www.xilinx.com/support/ documentation/ip_documentation/ds759_axi_ethernet.pdf