杜新軍,周建華,胡劍平
(北京遙測技術(shù)研究所北京 100076)
SRAM型FPGA內(nèi)嵌CPU軟核開發(fā)過程靈活,能夠與外圍的FPGA邏輯進行靈活的信號交互,可以替代獨立的DSP或CPU器件執(zhí)行核心控制功能,并能有效降低開發(fā)成本。
“DSP+FPGA”或“CPU+FPGA”的設(shè)計方案在軌應(yīng)用時需要同時對兩個器件進行空間單粒子效應(yīng)的防護,防護設(shè)計方案較復(fù)雜。利用“SRAM型FPGA內(nèi)嵌軟核+FPGA硬件邏輯”的設(shè)計方案可以簡化系統(tǒng)的單粒子效應(yīng)防護設(shè)計,并且可以得到較好的防護效果。
目前,“三模冗余+動態(tài)刷新”的防護方案可以對SRAM型FPGA的空間單粒子翻轉(zhuǎn)效應(yīng)(SEU)進行有效的防護,但由于內(nèi)嵌CPU軟核的特殊性,需對其采取專門的防護措施,以保證其可靠運行。
本文提出一種針對SRAM型FPGA內(nèi)嵌CPU軟核的SEU防護設(shè)計方案,通過“三模冗余+動態(tài)刷新”對CPU軟核的硬件結(jié)構(gòu)進行防護,通過冗余自刷新模塊替換對CPU軟核的存儲區(qū)進行防護。防護設(shè)計方案已經(jīng)過模擬注錯驗證及單粒子輻照試驗驗證,證明其能夠有效提高CPU軟核對SEU的容錯能力。
本文中所采用的CPU軟核為Xilinx公司提供的Microblaze CPU IP(以下簡稱CPU IP),該CPU IP采用Harvard架構(gòu),開發(fā)環(huán)境為EDK,開發(fā)語言為C語言。根據(jù)使用要求,可配置OPB、PLB及LMB等外圍總線。其結(jié)構(gòu)如圖1所示。
圖1 CPU IP特殊結(jié)構(gòu)功能示意圖[1]Fig.1 Function of special structure in CPU IP[1]
CPU IP的硬件結(jié)構(gòu)基于SRAM型FPGA的基本邏輯單元構(gòu)建,其數(shù)據(jù)存儲器及程序存儲器基于SRAM型FPGA的BlockRAM(以下簡稱BRAM)構(gòu)建。另外CPU IP中還包含SRL16以及LUTRAM等特殊結(jié)構(gòu),這些特殊結(jié)構(gòu)在CPU IP中執(zhí)行的功能如圖1所示。
CPU IP的SEU故障模式主要分為兩種:一種為CPU IP的硬件結(jié)構(gòu)發(fā)生翻轉(zhuǎn);另一種為CPU IP存儲區(qū)的數(shù)據(jù)發(fā)生翻轉(zhuǎn)[2]。
CPU IP的硬件結(jié)構(gòu)中包含的SRAM FPGA基本邏輯資源均對SEU敏感。若其中的某些敏感單元發(fā)生了單粒子翻轉(zhuǎn),則會導(dǎo)致CPU IP的硬件結(jié)構(gòu)改變,從而影響CPU IP的功能。
CPU IP的存儲區(qū)基于BRAM構(gòu)建,而BRAM結(jié)構(gòu)對SEU敏感。CPU IP的存儲區(qū)承擔(dān)著程序存儲、數(shù)據(jù)緩存的功能,若發(fā)生翻轉(zhuǎn),則會導(dǎo)致 CPU IP程序執(zhí)行異常。
根據(jù)前文對CPU IP的SEU故障模式的分析,將防護措施定位于“CPU IP硬件結(jié)構(gòu)防護”和“CPU IP存儲區(qū)防護”兩個主要方面。
CPU IP的硬件結(jié)構(gòu)基于SRAM型FPGA的基本邏輯單元構(gòu)建,因此其防護方法可借用目前針對SRAM型FPGA的通用防護方法——“三模冗余+動態(tài)刷新”。
2.1.1 三模冗余
三模冗余的原理是通過設(shè)計三模冗余以及多數(shù)表決來掩蔽發(fā)生的SEU錯誤。Xilinx公司提供了專業(yè)的三模冗余軟件TMRTool進行三模冗余設(shè)計。
包含CPU IP的FPGA工程通過TMRTool軟件進行三模冗余處理的過程如圖2所示。首先,在原始ISE工程中生成“.ngc”、“.ngo”文件以及其他相關(guān)文件;然后,將其中的“.ngc”、“.ngo”文件經(jīng)過三模冗余軟件處理生成“.edf”文件;最后,將“.edf”文件以及其他相關(guān)文件添加到三模冗余后的ISE工程中,同時對相關(guān)文件進行適應(yīng)性修改,最終生成三模冗余后的下載文件。
圖2 包含CPU IP的邏輯三模冗余處理過程[2,3]Fig.2 The TMR process containing CPU IP[2,3]
2.1.2 動態(tài)刷新
動態(tài)刷新的原理是在SRAM型FPGA正常工作的情況下對其配置空間進行刷新。動態(tài)刷新可以及時糾正已經(jīng)發(fā)生的單粒子翻轉(zhuǎn)錯誤,同時不影響系統(tǒng)的正常功能。
進行動態(tài)刷新的硬件結(jié)構(gòu)如圖3所示。配置控制器向SRAM型FPGA的配置端口輸入特定的指令組合,使之能夠進行寫入操作,然后將配置存儲器中的原始配置文件讀出,并寫入SRAM型FPGA的對應(yīng)配置空間內(nèi)實現(xiàn)動態(tài)刷新。
前文已述,CPU IP中包含SRL16以及LUTRAM。SRL16是指用查找表(LUT)構(gòu)造的16位移位寄存器,LUTRAM是指用LUT構(gòu)造的分布式RAM。動態(tài)刷新過程會對上述兩種結(jié)構(gòu)正常功能造成影響,所以在設(shè)計中需要對上述兩種結(jié)構(gòu)進行替換。
TMRTool軟件提供了SRL16結(jié)構(gòu)的替換功能,而LUTRAM則必須用專門設(shè)計的替換模塊進行替換。本文中專門設(shè)計了LUTRAM的替換模塊,該模塊用Flip-Flop結(jié)合LUT的結(jié)構(gòu)替代了原來的結(jié)構(gòu),其功能與LUTRAM一致,并且不受動態(tài)刷新的影響。
圖3 動態(tài)刷新硬件連接關(guān)系示意圖Fig.3 Hardware connection of scrubbing
存儲區(qū)承擔(dān)程序存儲及數(shù)據(jù)緩存等功能,對CPU IP程序的正常運行至關(guān)重要。因此,在空間應(yīng)用CPU IP必須對存儲區(qū)采取SEU防護措施。
CPU IP的存儲區(qū)分為程序區(qū)和數(shù)據(jù)區(qū),均基于SRAM型FPGA的BRAM構(gòu)建。由于與BRAM正常功能沖突,對SRAM型FPGA配置存儲區(qū)的動態(tài)刷新不能覆蓋BRAM內(nèi)容區(qū)。而單純對存儲區(qū)進行三模冗余雖然能夠在一定程度上掩蔽錯誤,但終究會隨著錯誤積累而失效。所以必須對CPU IP存儲區(qū)采取專門的措施進行防護。
本文采用一種“三模冗余+自刷新”的方案,設(shè)計一種冗余自刷新模塊,在三模冗余軟件的輔助下替換原來的存儲模塊,實現(xiàn)SEU防護。
2.2.1 CPU IP存儲區(qū)結(jié)構(gòu)調(diào)整
為了適應(yīng)CPU IP存儲區(qū)冗余自刷新模塊的設(shè)計,需要對默認(rèn)的存儲區(qū)結(jié)構(gòu)進行調(diào)整。
默認(rèn)的存儲區(qū)結(jié)構(gòu)內(nèi)程序存儲區(qū)與數(shù)據(jù)存儲區(qū)共用64KB存儲空間,其中BRAM的雙端口均被占用,一組端口用于程序總線操作,另一組端口用于數(shù)據(jù)總線操作。本文設(shè)計中,程序區(qū)實際占用空間為32KB,數(shù)據(jù)區(qū)實際占用空間為16KB。為了節(jié)約BRAM資源進行后續(xù)的冗余模塊替換,將程序區(qū)與數(shù)據(jù)區(qū)分成兩個獨立的存儲區(qū),容量分別為32KB和16KB。存儲區(qū)分開后,每個獨立存儲區(qū)均有一組端口空閑,該組空閑端口可用來執(zhí)行自刷新功能。存儲區(qū)調(diào)整前后的結(jié)構(gòu)如圖4所示。
2.2.2 冗余自刷新模塊設(shè)計
冗余自刷新模塊實現(xiàn)三模冗余及刷新的功能。其基本原理是:將原始BRAM模塊進行三模冗余;在不影響正常數(shù)據(jù)讀寫的情況下,將三模冗余BRAM模塊內(nèi)部同一地址的數(shù)據(jù)讀出;對來自三模冗余模塊的三份數(shù)據(jù)進行表決;如果出現(xiàn)三份數(shù)據(jù)不一致的情況,則將多數(shù)表決后的數(shù)據(jù)寫入該地址中進行糾錯[4~6]。其設(shè)計原理如圖5所示。
如圖5所示,設(shè)計中除了冗余BRAM模塊以及表決模塊以外,還包含地址比較模塊。地址比較模塊用于判斷CPU IP是否正在對BRAM特定地址進行讀寫操作,避免刷新過程與正常的讀寫操作發(fā)生沖突。
圖4 存儲區(qū)調(diào)整前后結(jié)構(gòu)對比圖Fig.4 Memory structures before and after adjustment
圖5 冗余自刷新模塊原理示意圖[4~6]Fig.5 Principle diagram of redundant self-scrubbing module[4~6]
冗余自刷新模塊通過ISE開發(fā)平臺進行設(shè)計,通過TMRTool軟件生成替換模塊,在進行整體工程三模冗余過程中,以該替換模塊替換原始的存儲模塊。
為了評估防護方案的防護性能,進行了軟件模擬注錯測試和單粒子輻照試驗測試。
模擬注錯測試基于SRAM型FPGA的動態(tài)刷新功能,通過人為修改配置數(shù)據(jù)對FPGA進行動態(tài)注錯來模擬SEU故障。通過注錯控制軟件,可以選擇需要注錯的幀數(shù)以及每幀中所注入的錯誤數(shù),然后由控制軟件隨機選擇位置對配置文件進行修改。
模擬注錯測試選擇兩個試驗樣本:一個為不加防護措施的樣本M0;另一個為添加本文提出的防護措施的樣本M1。測試主要考核SRAM型FPGA內(nèi)嵌CPU IP的功能。樣本中CPU IP主要負責(zé)1553總線通信,其工作狀態(tài)由看門狗器件負責(zé)監(jiān)測。當(dāng)發(fā)生配置位錯誤而導(dǎo)致CPU IP功能異常時,會導(dǎo)致看門狗復(fù)位,因此測試中將看門狗復(fù)位作為故障判據(jù)。
模擬測試中,分別對兩個樣本進行相同條件的注錯測試。通過對比兩個樣本在相同注錯條件下的看門狗復(fù)位次數(shù)可以得出防護方案的防護性能。相同注錯條件下,出現(xiàn)看門狗復(fù)位的次數(shù)越少,說明樣本的容錯能力越強。為了使測試更真實反映容錯能力,對兩個樣本分別進行了十次測試,并對結(jié)果取平均值。具體注錯參數(shù)設(shè)置及測試結(jié)果如表1所示。
根據(jù)模擬測試結(jié)果,可以得出結(jié)論:同等注錯條件下,M1的容錯能力為M0的22倍。
為了進一步驗證該防護方案的實際防護性能,在中科院近代物理研究所進行了單粒子輻照試驗。試驗粒子為Bi,線性能量沉積(LET)為99MeV.cm2/mg。試驗樣本選擇與模擬注錯測試一致。
試驗中將SRAM型FPGA開蓋,粒子束直接對準(zhǔn)芯片照射。試驗粒子的LET值為99MeV.cm2/mg,SRAM型FPGA的閾值LET為2MeV.cm2/mg,因此能夠誘發(fā)SRAM型FPGA內(nèi)部敏感單元產(chǎn)生SEU錯誤[7]。
輻照試驗中,對兩個試驗樣本采取相同的粒子注量率進行照射,通過對比兩個樣本發(fā)生第一次看門狗復(fù)位時已經(jīng)注入的粒子數(shù)來衡量防護方案的防護性能。同等粒子入射條件下,首次復(fù)位之前注入的粒子數(shù)越多,說明樣本的容錯能力越強。為了使測試更真實反映容錯能力,對每個樣本分別進行了5次試驗,并對結(jié)果取平均值。試驗結(jié)果如表1所示。根據(jù)試驗結(jié)果,可以得出結(jié)論:同等粒子入射條件下,M1的容錯能力為M0的37倍。
表1 防護性能驗證結(jié)果Table1 Test results of SEU mitigation
根據(jù)模擬注錯測試結(jié)果和單粒子輻照試驗結(jié)果可以得出結(jié)論:本文提出的防護方案能夠有效提高CPU IP對SEU的容錯能力。
本文提出一種針對SRAM型FPGA內(nèi)嵌CPU軟核的SEU防護方案,利用“動態(tài)刷新+三模冗余”對內(nèi)嵌CPU軟核的硬件結(jié)構(gòu)進行防護,利用“冗余自刷新模塊替換”對內(nèi)嵌CPU軟核的存儲區(qū)進行防護。通過模擬注錯測試及單粒子輻照試驗對本文提出的防護方案進行了防護性能驗證。根據(jù)驗證結(jié)果,該方案能夠有效提高內(nèi)嵌CPU軟核對SEU的容錯能力。此外,模擬注錯測試結(jié)果與粒子輻照試驗結(jié)果基本一致,也說明模擬注錯測試可以近似模擬粒子輻照試驗。
此次粒子輻照試驗由于機時有限,每個樣本只進行了5次重復(fù)試驗,試驗結(jié)果存在隨機誤差,有待后續(xù)試驗數(shù)據(jù)的進一步完善。
[1]Xilinx Corporation.MicroBlaze Processor Reference Guide EDK8.1i(UG081)[M].V5.4.California of America:Xilinx Corporation,2006.
[2]Greg Miller,Carl Carmichael,Gary Swift.Single-Event Upset Mitigation Design Flow for Xilinx FPGA Power PC Systems(XAPP1004)[M].V1.0.California of America:Xilinx Corporation,2008.
[3]Xilinx Corporation.Xilinx TMRTool User Guide(UG156)[M].V2.2.California of America:Xilinx Corporation,2007.
[4]Greg Miller,Carl Carmichael,Gary Swift.Single-Event Upset Mitigation for Xilinx FPGA Block Memories(XAPP962)[M].V1.1.California of America:Xilinx Corporation,2008.
[5]Greg Miller,Carl Carmichael,Gary Swift,Chen Wei Tseng.Mitigation Design Flow and Troubleshooting a Soft Processor in a Complex FPGA[C]//MAPLD.Washington,D.C.of America:NASA,2008.
[6]Sana Rezgui,Jeffrey George,Gary Swift,Kevin Somervil.SEU Mitigation of a Soft Embedded Processor in the Virtex-II FPGAs[C]//MAPLD.Washington,D.C.of America:NASA,2005.
[7]Sana Rezgui,Jeffrey George,Gary Swift,Carl Carmichael.SEE Validation of SEU Mitigation Methods for FPGAs[C]//MAPLD.Washington,D.C.of America:NASA,2005.