文獻標識碼: B
文章編號: 0258-7998(2014)03-0006-03
隨著集成電路技術的進一步發展,FPGA因具備功能靈活、開發成本低和上市速度快等特點,而廣泛應用于數字產品設計的各個領域。目前FPGA配置數據一般使用基于靜態隨機存儲器SRAM(Static Random Access Memory)的存儲方式,掉電后數據消失。因此在實用中需要為FPGA芯片外加專用配置芯片,在上電時,由這個專用配置芯片把配置數據加載到FPGA中,之后FPGA就可以正常工作。配置芯片通常是基于Flash存儲器的器件。FPGA配置數據更新的常用做法是:通過專用的下載電纜把配置數據從PC下載到FPGA配置芯片中[1]。這種方法在早期的開發調試中顯得非常便利,然而在系統組裝并形成產品后,由于下載電纜接口通常不會作為系統的一個外部接口,此時若想更新FPGA配置數據將會很麻煩,需要把系統重新拆開才能進行[2]。因此,在越來越多的系統中希望通過以配置數據的遠程更新來提高系統的可擴展性和升級的靈活性。
本文針對Altera公司Cyclone IV系列的一款低功耗、高性能的FPGA芯片EP4CE15F23C8,結合Altera公司提供的SoPC開發工具,嵌入Nios II軟核處理器技術,移植μClinux系統,通過UART(Universal Asynchronous Receiver/Transmitter)串口獲取升級數據(包括FPGA配置文件和μClinux系統鏡像),并在μClinux系統中添加MTD驅動以完成升級數據寫入Flash存儲器的任務。該方法利用FPGA的軟硬件可編程的特點,實現了系統軟硬件同時在線升級,完成了FPGA的遠程更新。
1 FPGA遠程更新系統的結構與更新流程
1.1 遠程更新系統的系統結構
FPGA遠程更新系統的結構如圖1所示,該系統主要包括本地系統和遠程系統。本地系統包括目標板和交換板。
目標板的FPGA采用Altera公司Cyclone IV系列的EP4CE15F23C8芯片。該芯片采用65 nm工藝,內部包含了15 408個邏輯單元LE(Logic Elements)、504 KB片內隨機存儲器、56個嵌入式乘法器、20個全局時鐘網絡,具有低功耗、高性能的特點[3]。通過Altera Quartus II軟件中的SoPC Builder工具,在FPGA芯片上構建了Nios II軟核處理器、外設和外設接口,包括EPCS控制器、SDRAM控制器、三態橋、UART、通用I/O等[4]。EPCS是Altera提供的專用串行配置芯片,本系統使用EPCS4芯片,它支持多種可配置的時鐘源,最高支持100 MHz的外部時鐘源,并且具有4 MB的存儲空間,完全滿足此款FPGA配置數據的存儲需要。在本系統中,以Altera Wiki社區發布的nios2-linux-20090929.tar內核開發包為基礎,在Nios II上移植了μClinux系統[5]。FPGA上還外接了一個NOR型Flash芯片,用于存儲μClinux系統鏡像。
交換板采用PowerPC的微處理器,運行嵌入式Linux系統,交換板與FPGA目標板間采用UART串口通信方式。
遠程系統通過網絡接口與交換板相連,是整個升級系統的控制中心。
1.2 遠程更新流程
FPGA上電啟動時,自動產生時序從EPCS中讀取配置文件并進行配置。配置完成后,NiosII處理器硬件就已經在FPGA內部生成,這時FPGA進入主復位狀態,在內部的復位邏輯作用下,NiosII從其設定的復位地址開始執行程序。在本系統中設計NiosII 處理器上電后從外部Flash開始啟動、解壓并加載μClinux的文件系統,運行相應的應用程序。因此,FPGA的遠程更新主要涉及到兩個文件,分別為FPGA的配置文件和μClinux的系統鏡像。對于Nios II處理器,完成FPGA的遠程更新主要需要解決兩個問題:(1)遠程更新數據的獲取;(2)將配置文件寫入EPCS配置芯片。為了不影響原有系統的運行,這兩個任務均需在μClinux系統下完成。為此設計如下的更新流程。
(1)升級文件的處理:FPGA的配置文件需在Quartus II軟件的配置文件輸出選項中添加*.rbf (Raw Binary File,原始二進制文件)格式輸出,并作MSB到LSB的字節變換得到*.img文件。在Linux下構建μClinux的開發環境,通過make交叉編譯生成elf格式的內核鏡像文件zImage,并在Nios II Command Shell中運行“nios2-elf-objcopy-O binaryzImagezImage.bin”,得到二進制格式的μClinux系統鏡像。
(2)升級文件的傳輸:遠程控制系統完成升級文件處理后,通過LAN或Internet發送給PowerPC交換板,最后由交換板通過UART串口發送給FPGA目標板。
(3)升級文件的寫入:目標板接收升級文件,完成數據校驗后將升級文件寫入相應的配置芯片,并在寫入完成后重啟系統。
2 串口文件傳輸的實現
2.1 串口文件傳輸協議
如前所述,FPGA升級數據在交換板與目標板之間通過UART串口傳輸,為了順利完成升級數據的傳輸,定義了一種串口文件傳輸協議。該協議采用基于幀傳輸的方式,將升級數據進行分幀發送,并在傳輸過程中對單幀進行和校驗而對整個升級數據進行CRC校驗。相關的幀包括:控制幀、信息幀和數據幀[6]。
2.1.1 控制幀
控制幀由交換板在開始傳輸前發送給目標板,幀內容包括控制字(升級命令)、升級文件的參數等信息,其構成如圖2所示。其中,文件參數由升級文件號、相應的總分幀數、單幀大小、最后一幀大小及文件的CRC校驗碼構成。文件1對應為FPGA的配置文件,文件2對應為μClinux的系統鏡像。
2.1.2 信息幀
信息幀由目標板反饋給交換板,用于請求分幀數據、返回FPGA升級狀態等,幀內容如圖3所示。
2.1.3 數據幀
數據幀由交換板發送給目標板,用于完成升級數據的傳輸,幀內容包括分幀號、分幀數據等。
在升級數據的傳輸過程中,首先由交換板向目標板發送控制幀,用于通知目標板進入升級程序,同時發送所需升級的數據類型、分幀幀數及升級數據的CRC校驗碼。目標板在接收到升級控制幀后,啟動相應的接收程序,并向交換板返回信息幀,用于請求分幀數據。目標板在接收到幀號請求信息幀后,開始向目標板發送數據幀。在傳輸中如有錯幀或漏幀,目標板均可重發請求信息幀,這樣不斷重復即可完成整個升級數據的傳輸。
2.2 串口傳輸過程中的數據丟失現象
在完成了上述串口傳輸協議相關代碼的編寫后,在實際測試中卻發現,傳輸過程中會頻繁發生數據丟失的現象。在分析各種可能原因后,確定為目標板的UART串口FIFO深度過低所導致。FIFO緩沖區的深度直接影響通過UART傳輸數據所需的CPU開銷,是影響UART性能的關鍵因素。FIFO的深度越低,在傳輸過程中就需要越多的CPU中斷,尤其在短時大數據量的傳輸過程中就可能出現CPU無法響應中斷而發生數據丟失的現象。
然而Altera的SoPC Builder工具默認所添加的UART設備沒有配帶FIFO,僅有1 B的深度,為此參考Altera Wiki社區所發布了帶FIFO的UART組件。這里為FPGA重新配置了FIFOed Uart設備[7],并將其接收FIFO的深度設為256 B。
在使用FIFOed Uart設備并配置相關的驅動后,串口傳輸過程中的數據丟失的問題得以解決。
3 μClinux下Flash的寫入操作
在接收完升級數據后,需要完成升級數據寫入相應配置芯片的操作。由于配置芯片是基于Flash的設備,在μClinux下可以通過調用內存技術設備MTD(Memory Technology Device)驅動完成相應的寫入操作。MTD驅動是Linux下標準的Flash驅動器,它支持大多數Flash存儲設備,兼有功能強大的分區定義和映像工具。MTD在硬件與內核之間提供一個抽象的接口,可理解為 Flash的設備驅動程序。通過該接口,可像讀寫普通文件一樣對Flash設備進行讀寫操作。
Altera Wiki社區發布的μClinux基礎開發包中MTD驅動的分區配置文件為linux-2.6/arch/nios2/kernel/config.c,根據相應的硬件芯片修改此文件并運行“make menuconfig”修改內核編譯設置后,完成MTD驅動的添加[8]。添加驅動成功后,會在μClinux的dev目錄下生成字符設備mtd0或塊設備mtdblock0,通過系統調用dd命令,“dd if=/tmp/zImage.bin of=/dev/mtdblock0”,即可完成Flash的寫入操作。
在完成升級數據寫入Flash的操作后,還需要對寫入的數據進行CRC校驗,校驗完成后即可重啟系統,從而完成了整個FPGA升級的任務。
本文介紹了一種基于μClinux的FPGA遠程更新系統的實現方法,使用該方法不用打開機箱即可隨時更新FPCA配置程序,方便了產品在客戶端維護升級,具有靈活方便、配置時間短、易于操作的特點。通過長期的實際運行驗證了這種升級方式的正確性和穩定性。另外,雖然本文是針對Altera公司Cyclone系列的FPGA器件而設計,但也可適用于Altera其他系列的FPGA器件,故其有一定的通用性,并為其他廠商的FPGA器件的遠程升級提供參考。
參考文獻
[1] 李蘭英.Nios II嵌入式軟核SOPC設計原理及應用[M].北京:北京航空航天大學出版社,2006.
[2] 李鵬,蘭正龍.用CPLD和Flash實現FPGA配置[J].電子技術應用,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的串行通信控制系統的設計[J].微型機與應用,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.