《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于μClinux的FPGA遠(yuǎn)程更新系統(tǒng)的實(shí)現(xiàn)
基于μClinux的FPGA遠(yuǎn)程更新系統(tǒng)的實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2014年第3期
丁 丁1,湯曉斌1,陳立德2,殷樹根2
(1.南京航空航天大學(xué) 材料科學(xué)與技術(shù)學(xué)院,江蘇 南京211106; 2.上海風(fēng)格信息技術(shù)有限公司,
摘要: 針對(duì)Altera公司的Cyclone系列FPGA在特殊環(huán)境中無法使用下載電纜來重新配置芯片的問題,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于μClinux的FPGA遠(yuǎn)程更新系統(tǒng)。該系統(tǒng)利用Altera的片上可編程系統(tǒng)(SoPC)技術(shù),嵌入Nios II軟核處理器,移植μClinux系統(tǒng),通過UART串口接收升級(jí)數(shù)據(jù),通過MTD驅(qū)動(dòng)將升級(jí)數(shù)據(jù)寫入配置芯片EPCS4和CFI存儲(chǔ)芯片。該方法利用FPGA的軟硬件可編程的特點(diǎn),實(shí)現(xiàn)了系統(tǒng)軟硬件同時(shí)在線升級(jí),完成了FPGA的遠(yuǎn)程更新。
關(guān)鍵詞: FPGA μClinux 遠(yuǎn)程更新 UART
中圖分類號(hào): TN47
文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2014)03-0006-03
Implementation of FPGA remote update system based on μClinux
Ding Ding1,Tang Xiaobin1,Chen Lide2,Yin Shugen2
1.College of Material Science and Technology, Nanjing University of Aeronautics and Astronautics, Nanjing 211106,China;2.Shanghai Figure IT Company, Shanghai 200120,China
Abstract: Aimed at the problena of Altera′s Cyclone series FPGA which can′t be used in a special environment using the download cable to reconfigure the chip, we designed and implemented a μClinux-based FPGA remote update system. The system using Altera SoPC technology, which is embedded in a Nios II soft-core processor,to run a μClinux system and transport the data via the UART serial port. The configuration data is written to the memory chip, EPCS4 and CFI, with MTD driver. The method utilizes the hardware and software programmable features of FPGA to complete the online upgrade of FPGA.
Key words : μClinux;FPGA;remote update;UART

    隨著集成電路技術(shù)的進(jìn)一步發(fā)展,FPGA因具備功能靈活、開發(fā)成本低和上市速度快等特點(diǎn),而廣泛應(yīng)用于數(shù)字產(chǎn)品設(shè)計(jì)的各個(gè)領(lǐng)域。目前FPGA配置數(shù)據(jù)一般使用基于靜態(tài)隨機(jī)存儲(chǔ)器SRAM(Static Random Access Memory)的存儲(chǔ)方式,掉電后數(shù)據(jù)消失。因此在實(shí)用中需要為FPGA芯片外加專用配置芯片,在上電時(shí),由這個(gè)專用配置芯片把配置數(shù)據(jù)加載到FPGA中,之后FPGA就可以正常工作。配置芯片通常是基于Flash存儲(chǔ)器的器件。FPGA配置數(shù)據(jù)更新的常用做法是:通過專用的下載電纜把配置數(shù)據(jù)從PC下載到FPGA配置芯片中[1]。這種方法在早期的開發(fā)調(diào)試中顯得非常便利,然而在系統(tǒng)組裝并形成產(chǎn)品后,由于下載電纜接口通常不會(huì)作為系統(tǒng)的一個(gè)外部接口,此時(shí)若想更新FPGA配置數(shù)據(jù)將會(huì)很麻煩,需要把系統(tǒng)重新拆開才能進(jìn)行[2]。因此,在越來越多的系統(tǒng)中希望通過以配置數(shù)據(jù)的遠(yuǎn)程更新來提高系統(tǒng)的可擴(kuò)展性和升級(jí)的靈活性。
    本文針對(duì)Altera公司Cyclone IV系列的一款低功耗、高性能的FPGA芯片EP4CE15F23C8,結(jié)合Altera公司提供的SoPC開發(fā)工具,嵌入Nios II軟核處理器技術(shù),移植μClinux系統(tǒng),通過UART(Universal Asynchronous Receiver/Transmitter)串口獲取升級(jí)數(shù)據(jù)(包括FPGA配置文件和μClinux系統(tǒng)鏡像),并在μClinux系統(tǒng)中添加MTD驅(qū)動(dòng)以完成升級(jí)數(shù)據(jù)寫入Flash存儲(chǔ)器的任務(wù)。該方法利用FPGA的軟硬件可編程的特點(diǎn),實(shí)現(xiàn)了系統(tǒng)軟硬件同時(shí)在線升級(jí),完成了FPGA的遠(yuǎn)程更新。
