《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于Flash控制器的FPGA在線加載功能設計
基于Flash控制器的FPGA在線加載功能設計
2019年電子技術應用第1期
林天靜,阮 翔,劉 春
中國電子科技集團第52研究所,浙江 杭州310000
摘要: 傳統(tǒng)的FPGA程序更新的方式是使用開發(fā)工具通過JTAG方式將FPGA程序固化至存儲器件Nor Flash中,當某一復雜系統(tǒng)內需要更新多塊FPGA時,JTAG方式由于同時只能更新一塊FPGA,耗費時間長,并且還必須連接線纜,無法實現(xiàn)遠程更新。因此,提出了一種FPGA在線更新程序的實現(xiàn)方案,該方案可以實現(xiàn)系統(tǒng)內的多塊FPGA程序更新,最大化更新速度的同時,可通過網(wǎng)絡實現(xiàn)遠程更新,便于調試及遠程升級。
關鍵詞: FPGA 在線更新 BPI
中圖分類號: TN47
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.181693
中文引用格式: 林天靜,阮翔,劉春. 基于Flash控制器的FPGA在線加載功能設計[J].電子技術應用,2019,45(1):88-91.
英文引用格式: Lin Tianjing,Ruan Xiang,Liu Chun. Design of FPGA online loading based on Flash controller[J]. Application of Electronic Technique,2019,45(1):88-91.
Design of FPGA online loading based on Flash controller
Lin Tianjing,Ruan Xiang,Liu Chun
The 52th Research Institute of China Electronics Technology Group Corporation,Hangzhou 310000,China
Abstract: Traditional way of FPGA configuration file update is using development tools to write FPGA target code to storage devices such as Nor Flash through the JTAG way.However,when the system becomes complicated with multiple FPGA,it takes a long time to update all the FPGA due to the limitation that the JTAG way can only update FPGA once a time. Therefore this paper proposes a FPGA online updating method,which can update multiple FPGA programs at the same time, greatly shorten the update time and reduce the cost of the system.
Key words : FPGA;online update;BPI

0 引言

    近些年來,由于其靈活可配置性及成本的降低,現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)在嵌入式系統(tǒng)中應用越來越廣泛,不論產(chǎn)品的初期研發(fā)或是后期維護都不可避免地需要頻繁更新FPGA程序。傳統(tǒng)的JTAG方式更新FPGA程序的方式是通過開發(fā)軟件將需固化的文件寫入Nor Flash器件。當系統(tǒng)很復雜且需要更新的FPGA數(shù)量較多時,JTAG方式更新FPGA程序則費時費力且還需拆結構。若在FPGA內部通過邏輯代碼搭建一Flash控制器實現(xiàn)對Flash器件的讀寫操作,即可并行實現(xiàn)系統(tǒng)內每片F(xiàn)PGA對配置文件的在線更新,大大縮短程序固化時間。本文依托于Xilinx公司的FPGA和Spasion公司的Nor Flash,詳細介紹了Flash控制器設計和在線加載功能的實現(xiàn)方法。

1 FPGA配置方式

    以Xilinx Virtex6 系列FPGA為例,對配置文件的加載方式有串行Flash、并行Flash、JTAG方式等,其中最常用的是并行Flash方式(Byte Peripheral Interface Parallel Flash Mode,BPI),其配置模式如圖1所示。

qrs1-t1.gif

    一種實際的FPGA與Nor Flash硬線連接方式如圖2所示。

qrs1-t2.gif

    無論是通過JTAG方式還是通過軟件操作實現(xiàn)程序更新,都是通過控制這些讀寫使能信號及地址線實現(xiàn)配置文件的寫入,F(xiàn)PGA掉電重啟之后再從Flash取出配置數(shù)據(jù)從而實現(xiàn)加載。本文提出的FPGA在線更新程序的方式則是通過FPGA控制邏輯驅動Flash的數(shù)據(jù)和地址,從而為多塊FPGA并行更新程序的實現(xiàn)提供了前提。

2 Flash控制器設計

    Flash器件的基本操作包括讀、寫、擦除等,這些操作都是通過向相應的命令寄存器寫入特定的指令來實現(xiàn)的,這些指令的寫入通過操作與FPGA相連的片選信號(ce_n)、寫使能信號(we_n)、讀使能信號(oe_n)、地址總線(addr[23:0])和數(shù)據(jù)總線(dq[15:0])實現(xiàn)。

    以目前市場上常用的Spasion公司的S29GL-P系列Nor Flash為例,通過FPGA實現(xiàn)的控制器外部接口如圖3所示。

qrs1-t3.gif

    其中,start信號用于啟動控制器模塊對Flash器件實現(xiàn)讀寫操作,在啟動之前,須先告知Flash配置文件大小和配置文件在Flash存儲空間的首地址;data_req、data_in和rd_data_count信號用于與一前端FIFO實現(xiàn)數(shù)據(jù)交互,配置文件先緩存到FIFO中,然后由控制器負責取出并寫入Flash器件;config_status信號用于指示程序更新是否完成。

    該Flash控制器按時間上的先后順序分別實現(xiàn)了對Flash器件的讀ID、擦除和寫緩沖操作,下面將分別進行簡要敘述。

    每次對Flash進行基本的讀寫操作之前,會對Flash芯片進行讀ID操作以檢驗器件的好壞,讀ID涉及的主要操作為向特定寄存器寫入相應的解鎖指令,然后再進行多操作讀出相應的寄存器值,其時序圖及讀結果如圖4所示。

