文獻(xiàn)標(biāo)識(shí)碼: 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.
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)對(duì)Flash器件的讀寫操作,,即可并行實(shí)現(xiàn)系統(tǒng)內(nèi)每片F(xiàn)PGA對(duì)配置文件的在線更新,大大縮短程序固化時(shí)間,。本文依托于Xilinx公司的FPGA和Spasion公司的Nor Flash,,詳細(xì)介紹了Flash控制器設(shè)計(jì)和在線加載功能的實(shí)現(xiàn)方法。
1 FPGA配置方式
以Xilinx Virtex6 系列FPGA為例,,對(duì)配置文件的加載方式有串行Flash,、并行Flash、JTAG方式等,,其中最常用的是并行Flash方式(Byte Peripheral Interface Parallel Flash Mode,,BPI),其配置模式如圖1所示,。
一種實(shí)際的FPGA與Nor Flash硬線連接方式如圖2所示,。
無論是通過JTAG方式還是通過軟件操作實(shí)現(xiàn)程序更新,都是通過控制這些讀寫使能信號(hào)及地址線實(shí)現(xiàn)配置文件的寫入,,F(xiàn)PGA掉電重啟之后再從Flash取出配置數(shù)據(jù)從而實(shí)現(xiàn)加載,。本文提出的FPGA在線更新程序的方式則是通過FPGA控制邏輯驅(qū)動(dòng)Flash的數(shù)據(jù)和地址,從而為多塊FPGA并行更新程序的實(shí)現(xiàn)提供了前提,。
2 Flash控制器設(shè)計(jì)
Flash器件的基本操作包括讀,、寫、擦除等,,這些操作都是通過向相應(yīng)的命令寄存器寫入特定的指令來實(shí)現(xiàn)的,,這些指令的寫入通過操作與FPGA相連的片選信號(hào)(ce_n)、寫使能信號(hào)(we_n)、讀使能信號(hào)(oe_n),、地址總線(addr[23:0])和數(shù)據(jù)總線(dq[15:0])實(shí)現(xiàn),。
以目前市場上常用的Spasion公司的S29GL-P系列Nor Flash為例,通過FPGA實(shí)現(xiàn)的控制器外部接口如圖3所示,。
其中,,start信號(hào)用于啟動(dòng)控制器模塊對(duì)Flash器件實(shí)現(xiàn)讀寫操作,在啟動(dòng)之前,,須先告知Flash配置文件大小和配置文件在Flash存儲(chǔ)空間的首地址,;data_req、data_in和rd_data_count信號(hào)用于與一前端FIFO實(shí)現(xiàn)數(shù)據(jù)交互,,配置文件先緩存到FIFO中,,然后由控制器負(fù)責(zé)取出并寫入Flash器件;config_status信號(hào)用于指示程序更新是否完成,。
該Flash控制器按時(shí)間上的先后順序分別實(shí)現(xiàn)了對(duì)Flash器件的讀ID,、擦除和寫緩沖操作,下面將分別進(jìn)行簡要敘述,。
每次對(duì)Flash進(jìn)行基本的讀寫操作之前,會(huì)對(duì)Flash芯片進(jìn)行讀ID操作以檢驗(yàn)器件的好壞,,讀ID涉及的主要操作為向特定寄存器寫入相應(yīng)的解鎖指令,,然后再進(jìn)行多操作讀出相應(yīng)的寄存器值,其時(shí)序圖及讀結(jié)果如圖4所示,。
確認(rèn)了芯片ID無誤,,即可進(jìn)行正確訪問,首先對(duì)Flash芯片進(jìn)行擦除操作,。Flash芯片擦除可分為兩種:整片擦除和扇區(qū)擦除,。由于實(shí)際使用時(shí)并未用到整塊Flash存儲(chǔ)空間,而是根據(jù)配置文件的大小選擇合適的扇區(qū)大小存儲(chǔ)配置文件,,所以設(shè)計(jì)中采用的是扇區(qū)擦除方式,,時(shí)序如圖5所示。
當(dāng)成功寫入擦除操作指令之后,,芯片會(huì)進(jìn)入一個(gè)較長的周期等待擦除操作的完成,,該期間無法對(duì)芯片進(jìn)行復(fù)位之外的其他操作。
完成了擦除操作之后,,即可向Flash寫入配置數(shù)據(jù),,其對(duì)應(yīng)的寫緩沖時(shí)序如圖6所示。
擦除和讀寫的過程中,,地址將進(jìn)行自動(dòng)累加且起始地址可變,。Flash的寫操作可為單字寫和緩沖寫兩種,由于緩沖寫最大一次可向Flash寫入32個(gè)字,為了最大化寫入速度,,選擇緩沖寫方式,;Flash的讀操作分為單字讀和按頁讀兩種,由于Flash讀數(shù)據(jù)速率較高且系統(tǒng)對(duì)讀速率沒有太高要求,,本文選擇單字讀方式,。
3 工程應(yīng)用及性能測試
以一實(shí)際項(xiàng)目工程為例,系統(tǒng)中具有10塊FPGA進(jìn)行程序更新,,其在線加載功能系統(tǒng)架構(gòu)如圖7所示,。
系統(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)用軟件對(duì)配置文件進(jìn)行補(bǔ)齊操作,。單個(gè)FPGA在線加載流程簡要敘述如圖8所示,。
更新單塊FPGA程序時(shí),以一實(shí)際測試的3.47 MB大小的配置文件為例,,經(jīng)FPGA在線更新程序固化的時(shí)間和使用ISE14.7軟件JTAG方式固化的時(shí)間如表1所示,。
Flash芯片手冊(cè)中給出的典型擦除和寫緩沖時(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 配置文件不斷電加載和備份方法
每次更新完配置之后,,通常做法是對(duì)FPGA進(jìn)行斷電重啟實(shí)現(xiàn)重新加載,,但工程應(yīng)用時(shí)斷電可能會(huì)影響系統(tǒng)其他模塊的正常工作。為使FPGA在不斷電的情況下自動(dòng)加載更新完的配置程序,,可通過配置FPGA芯片的PROGRAM_B信號(hào)來實(shí)現(xiàn),,BPI模式下的時(shí)序如圖9所示。
考慮到若在配置過程中FPGA發(fā)生斷電等異常,,則Flash中的配置文件損壞,,F(xiàn)PGA將無法實(shí)現(xiàn)加載,,需要重新使用JTAG方式燒寫配置文件。為防止該種情況發(fā)生,,可分配Flash的一塊區(qū)域用于備份配置文件,,發(fā)生FPGA無法正常加載的異常時(shí),可讀取該備份配置文件實(shí)現(xiàn)FPGA再次正常加載,,但前提是該部分Flash存儲(chǔ)空間預(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)