1 FPGA遠(yuǎn)程更新系統(tǒng)的結(jié)構(gòu)與更新流程
1.1 遠(yuǎn)程更新系統(tǒng)的系統(tǒng)結(jié)構(gòu)

    FPGA遠(yuǎn)程更新系統(tǒng)的結(jié)構(gòu)如圖1所示,該系統(tǒng)主要包括本地系統(tǒng)和遠(yuǎn)程系統(tǒng)。本地系統(tǒng)包括目標(biāo)板和交換板。

    目標(biāo)板的FPGA采用Altera公司Cyclone IV系列的EP4CE15F23C8芯片。該芯片采用65 nm工藝,內(nèi)部包含了15 408個(gè)邏輯單元LE(Logic Elements)、504 KB片內(nèi)隨機(jī)存儲(chǔ)器、56個(gè)嵌入式乘法器、20個(gè)全局時(shí)鐘網(wǎng)絡(luò),具有低功耗、高性能的特點(diǎn)[3]。通過Altera Quartus II軟件中的SoPC Builder工具,在FPGA芯片上構(gòu)建了Nios II軟核處理器、外設(shè)和外設(shè)接口,包括EPCS控制器、SDRAM控制器、三態(tài)橋、UART、通用I/O等[4]。EPCS是Altera提供的專用串行配置芯片,本系統(tǒng)使用EPCS4芯片,它支持多種可配置的時(shí)鐘源,最高支持100 MHz的外部時(shí)鐘源,并且具有4 MB的存儲(chǔ)空間,完全滿足此款FPGA配置數(shù)據(jù)的存儲(chǔ)需要。在本系統(tǒng)中,以Altera Wiki社區(qū)發(fā)布的nios2-linux-20090929.tar內(nèi)核開發(fā)包為基礎(chǔ),在Nios II上移植了μClinux系統(tǒng)[5]。FPGA上還外接了一個(gè)NOR型Flash芯片,用于存儲(chǔ)μClinux系統(tǒng)鏡像。
    交換板采用PowerPC的微處理器,運(yùn)行嵌入式Linux系統(tǒng),交換板與FPGA目標(biāo)板間采用UART串口通信方式。
    遠(yuǎn)程系統(tǒng)通過網(wǎng)絡(luò)接口與交換板相連,是整個(gè)升級(jí)系統(tǒng)的控制中心。
1.2 遠(yuǎn)程更新流程
    FPGA上電啟動(dòng)時(shí),自動(dòng)產(chǎn)生時(shí)序從EPCS中讀取配置文件并進(jìn)行配置。配置完成后,NiosII處理器硬件就已經(jīng)在FPGA內(nèi)部生成,這時(shí)FPGA進(jìn)入主復(fù)位狀態(tài),在內(nèi)部的復(fù)位邏輯作用下,NiosII從其設(shè)定的復(fù)位地址開始執(zhí)行程序。在本系統(tǒng)中設(shè)計(jì)NiosII 處理器上電后從外部Flash開始啟動(dòng)、解壓并加載μClinux的文件系統(tǒng),運(yùn)行相應(yīng)的應(yīng)用程序。因此,F(xiàn)PGA的遠(yuǎn)程更新主要涉及到兩個(gè)文件,分別為FPGA的配置文件和μClinux的系統(tǒng)鏡像。對(duì)于Nios II處理器,完成FPGA的遠(yuǎn)程更新主要需要解決兩個(gè)問題:(1)遠(yuǎn)程更新數(shù)據(jù)的獲??;(2)將配置文件寫入EPCS配置芯片。為了不影響原有系統(tǒng)的運(yùn)行,這兩個(gè)任務(wù)均需在μClinux系統(tǒng)下完成。為此設(shè)計(jì)如下的更新流程。
     (1)升級(jí)文件的處理:FPGA的配置文件需在Quartus II軟件的配置文件輸出選項(xiàng)中添加*.rbf (Raw Binary File,原始二進(jìn)制文件)格式輸出,并作MSB到LSB的字節(jié)變換得到*.img文件。在Linux下構(gòu)建μClinux的開發(fā)環(huán)境,通過make交叉編譯生成elf格式的內(nèi)核鏡像文件zImage,并在Nios II Command Shell中運(yùn)行“nios2-elf-objcopy-O binaryzImagezImage.bin”,得到二進(jìn)制格式的μClinux系統(tǒng)鏡像。
    (2)升級(jí)文件的傳輸:遠(yuǎn)程控制系統(tǒng)完成升級(jí)文件處理后,通過LAN或Internet發(fā)送給PowerPC交換板,最后由交換板通過UART串口發(fā)送給FPGA目標(biāo)板。
    (3)升級(jí)文件的寫入:目標(biāo)板接收升級(jí)文件,完成數(shù)據(jù)校驗(yàn)后將升級(jí)文件寫入相應(yīng)的配置芯片,并在寫入完成后重啟系統(tǒng)。
