鄭 丹,胡勝旺,封 亮,崔紅軍
(中國電子科技集團公司第三十二研究所測評中心,上海 201808)
現(xiàn)場可編程邏輯門陣列(Field Programmable Gate Array,FPGA)由于其靈活性和高計算能力,在嵌入式、網(wǎng)絡、信息系統(tǒng)等領域中得到了廣泛的應用。在航空航天應用中,傳統(tǒng)上人們更傾向于使用對輻射高耐受性的反熔絲型FPGA。近年來,由于低成本、高性能和飛行中的可重構性,基于靜態(tài)隨機存取存儲器(Static Random-Access Memory,SRAM)的FPGA在空間嵌入式系統(tǒng)中的應用越來越受到關注。然而,SRAM型FPGA由于其定義用戶電路的配置存儲區(qū)易受單粒子翻轉(zhuǎn)效應(Single Event Upset,SEU)的影響,對輻射特別敏感,易引起系統(tǒng)失效。根據(jù)對商用飛機的問題統(tǒng)計,有20%的“不可重現(xiàn)”問題來源于SEU導致的軟錯誤。2011年,美國聯(lián)邦航空局DO-254認證文檔第6節(jié),明確要求在驗證和確認階段,能夠驗證目標系統(tǒng)SEU緩解對策的有效性[1]。2014 年,波音等航電設備廠商,專門發(fā)布了針對SEU的航電設備安全性認證報告。美國聯(lián)邦航空局(Federal Aviation Administration,FAA)、歐洲航空安全局(European Aviation Safety Agency,EASA)等監(jiān)管機構也已經(jīng)開始將單粒子防護設計和評價要求納入工程化標準或適航要求。國內(nèi)針對抗SEU設計需求分析和驗證要求寫入了國標、國軍標規(guī)范:2017年5月31日發(fā)布的GB/T33781《可編程邏輯器件軟件開發(fā)通用要求》,2018年8月1日發(fā)布的GJB9432《軍用可編程邏輯器件軟件開發(fā)通用要求》在需求分析階段指出需針對抗狀態(tài)翻轉(zhuǎn)開展必要和可行性分析,并明確抗狀態(tài)翻轉(zhuǎn)技術方法。同期發(fā)布的GB/T33783《可編程邏輯器件軟件測試指南》、GJB9433《軍用可編程邏輯器件軟件測試要求》在安全性測試中也明確要求“測試抗狀態(tài)翻轉(zhuǎn)措施的有效性”。本文基于SRAM型FPGA對三模冗余技術、糾錯編碼技術、配置刷新技術三類SEU緩解技術進行深入研究和分析,并從仿真驗證與故障注入兩種驗證方法展開探討。
三模冗余防護方法(Triple Modular Redundancy,TMR)由于有工具支持、使用方便,因此是較常用的SEU緩解技術。TMR建立硬件冗余結構,對關鍵電路復制三份,通過對三路輸出結果表決來屏蔽任何一路的SEU故障。FPGA廠商Xilinx推出RTL級的TMR設計工具TMR Tool幫助實現(xiàn)基于綜合后網(wǎng)表的三模冗余加固。目前國內(nèi)可購買的TMR Tool最高版本為9.2i,支持Xilinx V1~V5系列,適配ISE 9.2及其之前的版本。此外,更簡單經(jīng)濟的方式是使用帶TMR功能的第三方綜合工具。例如Mentor Graphics的綜合工具Precision Hi-Rel提供三模冗余功能,支持用戶電路TMR插入,需做抗SEU加固設計的FPGA設計可通過關聯(lián)第三方綜合器實現(xiàn)TMR。Libero開發(fā)環(huán)境中適配Synopsys公司的Synplify/Synplify Pro綜合器支持在模塊或寄存器聲明后添加三模冗余屬性設置“/*synthesis syn_radhardlevel="tmr"*/”,完成模塊級或寄存器級的三模冗余電路設計??紤]到資源開銷,目前常用的三模冗余方式只對時序電路復制三份,三模前后對比如圖1所示,圖(b)中PS0_1、PS0_1_tmr2、PS0_1_tmr3為在圖(a)基礎上復制的三份電路,PS0_1_maj為表決電路。
圖1 基于時序邏輯TMR三模前后對比
TMR對SEU引起的功能錯誤緩解效果較好,但邏輯資源開銷較大,且三模冗余的引入對時序會造成一定影響,一般對關鍵寄存器或者關鍵模塊進行三模冗余。對于空間應用領域使用較多的Xilinx器件,可通過廠商提供的TMRTool進行基于綜合后網(wǎng)表的TMR,結合刷新技術可防止SEU錯誤累積;對于Actel器件,可在RTL源碼中添加TMR屬性設定,實現(xiàn)綜合后網(wǎng)表的三模冗余,后者在靈活性上更勝一籌。文獻[2]分別基于Xilinx和Actel器件的TMR實現(xiàn)效果進行分析比較。
通過TMR加固的FPGA系統(tǒng)發(fā)生SEU后,關鍵電路的錯誤狀態(tài)可能暫時不會傳入下一級,但在系統(tǒng)長時間運行條件下,錯誤狀態(tài)可能進行累積從而導致系統(tǒng)失效。引入糾錯編碼技術(Error Detecting And Correcting,EDAC)可對各模塊關鍵信號實時監(jiān)測,并將檢測到的錯誤信號及時糾正,防止了空間輻照對系統(tǒng)的影響。具有單比特錯誤糾正、雙比特錯誤檢測(Single Error Correction - Double Error Detection,SEC-DED)功能的漢明碼EDAC技術已被證明是保護內(nèi)部配置存儲器和其他外部易失性存儲器的有效方法。目前,用于加固的EDAC電路多通過線性分組碼實現(xiàn),在編碼過程中生成待編碼信息數(shù)據(jù)的校驗位,校驗位與數(shù)據(jù)一同存儲,利用譯碼過程與編碼過程中產(chǎn)生校驗位的異或結果對錯誤進行糾正。從資源占用和性能考慮,相比于TMR,EDAC更適合防護RAM器件,糾錯編碼技術與TMR均屬于用戶電路加固技術[3]。文獻[4]提出了TMR與EDAC相結合的技術,可糾正雙比特錯誤。
針對SEU的SRAM型FPGA故障模式如圖2所示:BRAM翻轉(zhuǎn)故障將改變用戶數(shù)據(jù),可通過EDAC校驗檢測;組合邏輯故障、時序邏輯故障、互連關系故障將改變電路邏輯結果,可通過TMR方式緩解用戶數(shù)據(jù)故障。但由于組合/時序邏輯及其內(nèi)連關系由配置編程點決定,一旦配置區(qū)受SEU影響,直到原始配置位流重新載入到FPGA中用戶數(shù)據(jù)才能恢復。且配置存儲容量占FPGA存儲資源的85%以上,因此需要結合配置刷新技術防止配置存儲區(qū)的SEU效應。
圖2 SRAM型FPGA故障模式
配置刷新是指系統(tǒng)配置成功后,按預定時間間隔或幀校驗結果,將配置區(qū)數(shù)據(jù)重寫入FPGA,以消除已有SEU錯誤積累的方法,刷新的對象為FPGA內(nèi)部CLB配置。配置刷新的基本流程為:回讀數(shù)據(jù)幀->與原始幀數(shù)據(jù)比對->校正幀中的錯誤位->寫回數(shù)據(jù)幀至FPGA,如圖3所示。
圖3 配置刷新流程
配置刷新依賴于外部刷新或內(nèi)部刷新電路。以Xilinx器件為例,JTAG接口、SelectMAP接口為外部刷新,需要外部刷新電路通過FPGA外部引腳進行讀寫[5]。(1)使用JTAG接口占用外部引腳少,且具有其他配置接口中的最高優(yōu)先級,甚至可以中斷正在運行的重新配置過程。該接口以串行模式傳輸,最大速率為24 Mb/s,相對讀取配置數(shù)據(jù)時間長。(2)SelectMAP為并行接口,讀取配置數(shù)據(jù)時間短,占用FPGA外部引腳較多,對于高輸出引腳利用率的應用是個缺點。(3)ICAP接口為內(nèi)部刷新接口,使用內(nèi)部刷新方式無需占用FPGA外部接口,讀寫配置寄存器時間短,配置速率可達3.2 Gb/s。目前,空間應用系統(tǒng)中常用的Xilinx V2~V5系列器件多采用SelectMAP方式,V7系列器件采用ICAP方式進行配置刷新。根據(jù)刷新方式不同,可分為全局復位刷新、盲刷新、配置回讀刷新,其刷新過程和優(yōu)缺點分析如表1所示。
表1 配置刷新方式及優(yōu)缺點
驗證SRAM型FPGA設計抗翻轉(zhuǎn)措施有效性的手段通常包括輻射實驗和故障注入。輻射實驗成本高,實驗周期長,目前國內(nèi)能做模擬單粒子轟擊的實驗室不多,且輻射實驗對發(fā)現(xiàn)問題難以定位故障點。故障注入方式具有周期短、成本低、可測試性高等優(yōu)點,是評估SEU緩解措施有效性的一種重要手段。
針對加固設計(如TMR)的仿真驗證手段可通過門級仿真實現(xiàn),門級仿真能夠發(fā)現(xiàn)三模冗余失效、異常情況下狀態(tài)機死鎖、特殊用途寄存器被優(yōu)化等問題。在針對綜合后網(wǎng)表的門級仿真環(huán)境下模擬單比特或多比特翻轉(zhuǎn),能驗證冗余設計的有效性。例如模擬關鍵模塊的狀態(tài)機寄存器出現(xiàn)單粒子翻轉(zhuǎn)故障,通過仿真命令(如force)修改某一時刻的狀態(tài)寄存器進入無效狀態(tài),查看仿真波形確定狀態(tài)機是否能回到有效的狀態(tài),之后的狀態(tài)機遷移是否正確,沒有出現(xiàn)死鎖。
針對配置刷新的SEU緩解設計通常包括一個外部存儲器存放原始配置位流,可參照圖4的仿真測試驗證框架對其進行驗證,對加載控制、回讀判定、刷新功能進行驗證,仿真測試還能測試接口時序、重載時間、回讀周期和刷新周期等。圖中PROM仿真模型能模擬外部存儲器(存放原始配置位流)的接口時序。配置區(qū)仿真模型存儲配置數(shù)據(jù),模擬selectMAP接口時序與被測件(Device Under Test,DUT)交互。上電復位后,DUT應能從PROM中讀出配置數(shù)據(jù)實現(xiàn)加載過程;拉低PROG信號,DUT應能從PROM中讀出配置數(shù)據(jù)實現(xiàn)配置重載。
圖4 仿真測試驗證框架
FPGA特有的配置電路加載過程包括上電過程(設備上電、清配置區(qū)等)、配置位流加載過程(同步、設備ID檢測、加載配置數(shù)據(jù)、CRC檢測等)、啟動過程。針對配置回讀檢測刷新設計的驗證流程包括去除同步位、寫回讀指令、讀取配置區(qū)位流和外部存儲區(qū)原始配置位流、數(shù)據(jù)比較[6]。測試人員應關注回讀配置數(shù)據(jù)與PROM數(shù)據(jù)一致時,DUT是否不會重載;設置配置數(shù)據(jù)出現(xiàn)SEU錯誤,查看被測設計是否能檢測到單比特或者多比特翻轉(zhuǎn),并在檢測失敗后能夠控制接口時序進行PROM原始配置數(shù)據(jù)重載。
NASA專門研發(fā)了面向大容量FPGA系統(tǒng)的測試驗證工具XRTC Fault Injector,這也是當前業(yè)界使用的功能最齊全、最具代表性的FPGA故障注入測試系統(tǒng),每分鐘能自動測試1 000+配置編程點。歐空局支持開發(fā)的FLIPPER工具能評估基于Xilinx SRAM型FPGA的SEU和MBU(Multi Bits Upset)效應。此外,通過FLIPPER工具收集導致功能故障所需的配置存儲器中隨機注入故障概率分布,有助于定義配置刷新率。文獻[7]中對FLIPPER與靜態(tài)分析工具STAR進行實驗對比,并提出可通過STAR工具產(chǎn)生用于故障注入的點,結合FLIPPER進行故障注入,評估加載用戶應用的SRAM型FPGA設計SEU緩解措施是否有效。配置存儲器故障注入已被廣泛用于空間應用系統(tǒng)的失效率統(tǒng)計,以及加固設計的有效性評估上[8]。這類故障注入系統(tǒng)通常由三部分組成:用于控制故障注入過程的控制板(基于FPGA)、測試板(DUT)、用于在線調(diào)試的PC。配置存儲器故障注入流程如圖5所示。
圖5 故障注入流程圖
配置存儲器故障注入系統(tǒng)具有測試速度快、統(tǒng)計效率高等特點,但由于需要搭建額外電路結構,更適合于研制單位測試產(chǎn)品抗SEU特性。
本文對針對易受軟錯誤影響的SRAM型FPGA進行深入研究分析,闡述了三模冗余、糾錯編碼、配置刷新三種主流軟錯誤緩解措施的原理和方法,以及基于故障注入的驗證手段。隨著FPGA在空間系統(tǒng)的廣泛應用,F(xiàn)PGA軟件針對軟錯誤緩解措施的技術和驗證方法亟需加強。參考國內(nèi)外研究現(xiàn)狀,結合FPGA軟件研制工作的實際特點,選擇合理的加固或刷新手段,對于切實提高空間應用FPGA軟件研制質(zhì)量具有重要意義。