qrs1-t4.gif

    確認了芯片ID無誤,即可進行正確訪問,首先對Flash芯片進行擦除操作。Flash芯片擦除可分為兩種:整片擦除和扇區(qū)擦除。由于實際使用時并未用到整塊Flash存儲空間,而是根據(jù)配置文件的大小選擇合適的扇區(qū)大小存儲配置文件,所以設計中采用的是扇區(qū)擦除方式,時序如圖5所示。

qrs1-t5.gif

    當成功寫入擦除操作指令之后,芯片會進入一個較長的周期等待擦除操作的完成,該期間無法對芯片進行復位之外的其他操作。

    完成了擦除操作之后,即可向Flash寫入配置數(shù)據(jù),其對應的寫緩沖時序如圖6所示。

qrs1-t6.gif

    擦除和讀寫的過程中,地址將進行自動累加且起始地址可變。Flash的寫操作可為單字寫和緩沖寫兩種,由于緩沖寫最大一次可向Flash寫入32個字,為了最大化寫入速度,選擇緩沖寫方式;Flash的讀操作分為單字讀和按頁讀兩種,由于Flash讀數(shù)據(jù)速率較高且系統(tǒng)對讀速率沒有太高要求,本文選擇單字讀方式。

3 工程應用及性能測試

    以一實際項目工程為例,系統(tǒng)中具有10塊FPGA進行程序更新,其在線加載功能系統(tǒng)架構如圖7所示。

qrs1-t7.gif

    系統(tǒng)主控CPU運行在Linux系統(tǒng)下,CPU通過以太網(wǎng)與遠程計算機進行通信調試,同時通過PCIE或SRIO高速總線向每塊FPGA下發(fā)配置數(shù)據(jù),最后再由Flash控制器完成數(shù)據(jù)的寫入。如前文所述,一次寫緩沖操作的數(shù)據(jù)量為32個字,而配置文件的大小有可能不是32個字的整數(shù)倍,所以還需要應用軟件對配置文件進行補齊操作。單個FPGA在線加載流程簡要敘述如圖8所示。

qrs1-t8.gif

    更新單塊FPGA程序時,以一實際測試的3.47 MB大小的配置文件為例,經(jīng)FPGA在線更新程序固化的時間和使用ISE14.7軟件JTAG方式固化的時間如表1所示。

qrs1-b1.gif

    Flash芯片手冊中給出的典型擦除和寫緩沖時間分別0.5 s和480 μs,則可計算出理論上3.47 MB大小的文件固化所需的典型時間約為41 s。由于器件等因素影響,實測時用時往往大于該時間,但總體來說,使用在線更新方式的耗時要比用JTAG方式耗時更少。

    而當更新系統(tǒng)中的10塊FPGA時,由于每塊FPGA均可同時進行在線更新操作,程序固化所消耗的時間與單塊FPGA程序更新時間開銷大致相當,可見并行在線更新方式相較于傳統(tǒng)JTAG方式無疑可以大大縮短時間。

4 配置文件不斷電加載和備份方法

    每次更新完配置之后,通常做法是對FPGA進行斷電重啟實現(xiàn)重新加載,但工程應用時斷電可能會影響系統(tǒng)其他模塊的正常工作。為使FPGA在不斷電的情況下自動加載更新完的配置程序,可通過配置FPGA芯片的PROGRAM_B信號來實現(xiàn),BPI模式下的時序如圖9所示。

qrs1-t9.gif

    考慮到若在配置過程中FPGA發(fā)生斷電等異常,則Flash中的配置文件損壞,F(xiàn)PGA將無法實現(xiàn)加載,需要重新使用JTAG方式燒寫配置文件。為防止該種情況發(fā)生,可分配Flash的一塊區(qū)域用于備份配置文件,發(fā)生FPGA無法正常加載的異常時,可讀取該備份配置文件實現(xiàn)FPGA再次正常加載,但前提是該部分Flash存儲空間預先固化了帶有FPGA在線更新功能的程序。

5 結論

    本文利用FPGA邏輯設計了一款Flash控制器,實現(xiàn)了FPGA在線更新功能,由于FPGA直接操作Flash,因此相比傳統(tǒng)FPGA程序更新方法具有更新速度快、硬件電路精簡、易于系統(tǒng)集成等優(yōu)點,同時能夠實現(xiàn)復雜系統(tǒng)多塊FPGA并行更新程序,大大節(jié)省了程序固化時間,便于項目前期開發(fā)及后期排故調試。

參考文獻

[1] Xilinx UG360,Virtex-6 FPGA configuration user guide[EB/OL].[2015-11-18].http://www.xilinx.com.

[2] Spansion.S29GL-P MirrorBit Flash family datasheet[EB/OL].[2009-11-20].http://www.spansion.com.

[3] 于樂,王嘉良.易于移植的FPGA在線更新控制器設計[J].航空電子技術,2015(4):47-50.

[4] 楊鵬.基于Linux系統(tǒng)的FPGA芯片在線加載的設計和實現(xiàn)[J].電子設計工程,2015(6):161-164.



作者信息:

林天靜,阮  翔,劉  春

(中國電子科技集團第52研究所,浙江 杭州310000)

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