2 串口文件傳輸?shù)膶?shí)現(xiàn)
2.1 串口文件傳輸協(xié)議

    如前所述,F(xiàn)PGA升級(jí)數(shù)據(jù)在交換板與目標(biāo)板之間通過UART串口傳輸,為了順利完成升級(jí)數(shù)據(jù)的傳輸,定義了一種串口文件傳輸協(xié)議。該協(xié)議采用基于幀傳輸?shù)姆绞?,將升?jí)數(shù)據(jù)進(jìn)行分幀發(fā)送,并在傳輸過程中對(duì)單幀進(jìn)行和校驗(yàn)而對(duì)整個(gè)升級(jí)數(shù)據(jù)進(jìn)行CRC校驗(yàn)。相關(guān)的幀包括:控制幀、信息幀和數(shù)據(jù)幀[6]。
2.1.1 控制幀
    控制幀由交換板在開始傳輸前發(fā)送給目標(biāo)板,幀內(nèi)容包括控制字(升級(jí)命令)、升級(jí)文件的參數(shù)等信息,其構(gòu)成如圖2所示。其中,文件參數(shù)由升級(jí)文件號(hào)、相應(yīng)的總分幀數(shù)、單幀大小、最后一幀大小及文件的CRC校驗(yàn)碼構(gòu)成。文件1對(duì)應(yīng)為FPGA的配置文件,文件2對(duì)應(yīng)為μClinux的系統(tǒng)鏡像。

2.1.2 信息幀
    信息幀由目標(biāo)板反饋給交換板,用于請(qǐng)求分幀數(shù)據(jù)、返回FPGA升級(jí)狀態(tài)等,幀內(nèi)容如圖3所示。

2.1.3 數(shù)據(jù)幀
    數(shù)據(jù)幀由交換板發(fā)送給目標(biāo)板,用于完成升級(jí)數(shù)據(jù)的傳輸,幀內(nèi)容包括分幀號(hào)、分幀數(shù)據(jù)等。
    在升級(jí)數(shù)據(jù)的傳輸過程中,首先由交換板向目標(biāo)板發(fā)送控制幀,用于通知目標(biāo)板進(jìn)入升級(jí)程序,同時(shí)發(fā)送所需升級(jí)的數(shù)據(jù)類型、分幀幀數(shù)及升級(jí)數(shù)據(jù)的CRC校驗(yàn)碼。目標(biāo)板在接收到升級(jí)控制幀后,啟動(dòng)相應(yīng)的接收程序,并向交換板返回信息幀,用于請(qǐng)求分幀數(shù)據(jù)。目標(biāo)板在接收到幀號(hào)請(qǐng)求信息幀后,開始向目標(biāo)板發(fā)送數(shù)據(jù)幀。在傳輸中如有錯(cuò)幀或漏幀,目標(biāo)板均可重發(fā)請(qǐng)求信息幀,這樣不斷重復(fù)即可完成整個(gè)升級(jí)數(shù)據(jù)的傳輸。
2.2 串口傳輸過程中的數(shù)據(jù)丟失現(xiàn)象

 


    在完成了上述串口傳輸協(xié)議相關(guān)代碼的編寫后,在實(shí)際測(cè)試中卻發(fā)現(xiàn),傳輸過程中會(huì)頻繁發(fā)生數(shù)據(jù)丟失的現(xiàn)象。在分析各種可能原因后,確定為目標(biāo)板的UART串口FIFO深度過低所導(dǎo)致。FIFO緩沖區(qū)的深度直接影響通過UART傳輸數(shù)據(jù)所需的CPU開銷,是影響UART性能的關(guān)鍵因素。FIFO的深度越低,在傳輸過程中就需要越多的CPU中斷,尤其在短時(shí)大數(shù)據(jù)量的傳輸過程中就可能出現(xiàn)CPU無法響應(yīng)中斷而發(fā)生數(shù)據(jù)丟失的現(xiàn)象。
    然而Altera的SoPC Builder工具默認(rèn)所添加的UART設(shè)備沒有配帶FIFO,僅有1 B的深度,為此參考Altera Wiki社區(qū)所發(fā)布了帶FIFO的UART組件。這里為FPGA重新配置了FIFOed Uart設(shè)備[7],并將其接收FIFO的深度設(shè)為256 B。
    在使用FIFOed Uart設(shè)備并配置相關(guān)的驅(qū)動(dòng)后,串口傳輸過程中的數(shù)據(jù)丟失的問題得以解決。
