《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于Flash控制器的FPGA在線加載功能設(shè)計(jì)
基于Flash控制器的FPGA在線加載功能設(shè)計(jì)
2019年電子技術(shù)應(yīng)用第1期
林天靜,阮 翔,劉 春
中國電子科技集團(tuán)第52研究所,浙江 杭州310000
摘要: 傳統(tǒng)的FPGA程序更新的方式是使用開發(fā)工具通過JTAG方式將FPGA程序固化至存儲器件Nor Flash中,當(dāng)某一復(fù)雜系統(tǒng)內(nèi)需要更新多塊FPGA時(shí),JTAG方式由于同時(shí)只能更新一塊FPGA,耗費(fèi)時(shí)間長,并且還必須連接線纜,無法實(shí)現(xiàn)遠(yuǎn)程更新。因此,提出了一種FPGA在線更新程序的實(shí)現(xiàn)方案,該方案可以實(shí)現(xiàn)系統(tǒng)內(nèi)的多塊FPGA程序更新,最大化更新速度的同時(shí),可通過網(wǎng)絡(luò)實(shí)現(xiàn)遠(yuǎn)程更新,便于調(diào)試及遠(yuǎn)程升級。
關(guān)鍵詞: FPGA 在線更新 BPI
中圖分類號: TN47
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.181693
中文引用格式: 林天靜,阮翔,劉春. 基于Flash控制器的FPGA在線加載功能設(shè)計(jì)[J].電子技術(shù)應(yīng)用,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)中應(yīng)用越來越廣泛,不論產(chǎn)品的初期研發(fā)或是后期維護(hù)都不可避免地需要頻繁更新FPGA程序。傳統(tǒng)的JTAG方式更新FPGA程序的方式是通過開發(fā)軟件將需固化的文件寫入Nor Flash器件。當(dāng)系統(tǒng)很復(fù)雜且需要更新的FPGA數(shù)量較多時(shí),JTAG方式更新FPGA程序則費(fèi)時(shí)費(fèi)力且還需拆結(jié)構(gòu)。若在FPGA內(nèi)部通過邏輯代碼搭建一Flash控制器實(shí)現(xiàn)對Flash器件的讀寫操作,即可并行實(shí)現(xiàn)系統(tǒng)內(nèi)每片F(xiàn)PGA對配置文件的在線更新,大大縮短程序固化時(shí)間。本文依托于Xilinx公司的FPGA和Spasion公司的Nor Flash,詳細(xì)介紹了Flash控制器設(shè)計(jì)和在線加載功能的實(shí)現(xiàn)方法。

1 FPGA配置方式

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

qrs1-t1.gif

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

qrs1-t2.gif

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

2 Flash控制器設(shè)計(jì)

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

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

qrs1-t3.gif

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

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

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

qrs1-t4.gif

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

qrs1-t5.gif

    當(dāng)成功寫入擦除操作指令之后,芯片會進(jìn)入一個(gè)較長的周期等待擦除操作的完成,該期間無法對芯片進(jìn)行復(fù)位之外的其他操作。

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

qrs1-t6.gif

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

3 工程應(yīng)用及性能測試

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

qrs1-t7.gif

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

qrs1-t8.gif

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

qrs1-b1.gif

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

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

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

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

qrs1-t9.gif

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

5 結(jié)論

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

參考文獻(xiàn)

[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在線更新控制器設(shè)計(jì)[J].航空電子技術(shù),2015(4):47-50.

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



作者信息:

林天靜,阮  翔,劉  春

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

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