九江精密測試技術(shù)研究所 蘇長青 賀 楠 李大琦 馬曉天 蔣禮威
為解決產(chǎn)品發(fā)布后FPGA軟件的更新維護(hù)問題,提出了一種FPGA在應(yīng)用編程技術(shù)的實現(xiàn)方法。通過在FPGA中嵌入Nios II軟核處理器,并為其擴(kuò)展片上存儲器、FLASH控制器與UART控制器等外設(shè),構(gòu)建出一個完整的片上系統(tǒng),從而實現(xiàn)通過串口接收外部發(fā)送的FPGA配置程序文件,并將其寫入FPGA配置芯片的功能,為FPGA的IAP技術(shù)提供了一種低成本的實現(xiàn)方式。該方案占用的FPGA資源很少,不需要增加專門的硬件電路,軟件開發(fā)也非常簡單,通用性很強(qiáng),具有很好的實用性。
隨著嵌入式技術(shù)的不斷發(fā)展,產(chǎn)品更新?lián)Q代越來越快,新產(chǎn)品發(fā)布周期不斷縮短,產(chǎn)品發(fā)布后FPGA軟件的更新維護(hù)成了一個必須解決的問題。產(chǎn)品返廠維護(hù)或者技術(shù)人員去用戶現(xiàn)場維護(hù)將耗費大量的人力財力,因此必須尋找一種簡單易行、成本低廉的程序更新方法。
傳統(tǒng)的程序燒錄技術(shù)為在系統(tǒng)編程技術(shù)ISP(In-System Programming),就是允許芯片不從印制電路板上取下,就可以簡單而方便地對其進(jìn)行編程,多用于產(chǎn)品開發(fā)階段。目前市面上的FPGA芯片已經(jīng)集成了ISP的功能,通常使用USB Blaster等專用仿真器通過JTAG接口燒錄程序,該種方式需要使用芯片廠商提供的專用軟件開發(fā)環(huán)境如Quartus II等,往往操作復(fù)雜,對維護(hù)人員的技術(shù)水平要求較高。
目前,在應(yīng)用編程技術(shù)IAP(In-Application Programming)正變得越來越流行。該技術(shù)同樣是在板級上進(jìn)行編程,但是可以在程序運(yùn)行過程中獲取新程序并進(jìn)行更新,典型的實現(xiàn)途徑是在程序中包含一小段代碼來完成程序燒錄的功能,該種方式多用于產(chǎn)品維護(hù)中的軟件升級、消除BUG等,操作簡單,不需要產(chǎn)品返廠維護(hù)或技術(shù)人員去用戶現(xiàn)場維護(hù)。目前,針對IAP技術(shù)的研究大多面向DSP、MCU等處理器,而面向FPGA程序升級IAP技術(shù)的研究較少,葉兵等提出了一種針對FPGA的在系統(tǒng)編程設(shè)計,但只適用于XILINX公司的FPGA。
針對上述問題,提出了一種FPGA在應(yīng)用編程技術(shù)的實現(xiàn)方式。通過在FPGA中嵌入Nios II軟核處理器,并為其擴(kuò)展片上存儲器、FLASH控制器與UART控制器等外設(shè),構(gòu)建出一個完整的片上系統(tǒng),從而實現(xiàn)通過串口接收外部發(fā)送的FPGA配置程序文件,并將其寫入外部配置FLASH芯片的功能,為FPGA的IAP技術(shù)提供了一種低成本的實現(xiàn)方式。ISP與IAP程序更新方式優(yōu)缺點對比如表1所示。
FPGA芯片使用SRAM單元來存儲配置數(shù)據(jù),由于 SRAM是非易失性的,因此在FPGA每次上電之后,必須將配置數(shù)據(jù)從配置芯片下載進(jìn)FPGA,通常用于配置FPGA的芯片為SPI接口的串行FLASH芯片。
表1 ISP與IAP程序更新方式對比
典型的FPGA配置電路如圖1所示,其中FPGA為ALTERA公司的CycloneIII系列,配置芯片與FPGA之間通過串行接口相連,F(xiàn)PGA工作在AS(Active Serial Configuration)模式,上電后主動讀取FLASH中的配置數(shù)據(jù),F(xiàn)PGA的JTAG接口引出,可以與USB Blaster、ByteBlaster等下載器連接。基于ISP技術(shù)的配置過程如下:首先通過JTAG接口在FPGA內(nèi)下載Serial Flash Loader,這是芯片商提供的基于JTAG的ISP技術(shù)解決方案。Serial Flash Loader提供了JTAG接口與AS接口之間的一個橋梁,通過Serial Flash Loader,可以將FPGA的配置數(shù)據(jù)通過JTAG接口先發(fā)送至FPGA,然后由FPGA將數(shù)據(jù)寫入FLASH,從而完成FPGA的程序燒錄。
圖1 CycloneIII系列FPGA的配置電路
Nios II處理器是用戶可隨意配置和構(gòu)建的32位嵌入式處理器IP核,采用Avalon總線結(jié)構(gòu)通信接口。在把Nios II內(nèi)核植入FPGA前,用戶可以根據(jù)設(shè)計要求,利用Quartus II開發(fā)軟件,對Nios II及其外圍設(shè)備進(jìn)行構(gòu)建,使該嵌入式系統(tǒng)在硬件結(jié)構(gòu)、功能特點、資源占用等方面全面滿足用戶系統(tǒng)設(shè)計的要求。Nios II系列包括3種產(chǎn)品,分別是:Nios II/f(快速)——最高的系統(tǒng)性能,中等FPGA使用量;Nios II/s(標(biāo)準(zhǔn))——高性能,低FPGA使用量;Nios II/e(經(jīng)濟(jì))——低性能,最低的FPGA使用量。每種都針對不同的性能范圍和成本。不同類型Nios II處理器對比情況如表2所示,所有軟核都是100%代碼兼容,讓設(shè)計者根據(jù)系統(tǒng)需求變化改變CPU,而不會影響現(xiàn)有的軟件投入。
典型的基于Nios II處理器的系統(tǒng)原理框圖如圖2所示,圖中FPGA內(nèi)部實現(xiàn)了Nios II處理器,還擴(kuò)展了包括SDRAM控制器、定時器、串口、LCD控制器等許多外設(shè),顯示了軟核處理器強(qiáng)大靈活的擴(kuò)展能力。
通過1.1節(jié)FPGA配置電路的介紹可知,只要把芯片商提供Serial Flash Loader的功能在FPGA內(nèi)部用自己的代碼實現(xiàn),并把對外的JTAG接口更改為更簡單的串口,就可以達(dá)到IAP的功能。
方案原理如圖3所示,在FPGA內(nèi)部移植Nios II處理器,擴(kuò)展FLASH控制器、UART控制器、片上RAM等外設(shè),其它非必要外設(shè)均不擴(kuò)展,Nios II處理器也選擇經(jīng)濟(jì)型內(nèi)核,以節(jié)約其占用的FPGA資源,降低成本。該IAP方案接口簡單實用,可靠性強(qiáng),通用性強(qiáng),在FPGA資源足夠的情況下,甚至無需更改硬件,就可在現(xiàn)有設(shè)計中實現(xiàn)IAP的功能。方案中的FLASH控制器、UART控制器、定時器等外設(shè)均提供了Avalon總線接口,定義片上系統(tǒng)時,只要給不同外設(shè)分配不同的地址空間與外部中斷即可實現(xiàn)NiosII處理器對其訪問,非常方便。
表2 Nios II軟核處理器型號
在Quartus II開發(fā)環(huán)境下,用戶可使用Qsys工具方便地構(gòu)建基于Nios II處理器的片上系統(tǒng),它提供了圖形化環(huán)境。根據(jù)2.3節(jié)中總體方案的需求,本設(shè)計需要構(gòu)建的NiosII軟核系統(tǒng)包括時鐘、CPU、片上SRAM、定時器、FLASH控制器,為了調(diào)試方便,還添加了JTAG UART用于輸出調(diào)試信息、PIO用于控制LED燈來指示程序的運(yùn)行。
圖2 Nios II處理器系統(tǒng)框圖
圖3 基于Nios II處理器的IAP方案
添加完本系統(tǒng)所有的外設(shè)之后,要為其分配基地址和中斷請求優(yōu)先級(IRQ)。由于對外設(shè)的尋址地址沒有嚴(yán)格的要求,因此,采用Qsys提供的Auto-Assign Base Address自動分配優(yōu)先級。本系統(tǒng)總共有4個中斷觸發(fā),由于Qsys不能做出關(guān)于最好的IRQ分配的有根據(jù)的猜測,因此手動來分配中斷優(yōu)先級。為了不引起傳輸數(shù)據(jù)的錯誤導(dǎo)致通訊故障,故選擇JTAG UART模塊和UART傳輸模塊的中斷優(yōu)先級分別為0、1;把系統(tǒng)硬件重新配置的FLASH控制器的中斷優(yōu)先級定為2,以提高系統(tǒng)的復(fù)位響應(yīng);系統(tǒng)的定時中斷優(yōu)先級定為3。為了保證系統(tǒng)上電后從外部的FLASH開始運(yùn)行,需要將Nios II處理器的復(fù)位向量指向FLASH控制器,地址為0x00021000,異常向量表指向片上RAM,地址為0x00010020。完成地址與中斷優(yōu)先級分配的片上系統(tǒng)如圖4所示。
在Qsys中完成片上系統(tǒng)設(shè)計并成功編譯之后,會生成該片上系統(tǒng)的原理圖符號,以及基于硬件描述語言的例化示例,方便用戶將片上系統(tǒng)與其它的邏輯設(shè)計集成在一起。本系統(tǒng)的硬件設(shè)計,采用基于原理圖的設(shè)計方式,添加鎖相環(huán)模塊將外部50MHz時鐘倍頻至100MHz,提供給片上系統(tǒng)。硬件設(shè)計原理圖如圖5所示,為所有輸入輸出端口分配對應(yīng)管腳之后就可以編譯生成FPGA配置數(shù)據(jù)文件,完成硬件電路的設(shè)計。
圖4 完整的Nios II片上系統(tǒng)
圖5 硬件設(shè)計頂層原理圖
圖6 IAP軟件流程圖
ALTER公司提供了支持Nios II處理器的軟件開發(fā)套件Nios II EDS,該開發(fā)套件采用基于Eclipse的圖形用戶接口,包括編譯器、集成開發(fā)環(huán)境(IDE),JTAG調(diào)試器,實時操作系統(tǒng)(RTOS)和TCP/IP協(xié)議棧等,功能豐富,調(diào)試方便。對于片上系統(tǒng)的各種外設(shè),ALTERA公司以板級支持包(BSP)的形式提供了完整的接口驅(qū)動函數(shù),并將其集成在硬件抽象層(HAL)系統(tǒng)庫中允許用戶使用統(tǒng)一的應(yīng)用程序接口(API)來控制片上系統(tǒng)的各種外設(shè)。例如FLASH控制器,BSP中提供了alt_epcs_flash_write、alt_epcs_flash_read、alt_epcs_flash_get_info、alt_epcs_flash_erase_block、alt_epcs_flash_write_block等接口函數(shù)分別用于FLASH的寫數(shù)據(jù)、讀數(shù)據(jù)、獲取信息、塊擦除以及塊寫入等操作,只要調(diào)用這些接口函數(shù)就可實現(xiàn)對FLASH的操作,用戶只需專注應(yīng)用程序的開發(fā),而不必在驅(qū)動開發(fā)上花費大量的時間,降低應(yīng)用程序的開發(fā)難度。
在開發(fā)過程中首先用JTAG接口的ISP方式完成程序燒錄,在Nios II處理器燒錄進(jìn)FPGA后,后續(xù)的程序更新即可通過串口完成,Nios II處理器從串口獲得FPGA的配置程序,并通過FLASH控制器完成對FLASH配置芯片的編程,程序流程如圖6所示。
在IAP軟件開發(fā)過程中,比較關(guān)鍵的一點是,Quartus II生成的FPGA配置數(shù)據(jù)文件格式為SOF(SRAM object file),而Nios II處理器軟件編譯后生成的文件格式為ELF(executable and linking format file),這兩個文件需要使用ALTERA公司提供的工具軟件sof2flash與elf-2flash將其轉(zhuǎn)換為適合FLASH燒寫的二進(jìn)制格式,合并后一起寫入FLASH即可完成FPGA的程序更新。
通過在FPGA中嵌入Nios II處理器,并為其擴(kuò)展片上存儲器、定時器、FLASH控制器與UART控制器等外設(shè),構(gòu)建出一個完整的片上系統(tǒng),通過串口接收外部發(fā)送的FPGA配置程序文件,并將其寫入外部配置FLASH芯片,成功實現(xiàn)了FPGA的在應(yīng)用編程。
該方案無需增加專門的硬件電路,只占用FPGA小一部分的邏輯資源,資源足夠的情況下,可以移植到ALTERA公司所有型號的FPGA中;軟件開發(fā)也非常簡單,通用性很強(qiáng),并且成本低廉,具有很好的實用性。