文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.181693
中文引用格式: 林天靜,,阮翔,劉春. 基于Flash控制器的FPGA在線加載功能設(shè)計[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.
0 引言
近些年來,,由于其靈活可配置性及成本的降低,,現(xiàn)場可編程門陣列(Field Programmable Gate Array,FPGA)在嵌入式系統(tǒng)中應(yīng)用越來越廣泛,,不論產(chǎn)品的初期研發(fā)或是后期維護都不可避免地需要頻繁更新FPGA程序,。傳統(tǒng)的JTAG方式更新FPGA程序的方式是通過開發(fā)軟件將需固化的文件寫入Nor Flash器件。當(dāng)系統(tǒng)很復(fù)雜且需要更新的FPGA數(shù)量較多時,,JTAG方式更新FPGA程序則費時費力且還需拆結(jié)構(gòu),。若在FPGA內(nèi)部通過邏輯代碼搭建一Flash控制器實現(xiàn)對Flash器件的讀寫操作,即可并行實現(xiàn)系統(tǒng)內(nèi)每片F(xiàn)PGA對配置文件的在線更新,,大大縮短程序固化時間,。本文依托于Xilinx公司的FPGA和Spasion公司的Nor Flash,詳細(xì)介紹了Flash控制器設(shè)計和在線加載功能的實現(xiàn)方法,。
1 FPGA配置方式
以Xilinx Virtex6 系列FPGA為例,,對配置文件的加載方式有串行Flash,、并行Flash、JTAG方式等,,其中最常用的是并行Flash方式(Byte Peripheral Interface Parallel Flash Mode,,BPI),其配置模式如圖1所示,。
一種實際的FPGA與Nor Flash硬線連接方式如圖2所示,。
無論是通過JTAG方式還是通過軟件操作實現(xiàn)程序更新,都是通過控制這些讀寫使能信號及地址線實現(xiàn)配置文件的寫入,,F(xiàn)PGA掉電重啟之后再從Flash取出配置數(shù)據(jù)從而實現(xiàn)加載,。本文提出的FPGA在線更新程序的方式則是通過FPGA控制邏輯驅(qū)動Flash的數(shù)據(jù)和地址,從而為多塊FPGA并行更新程序的實現(xiàn)提供了前提,。
2 Flash控制器設(shè)計
Flash器件的基本操作包括讀,、寫、擦除等,,這些操作都是通過向相應(yīng)的命令寄存器寫入特定的指令來實現(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所示,。
其中,start信號用于啟動控制器模塊對Flash器件實現(xiàn)讀寫操作,,在啟動之前,,須先告知Flash配置文件大小和配置文件在Flash存儲空間的首地址;data_req,、data_in和rd_data_count信號用于與一前端FIFO實現(xiàn)數(shù)據(jù)交互,,配置文件先緩存到FIFO中,然后由控制器負(fù)責(zé)取出并寫入Flash器件,;config_status信號用于指示程序更新是否完成,。
該Flash控制器按時間上的先后順序分別實現(xiàn)了對Flash器件的讀ID、擦除和寫緩沖操作,,下面將分別進行簡要敘述,。
每次對Flash進行基本的讀寫操作之前,,會對Flash芯片進行讀ID操作以檢驗器件的好壞,,讀ID涉及的主要操作為向特定寄存器寫入相應(yīng)的解鎖指令,然后再進行多操作讀出相應(yīng)的寄存器值,,其時序圖及讀結(jié)果如圖4所示,。
確認(rèn)了芯片ID無誤,即可進行正確訪問,首先對Flash芯片進行擦除操作,。Flash芯片擦除可分為兩種:整片擦除和扇區(qū)擦除,。由于實際使用時并未用到整塊Flash存儲空間,而是根據(jù)配置文件的大小選擇合適的扇區(qū)大小存儲配置文件,,所以設(shè)計中采用的是扇區(qū)擦除方式,,時序如圖5所示。
當(dāng)成功寫入擦除操作指令之后,,芯片會進入一個較長的周期等待擦除操作的完成,,該期間無法對芯片進行復(fù)位之外的其他操作。
完成了擦除操作之后,,即可向Flash寫入配置數(shù)據(jù),,其對應(yīng)的寫緩沖時序如圖6所示。
擦除和讀寫的過程中,,地址將進行自動累加且起始地址可變,。Flash的寫操作可為單字寫和緩沖寫兩種,由于緩沖寫最大一次可向Flash寫入32個字,,為了最大化寫入速度,,選擇緩沖寫方式;Flash的讀操作分為單字讀和按頁讀兩種,,由于Flash讀數(shù)據(jù)速率較高且系統(tǒng)對讀速率沒有太高要求,,本文選擇單字讀方式。
3 工程應(yīng)用及性能測試
以一實際項目工程為例,,系統(tǒng)中具有10塊FPGA進行程序更新,,其在線加載功能系統(tǒng)架構(gòu)如圖7所示。
系統(tǒng)主控CPU運行在Linux系統(tǒng)下,,CPU通過以太網(wǎng)與遠(yuǎn)程計算機進行通信調(diào)試,,同時通過PCIE或SRIO高速總線向每塊FPGA下發(fā)配置數(shù)據(jù),最后再由Flash控制器完成數(shù)據(jù)的寫入,。如前文所述,,一次寫緩沖操作的數(shù)據(jù)量為32個字,而配置文件的大小有可能不是32個字的整數(shù)倍,,所以還需要應(yīng)用軟件對配置文件進行補齊操作,。單個FPGA在線加載流程簡要敘述如圖8所示。
更新單塊FPGA程序時,,以一實際測試的3.47 MB大小的配置文件為例,,經(jīng)FPGA在線更新程序固化的時間和使用ISE14.7軟件JTAG方式固化的時間如表1所示。
Flash芯片手冊中給出的典型擦除和寫緩沖時間分別0.5 s和480 μs,,則可計算出理論上3.47 MB大小的文件固化所需的典型時間約為41 s,。由于器件等因素影響,,實測時用時往往大于該時間,但總體來說,,使用在線更新方式的耗時要比用JTAG方式耗時更少,。
而當(dāng)更新系統(tǒng)中的10塊FPGA時,由于每塊FPGA均可同時進行在線更新操作,,程序固化所消耗的時間與單塊FPGA程序更新時間開銷大致相當(dāng),,可見并行在線更新方式相較于傳統(tǒng)JTAG方式無疑可以大大縮短時間。
4 配置文件不斷電加載和備份方法
每次更新完配置之后,,通常做法是對FPGA進行斷電重啟實現(xiàn)重新加載,,但工程應(yīng)用時斷電可能會影響系統(tǒng)其他模塊的正常工作。為使FPGA在不斷電的情況下自動加載更新完的配置程序,,可通過配置FPGA芯片的PROGRAM_B信號來實現(xiàn),,BPI模式下的時序如圖9所示。
考慮到若在配置過程中FPGA發(fā)生斷電等異常,,則Flash中的配置文件損壞,,F(xiàn)PGA將無法實現(xiàn)加載,需要重新使用JTAG方式燒寫配置文件,。為防止該種情況發(fā)生,,可分配Flash的一塊區(qū)域用于備份配置文件,發(fā)生FPGA無法正常加載的異常時,,可讀取該備份配置文件實現(xiàn)FPGA再次正常加載,,但前提是該部分Flash存儲空間預(yù)先固化了帶有FPGA在線更新功能的程序。
5 結(jié)論
本文利用FPGA邏輯設(shè)計了一款Flash控制器,,實現(xiàn)了FPGA在線更新功能,,由于FPGA直接操作Flash,因此相比傳統(tǒng)FPGA程序更新方法具有更新速度快,、硬件電路精簡,、易于系統(tǒng)集成等優(yōu)點,同時能夠?qū)崿F(xiàn)復(fù)雜系統(tǒng)多塊FPGA并行更新程序,,大大節(jié)省了程序固化時間,,便于項目前期開發(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].航空電子技術(shù),2015(4):47-50.
[4] 楊鵬.基于Linux系統(tǒng)的FPGA芯片在線加載的設(shè)計和實現(xiàn)[J].電子設(shè)計工程,,2015(6):161-164.
作者信息:
林天靜,,阮 翔,劉 春
(中國電子科技集團第52研究所,,浙江 杭州310000)