高 鵬,龐宗強,周 同
(中國電子科技集團公司第五十四研究所,河北石家莊050081)
衛(wèi)星運行在宇宙空間中,空間環(huán)境中的各種高能粒子通過衛(wèi)星時可能會影響半導體電路的邏輯狀態(tài)[1],如單粒子翻轉(zhuǎn)現(xiàn)象[2](SEU:Single Events Upset),雖然只引起存儲器內(nèi)容的“0”、“1”翻轉(zhuǎn),但是卻可能影響整個系統(tǒng)的正常工作。隨著技術(shù)的進步,對星載信號處理能力的要求越來越高,F(xiàn)PGA也越來越多地應用到航天領域,成為星載信號處理和控制的關(guān)鍵部件。目前,從FPGA在星載型號產(chǎn)品中的使用情況來看,單粒子效應成為了影響大規(guī)模FPGA可用性和可靠性的主要因素。FPGA中用戶程序是存儲在數(shù)以百萬計的配置單元中,單粒子效應導致的一個配置陣列的翻轉(zhuǎn)會使得整個程序失效,為了解決單粒子效應帶來的此種問題,可以利用工具對程序網(wǎng)表進行冗余備份,或者人工進行設計冗余,Virtex系列FPGA可在SelectMAP模式下對FPGA進行部分重配置[3],或者采用自主刷新對FPGA進行部分重配置,三模冗余和部分重配置相結(jié)合使用成為目前抗單粒子翻轉(zhuǎn)的主流技術(shù)。隨著星載處理系統(tǒng)的復雜程度日益增高,自主刷新[4]和外控刷新相比節(jié)省了控制FPGA,提高了硬件資源和功耗的利用率。
配置幀是配置數(shù)據(jù)在Virtex FPGA配置存儲器中可以讀寫的最小單位,多組配置幀組成一個配置幀列[5],配置幀列分為 CLB幀列、IOB幀列、GCLK幀列、DSP幀列、BRAM內(nèi)連幀列、BRAM幀列。一個完整的配置文件就是由所有配置位置得幀信息和一些必要的首尾控制字組成。在不影響當前程序正常運行條件下,其中CLB幀列、IOB幀列、GCLK幀列、DSP幀列、BRAM內(nèi)連幀列為可在線重配置幀(在線重配置不影響FPGA正常功能),BRAM幀列為不可在線重配置幀(在線重配置會造成FPGA RAM區(qū)數(shù)據(jù)錯誤)。
FPGA加載過程中先把bit文件中的邏輯配置數(shù)據(jù)寫入邏輯配置寄存器中,然后把初始化的數(shù)據(jù)流寫入數(shù)據(jù)寄存器中。當單粒子翻轉(zhuǎn)發(fā)生在配置邏輯寄存器中時會發(fā)生邏輯錯誤,發(fā)生在數(shù)據(jù)寄存器中時會產(chǎn)生數(shù)據(jù)流的某些比特翻轉(zhuǎn),所以關(guān)注點放到前者,部分重配的過程就是在不中斷FPGA正常運行條件下,對FPGA中的邏輯配置寄存器重寫。因此對可在線重配置幀進行重配置,可糾正單粒子翻轉(zhuǎn)引起的錯誤,消除了錯誤的累積。
FPGA冗余設計包括資源冗余設計和時間冗余設計。資源冗余設計是通過將FPGA資源備份實現(xiàn)某項功能,當一處發(fā)生錯誤時其他備份資源可保證FPGA正常工作,一般采用三模冗余手段[6]。三模冗余設計采用3選2邏輯備份,對及時性錯誤有很好的免疫力,因此在線重配置結(jié)合三模冗余設計為Virtex FPGA抗單粒子翻轉(zhuǎn)的有效手段,當FPGA資源緊張時對關(guān)鍵部分做三模冗余設計,次要部分通過部分重配消除錯誤累積。
部分重配置具體實現(xiàn)方案有2種:
第一種:FPGA上電加載后定時對配置寄存器進行部分重配,當發(fā)生單粒子翻轉(zhuǎn)后下一次部分重配可糾錯;第二種:FPGA上電加載后定時對配置寄存器進行回讀[7]驗證,當發(fā)現(xiàn)回讀數(shù)據(jù)發(fā)生錯誤時再對配置寄存器進行部分重配,并實時監(jiān)測三模表決反饋指示,當表決反饋指示錯誤時說明有單粒子發(fā)生,立即對FPGA進行部分重配。
2種方案的比較:第一種方案實現(xiàn)簡單,只需要按照選擇的時間間隔定時重新配置可重配置區(qū),由于刷新過程中刷新控制邏輯或者Virtex FPGA的SelectMAP配置控制邏輯會受到單粒子的影響,而造成刷新數(shù)據(jù)流出錯,所以應盡量縮短總的刷新時間,因而該方法帶來的問題是刷新的次數(shù)多,從而造成總的刷新時間較長。解決方法為縮短每次的刷新時間或延長刷新周期,每次的刷新時間由刷新數(shù)據(jù)量和刷新速率決定。
第二種方案只有在檢測到單粒子效應產(chǎn)生時才進行刷新,因此刷新的次數(shù)大大減少,可以忽略刷新過程中單粒子帶來配置數(shù)據(jù)出錯的問題。此方案實現(xiàn)可采用2種方法,方法1:將FPGA中的配置存儲區(qū)中的數(shù)據(jù)回讀出來和.rbb文件進行比較,比較過程中需要屏蔽文件.msk,這2個文件每一個都與FPGA配置文件大小相似,因此該方法需要的存儲區(qū)需求量很大,特別是大容量的FPGA不宜采用此方法。方法2:將FPGA中的配置存儲區(qū)中的數(shù)據(jù)回讀出來做CRC,得到單幀或多幀數(shù)據(jù)的CRC結(jié)果,將此結(jié)果存儲下來,抗輻照加固FPGA將存儲的CRC結(jié)果和回讀計算的CRC做比對,比對一致時說明沒有單粒子翻轉(zhuǎn),反之說明有單粒子翻轉(zhuǎn)產(chǎn)生,啟動刷新。此方法的缺點是技術(shù)難度較大,需要設計師找到合適的回讀控制字以便每次的回讀數(shù)據(jù)保持一致。
通常FPGA配置存儲器的回讀與重配置由外部對單粒子效應不敏感的器件來控制,由此需要增加額外的配置控制FPGA,這種方案增加了系統(tǒng)復雜度,功耗大。Virtex FPGA 提供了 ICAP[8]模塊,可以通過ICAP從芯片內(nèi)部訪問配置存儲器,從而實現(xiàn)回讀與重配置的自主管理。
圖1為外部控制刷新的硬件原理圖,Prom用于存儲FPGA的配置和刷新的數(shù)據(jù);抗輻照加固FPGA用于實現(xiàn)Virtex FPGA的初始全部配置、配置數(shù)據(jù)回讀、CRC校驗、刷新功能。該器件可選用高可靠的FPGA或抗輻射加固的專用集成電路,Virtex FPGA工作在SelectMAP從模式下M2 M1 M0=“110”。
圖1 外部控制刷新硬件原理圖
圖2為自主刷新硬件原理圖,Virtex FPGA工作在SelectMAP主模式下M2 M1 M0=“011”,上電加載為主并模式,上電加載完成之后FPGA的回讀和刷新功能由刷新控制邏輯模塊控制ICAP接口完成,刷新控制邏輯模塊和外部控制刷新中的抗輻照加固FPGA功能相似,不同之處是上電加載是自主完成,自主刷新方案等效于把外部控制刷新FPGA的功能放到了Virtex FPGA中,硬件上減少了一片抗輻照加固FPGA。首先刷新控制邏輯模塊需要具有很好的抗單粒子翻轉(zhuǎn)性能,才能保證對其他資源刷新無誤,因此必須對刷新控制邏輯模塊做三模冗余或者更多模冗余設計,刷新控制邏輯模塊占用資源很少,可以容忍多模冗余,刷新過程中同時也對自身進行刷新,保證了刷新控制邏輯模塊不會因單粒子效應產(chǎn)生功能異常。
圖2 自主刷新硬件原理圖
刷新控制邏輯模塊工作流程:上電加載成功后定時器開始計時,計時時間到時控制ICAP回讀FPGA可重配置區(qū)的數(shù)據(jù)并計算CRC,計算出的CRC結(jié)果和PROM中存儲的固定CRC進行比較,如2個CRC結(jié)果一致則說明沒有單粒子發(fā)生,不啟動刷新,否則啟動一次刷新,刷新時為寫ICAP,另外當三模表決反饋錯誤產(chǎn)生時啟動一次刷新。
常用的FPGA可綜合代碼級單粒子效應防護設計有:TMR[9]、時間三模冗余和冗余編碼等。
TMR設計就是將原先設計中一塊邏輯電路復制成3份,如框圖中的冗余邏輯塊1、冗余邏輯塊2和冗余邏輯塊3,同時運行這3部分邏輯電路,輸出結(jié)果進行大數(shù)表決,表決出一個置信度高的結(jié)果輸出。同時檢測出哪個冗余邏輯塊發(fā)生翻轉(zhuǎn)并反饋。
如圖3所示,TMR是提高單粒子環(huán)境下FPGA可靠性很有效的措施,是減緩單粒子SEU的重要手段之一,只是會耗用很多FPGA資源,全面TMR設計時對資源的耗用約為無冗余措施時的3.2~3.5倍,采用部分TMR設計,可以適當降低資源的耗用。采用TMR設計的比重越高,F(xiàn)PGA運行的可靠度越高,資源耗用和可靠性需求兩方面要權(quán)衡取舍。
圖3 三模冗余原理
圖4為時間三模冗余設計實例,表決器為全0表決,即當輸入 a、b和c均為‘0’時,輸出 out才為‘0’,否則輸出為‘1’,解決了瞬態(tài)脈沖引起的FPGA觸發(fā)器的翻轉(zhuǎn),冗余編碼設計針對某些固定的存儲數(shù)據(jù)或者狀態(tài)機進行冗余編碼,防止Block RAM中不刷新的數(shù)據(jù)被打翻,重要的狀態(tài)機進行冗余編碼后,一個bit位的瞬時翻轉(zhuǎn)不會造成狀態(tài)機異常跳轉(zhuǎn)。
圖4 時間三模冗余設計
故障注入試驗可做為衛(wèi)星搭載或地面模擬試驗之前的研究方法。針對JTAG口[10]注錯測試提出了2種方案,第一種方案為開發(fā)專門的JTAG操作軟件,可以靈活控制JTAG口實時注錯;第二種方案通過iMPACT界面手動下載注錯程序,刷新糾錯后再通過iMPACT界面回讀比對結(jié)果,實時性不好,注錯效率低。如圖5所示,被測FPGA上電后通過selectMAP主模式加載PROM中的bit文件,加載成功后自刷新程序開始運行。
圖5 單粒子效應故障注入系統(tǒng)結(jié)構(gòu)圖
第一種方案,故障生成與結(jié)果分析計算機通過JTAG口將逐幀的錯誤注入到被測FPGA中,并回讀比對,由于注錯回讀為逐幀進行,不會中斷FPGA正常運行,同時檢測FPGA的功能是否正常;第二種方案,故障生成與結(jié)果分析計算機通過JTAG口將含有錯誤幀的完整bit文件通過iMPACT界面下載到被測FPGA中,等待刷新控制FPGA刷新完成后,計算機通過JTAG口回讀bit文件,并和正確的bit文件做比對,比對時需要有.MSK文件。此方案為最簡單的注錯檢測方法,不需要設計專門的注錯FPGA平臺,缺點是計算機通過JTAG口下載注錯程序或回讀時,均會中斷被測FPGA的正常運行,并且需要人工操作完成,由于數(shù)據(jù)幀數(shù)量大,此方法不適合做全面的注錯測試。
針對Virtex系列FPGA單粒子翻轉(zhuǎn)問題,比較了定時刷新和回讀刷新2種實現(xiàn)方案,對FPGA進行回讀,能夠檢測FPGA是否發(fā)生了單粒子翻轉(zhuǎn),而對FPGA進行部分重配置,則降低了FPGA的單粒子累積效應,并修復了受到單粒子翻轉(zhuǎn)影響的系統(tǒng)功能。在實現(xiàn)方式上提出了自主刷新方式,以及詳細的說明和對比,改進了外控刷新方式的抗單粒子技術(shù)手段,減少了硬件資源的使用。通過JTAG口故障注入試驗驗證了自主刷新方案的可行性,為進一步研究FPGA的空間應用提供技術(shù)參考。
[1] 刑克飛.空間輻射效應對SRAM 型FPGA的影響[J].微電子學與計算機,2006,23(12):107 -110.
[2] Xilinx,Inc.XAPP988,Correcting Single-Event upsets in Virtex-4 platform FPGA configuration memory[S].
[3] 王浩波,郭金鵬.星載環(huán)境下可重構(gòu)技術(shù)分析[J].無線電工程,2012,42(1):40-42.
[4] Xilinx,Inc.XAPP1088,Correcting Single - Event Upsets in Virtex -4 FPGA Configuration Memory[S].
[5] Xilinx,Inc.XAPP779,Correcting Single - Event Upsets in Virtex - II Platform FPGA Configuration Memory[S].
[6] 齊培紅,劉金剛.三模冗余中局部重構(gòu)及模塊同步技術(shù)研究[J].電子設計,2010,26(2-2):183 -185.
[7] Xilinx,Inc.XAPP071,Virtex -4 FPGA Configuration User Guide[S].
[8] Xilinx,Inc.XAPP989,Correcting Single-Event Upsets with a Self-Hosting Configuration Management Core[S].
[9] Xilinx Inc.Xilinx TMRTooluserguide[S].UG156,2006.
[10]周秀娟,葉榮潤.Virtex-Ⅱ系列FPGA的回讀與部分重配置[J].現(xiàn)代無線電技術(shù),2012,35(13):159-161.