(蘭州空間技術(shù)物理研究所,甘肅 蘭州 730000)
在航天領(lǐng)域,F(xiàn)PGA被越來越多地應(yīng)用在復(fù)雜的電子設(shè)計中,其中采用SRAM工藝的FPGA因其編程速度快、開發(fā)周期短等優(yōu)點(diǎn),應(yīng)用最為廣泛。但此工藝的FPGA在空間應(yīng)用中,極易受到空間高能粒子影響,發(fā)生單粒子翻轉(zhuǎn)(Single-Event Upset,SEU)。單粒子翻轉(zhuǎn)率隨著軌道高度的改變,最高達(dá)到25次/器件/天[3],嚴(yán)重影響到航天器任務(wù)的可靠性,甚至導(dǎo)致飛行任務(wù)失敗。
針對SRAM型FPGA的抗單粒子翻轉(zhuǎn)技術(shù)也在不斷地發(fā)展和更新。目前主要有以下幾種方法:① 采用三模冗余,利用3個功能相同的冗余模塊和多數(shù)表決器來避免錯誤;② 回讀配置區(qū)的數(shù)據(jù)幀,與初始配置數(shù)據(jù)進(jìn)行對比,對出錯幀或是整個配置幀進(jìn)行刷新[4];③ 配置反熔絲PROM,通過編程定時刷新FPGA[5]。
三模冗余不會對出錯位進(jìn)行定位和修復(fù),當(dāng)錯誤累積到一定程度,使得兩個以上的冗余模塊都出錯時,就會得到錯誤結(jié)果。因此,三模冗余需要結(jié)合刷新來及時修正已出現(xiàn)的錯誤?;刈x刷新一般采用反熔絲FPGA作為控制器對刷新過程進(jìn)行控制,其軟硬件設(shè)計較為復(fù)雜。相較而言,定時刷新器件自動識別和匹配目標(biāo)FPGA芯片,只需提供時鐘和刷新使能信號,即可自動實現(xiàn)對目標(biāo)FPGA的刷新操作。因此,采用定時刷新器件進(jìn)行定時刷新,可大幅降低刷新系統(tǒng)設(shè)計的難度和復(fù)雜度,縮短開發(fā)周期。本文介紹了定時刷新器件與FPGA配合使用的設(shè)計方法,并進(jìn)行了試驗驗證。
FPGA的周期性刷新支持兩種方式:① 整個器件一次性刷新;② 按幀尋址刷新[6]。定時刷新器件對FPGA的刷新為第一種方式,即整器件一次性刷新。定時刷新系統(tǒng)總體框圖如圖1所示。
圖1 定時刷新系統(tǒng)構(gòu)成框圖
由圖1可知,F(xiàn)PGA配置程序存儲在PROM中,與FPGA之間通過定時刷新芯片連接。定時刷新芯片有兩種工作模式:配置模式和刷新模式。系統(tǒng)初始上電時,定時刷新芯片處于配置模式,完成FPGA的上電配置;系統(tǒng)正常工作后,定時刷新芯片進(jìn)入刷新模式,周期性地將PROM中的配置程序送至FPGA中,完成刷新。在刷新過程中,如果檢測到DONE信號變低,則意味著FPGA發(fā)生單粒子功能中斷,定時刷新芯片會立即對FPGA進(jìn)行重新配置。
下面以Xilinx公司的Virtex-II系列FPGA XC2V3000為例,進(jìn)行刷新電路設(shè)計及驗證。XC2V3000配置訪問接口包括JTAG、SelectMap以及ICAP 3種[7],定時刷新器件利用FPGA的JTAG接口完成刷新。
本設(shè)計使用的定時刷新芯片BSV2為我國自主研發(fā)的電子芯片。該芯片是一款專門針對Xilinx公司Virtex-II系列SRAM型FPGA的配置存儲器進(jìn)行刷新的芯片,其采用盲刷方式,能覆蓋除BRAM內(nèi)容以外的所有配置碼流。該芯片采用了高可靠的抗單粒子翻轉(zhuǎn)加固設(shè)計技術(shù),抗總劑量指標(biāo)≥100 krad(Si);單粒子鎖定(SEL)LET閾值≥75 MeV·cm2/mg;觸發(fā)器翻轉(zhuǎn)(SEU)LET閾值≥37 MeV·cm2/mg[1]。BSV2電路功能框圖如圖2所示。
圖2 BSV2電路功能框圖
BSV2器件主要由PROM接口、FPGA接口和控制接口組成。PROM接口功能為傳輸PROM中的配置程序;控制接口功能為配置器件刷新模式;FPGA接口功能為配合FPGA完成刷新功能。
BSV2在工作過程中主要完成以下4個功能:
① FPGA上電配置。系統(tǒng)上電后,BSV2將PROM中的數(shù)據(jù)讀取出來,通過FPGA的D0端寫入FPGA中,F(xiàn)PGA根據(jù)配置使用的主串或從串模式,由刷新芯片完成配置。
② 回讀IDcode。FPGA配置完成后,BSV2通過JTAG端口回讀FPGA的型號,根據(jù)FPGA反饋的IDcode確定刷新數(shù)據(jù)的具體長度。
③ 配置存儲器刷新。BSV2在確定被刷FPGA型號后,從PROM中讀取配置數(shù)據(jù),并對配置數(shù)據(jù)進(jìn)行處理并完成定時刷新。
④ FPGA重配。若DONE信號變低,說明FPGA發(fā)生單粒子功能中斷,BSV2通過檢測DONE信號,確定DONE端為低電平后,將通過PROGRAM信號對FPGA進(jìn)行重新配置。
BSV2的刷新周期與FPGA芯片配置的碼流長度和刷新時鐘相關(guān),刷新周期T=碼流長度×?xí)r鐘周期×2,典型情況如表1所示。
表1 BSV2完整刷新周期
BSV2有4個控制管腳:i_rst(復(fù)位信號)、i_clk(工作時鐘)、i_pause(芯片使能)和i_half(刷新一半控制)。
其中,拉低i_pause信號,暫停刷新,BSV2芯片會在繼續(xù)完成當(dāng)前的刷新周期后進(jìn)入待機(jī)模式;拉高i_pause信號,實現(xiàn)恢復(fù)刷新,BSV2信號處于工作狀態(tài)下,會根據(jù)DONE信號來決定是進(jìn)行FPGA配置還是刷新;i_half信號為低時,BSV2將刷新的區(qū)域控制為FPGA的左半邊,i_half信號為高時,BSV2刷新區(qū)域為整個FPGA;BSV2的所有信號通過i_clk信號進(jìn)行同步,時鐘的工作范圍為0~20 MHz。
在電路設(shè)計中,通過M0、M1、M2引腳,配置FPGA為主串模式。在串行配置方式下,F(xiàn)PGA通過D0管腳接收BSV2從PROM中獲得的配置程序。系統(tǒng)上電后,BSV2的o_oe_prom引腳和o_ce_prom引腳為有效(低電平),BSV2開始讀取PROM中的程序數(shù)據(jù)并通過o_din_fpga管腳將數(shù)據(jù)發(fā)送給FPGA,完成FPGA的配置,配置時間由PROM中程序的大小決定。配置完成后,F(xiàn)PGA的DONE管腳變?yōu)楦唠娖?。此后,BSV2將通過JTAG管腳對FPGA進(jìn)行定時刷新。電路原理圖如圖3所示。
地面測試的PROM帶有一個JTAG接口,在設(shè)計過程中盡量避免與FPGA的JTAG以菊花鏈形式連接。兩者的JTAG應(yīng)單獨(dú)設(shè)計,否則在配置刷新過程中會產(chǎn)生刷新錯誤。連接PROM的o_oe_prom管腳為開漏結(jié)構(gòu),設(shè)計中須接入4.7 kΩ的上拉電阻。FPGA的DONE管腳硬件上也需要上拉電阻,但電阻值不宜選用過大,以保證BSV2對DONE管腳電平的正確識別,本設(shè)計中選用330 Ω的上拉電阻。
本應(yīng)用設(shè)計旨在驗證采用BSV2進(jìn)行定時刷新時的硬件時序特性以及刷新措施抗單粒子翻轉(zhuǎn)的有效性。硬件時序特性驗證考察配置過程和刷新過程所需要的時間。有效性驗證驗證兩方面的內(nèi)容:① 刷新是否會對系統(tǒng)的正常工作造成干擾;② 刷新是否能糾正單粒子翻轉(zhuǎn)。
定時刷新測試板如圖4所示,主要通過串口接口功能完成驗證。
初始上電完成時或受到翻轉(zhuǎn)影響時,F(xiàn)PGA的DONE信號為低電平時,BSV2開始對FPGA進(jìn)行配置,配置完成后DONE信號拉高。設(shè)備上電開始至配置完成的DONE信號測試波形如圖5所示。
圖5 DONE信號測試波形
BSV2的時間與配置流的數(shù)據(jù)長度有關(guān),本設(shè)計的配置碼流長度為1,313,214×8 bit,完整配置耗時約3 s,設(shè)備正常工作后,測量FPGA上JTAG的TDO引腳,觀察BSV2通過JTAG對FPGA的定時刷新功能,BSV2定時刷新時測試波形如圖6所示,測量的刷新周期約為1.9 s,與數(shù)據(jù)手冊上提供的刷新周期的參考值基本一致。
圖6 定時刷新測試波形
FPGA配置存儲器中與功能實現(xiàn)的相關(guān)部分配置位稱為有效配置位。有效配置位只是所有配置位的一部分,因此如果FPGA中配置存儲器發(fā)生單粒子翻轉(zhuǎn),但發(fā)生單粒子翻轉(zhuǎn)的不是有效配置位,那么未必會產(chǎn)生功能中斷。為了便于觀測和驗證,可通過故障注入的方法來模擬單粒子翻轉(zhuǎn),且注入的故障應(yīng)可導(dǎo)致功能中斷。
采用Verilog語言在FPGA內(nèi)部實現(xiàn)串口發(fā)送模塊,該模塊可向串口總線循環(huán)發(fā)送固定數(shù)據(jù)AA,uart_send模塊接口如圖7所示。
圖7 uart_send模塊接口圖
圖7中,clk為時鐘輸入;clk_freq為clk頻率值;rst為復(fù)位信號;baud為波特率值;tx_data為待發(fā)送數(shù)據(jù);tx_wr為發(fā)送使能信號;tx_busy為發(fā)送邏輯忙信號;tx為發(fā)送至串口總線上的比特流。
FPGA串口發(fā)送模塊代碼如下:
uart
#(
.clk_freq (50000000 ),
.baud (9600 )
)
uart_inst
(
.sys_rst (~rst_n ),
.sys_clk (clk_50m ),
.uart_rx (uart_rx ),
.uart_tx (uart_tx ),
.rx_data (rx_data ),
.rx_done (rx_valid ),
.tx_data (8’hAA ),
.tx_wr (~tx_busy ),
.tx_data (tx_busy )
);
下面介紹測試過程。
首先,將BSV2的刷新使能管腳i_pause拉低,如圖8所示,并向PROM中燒寫正確的配置數(shù)據(jù)。完成這一操作后重新上電,BSV2將從PROM中讀取配置數(shù)據(jù),完成FPGA的配置過程。由于刷新使能無效,BSV2不會對FPGA進(jìn)行刷新操作。此時,在將上位機(jī)上的串口助手波特率設(shè)置為9600 bit/s后,可觀察到FPGA發(fā)送過來的字符AA。
圖8 拉低i_pause管腳
然后,通過JTAG向FPGA注入波特率被改寫的配置數(shù)據(jù)(將FPGA代碼中的baud波特率改為其他值,如115200之后,重新生成)。由于BSV2的刷新功能仍被禁止,正確的配置數(shù)據(jù)無法從PROM恢復(fù)到FPGA。此時,可觀察到串口助手已接收不到FPGA發(fā)送的字符。
之后,將BSV2的刷新使能管腳i_pause拉高。此時,BSV2的刷新功能被啟用,BSV2從PROM中讀取正確配置數(shù)據(jù),對FPGA配置存儲器進(jìn)行定時刷新。此時,串口助手可重新接收到FPGA發(fā)送的字符AA,如圖9所示。
圖9 正確接收字符
i_pause被拉高后,刷新以固定周期進(jìn)行,可觀察到串口助手始終能正確接收到字符AA,說明刷新不會對FPGA功能的正常運(yùn)行造成影響。
通過使用定時刷新器件BSV2,大大簡化了SRAM型FPGA的刷新設(shè)計過程?;贐SV2的定時刷新可以有效糾正SRAM型FPGA的單粒子翻轉(zhuǎn),且不會對FPGA的正常工作過程造成影響。但定時刷新器件只能刷新FPGA中除BRAM以外的配置碼流,BRAM存儲的是實時狀態(tài)信息,其中的內(nèi)容有可能受到單粒子翻轉(zhuǎn)的影響[8]。因此,要想有效且全面地解決單粒子翻轉(zhuǎn)對FPGA的影響,可采用三模冗余和定時刷新器件相結(jié)合的加固技術(shù)。