3 μClinux下Flash的寫入操作
    在接收完升級(jí)數(shù)據(jù)后,需要完成升級(jí)數(shù)據(jù)寫入相應(yīng)配置芯片的操作。由于配置芯片是基于Flash的設(shè)備,在μClinux下可以通過調(diào)用內(nèi)存技術(shù)設(shè)備MTD(Memory Technology Device)驅(qū)動(dòng)完成相應(yīng)的寫入操作。MTD驅(qū)動(dòng)是Linux下標(biāo)準(zhǔn)的Flash驅(qū)動(dòng)器,它支持大多數(shù)Flash存儲(chǔ)設(shè)備,兼有功能強(qiáng)大的分區(qū)定義和映像工具。MTD在硬件與內(nèi)核之間提供一個(gè)抽象的接口,可理解為 Flash的設(shè)備驅(qū)動(dòng)程序。通過該接口,可像讀寫普通文件一樣對(duì)Flash設(shè)備進(jìn)行讀寫操作。
    Altera Wiki社區(qū)發(fā)布的μClinux基礎(chǔ)開發(fā)包中MTD驅(qū)動(dòng)的分區(qū)配置文件為linux-2.6/arch/nios2/kernel/config.c,根據(jù)相應(yīng)的硬件芯片修改此文件并運(yùn)行“make menuconfig”修改內(nèi)核編譯設(shè)置后,完成MTD驅(qū)動(dòng)的添加[8]。添加驅(qū)動(dòng)成功后,會(huì)在μClinux的dev目錄下生成字符設(shè)備mtd0或塊設(shè)備mtdblock0,通過系統(tǒng)調(diào)用dd命令,“dd if=/tmp/zImage.bin of=/dev/mtdblock0”,即可完成Flash的寫入操作。
    在完成升級(jí)數(shù)據(jù)寫入Flash的操作后,還需要對(duì)寫入的數(shù)據(jù)進(jìn)行CRC校驗(yàn),校驗(yàn)完成后即可重啟系統(tǒng),從而完成了整個(gè)FPGA升級(jí)的任務(wù)。
    本文介紹了一種基于μClinux的FPGA遠(yuǎn)程更新系統(tǒng)的實(shí)現(xiàn)方法,使用該方法不用打開機(jī)箱即可隨時(shí)更新FPCA配置程序,方便了產(chǎn)品在客戶端維護(hù)升級(jí),具有靈活方便、配置時(shí)間短、易于操作的特點(diǎn)。通過長期的實(shí)際運(yùn)行驗(yàn)證了這種升級(jí)方式的正確性和穩(wěn)定性。另外,雖然本文是針對(duì)Altera公司Cyclone系列的FPGA器件而設(shè)計(jì),但也可適用于Altera其他系列的FPGA器件,故其有一定的通用性,并為其他廠商的FPGA器件的遠(yuǎn)程升級(jí)提供參考。
參考文獻(xiàn)
[1] 李蘭英.Nios II嵌入式軟核SOPC設(shè)計(jì)原理及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[2] 李鵬,蘭正龍.用CPLD和Flash實(shí)現(xiàn)FPGA配置[J].電子技術(shù)應(yīng)用,2006,32(6):101-3.
[3] Altera Conproation.Cyclone IV device data sheet[EB/OL]. (2013-05-01)[2013-10-20].http://www.altera.com.cn/literature/hb/cyclone-iv/cyiv53001.pdf,2012.
[4] Altera Conproation.Cyclone IV device handbook[EB/OL]. (2013-05-01)[2013-10-20].http://www.altera.com.cn/lit erature/hb/cyclone-iv/cyclone4handbook.pdf,2012.
[5] Altera Wiki.Install Nios II Linux[EB/OL].(2013-01-14)[2013-10-20].http://www.alterawiki.com/wiki/Install_Nios_II_Linux,2013.
[6] 王媛媛,劉樹林.基于FPGA的串行通信控制系統(tǒng)的設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2011,30(5):57-59.
[7] Altera Wiki.FIFOed Avalon Uart[EB/OL].(2013-06-11)[2013-10-20].http://www.alterawiki.com/wiki/FIFOed_Avalon_Uart,2012.
[8] Altera Wiki.Memory technology device[EB/OL].(2011-11-07)[2013-10-20].http://www.alterawiki.com/wiki/MTD,2013.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。