嚴健生,楊柳青
(中國科學院微小衛(wèi)星創(chuàng)新研究院,上海 201203)
宇宙高能粒子(太陽宇宙線或銀河宇宙線)射入半導體器件SRAM 單元靈敏區(qū)時可使器件邏輯狀態(tài)翻轉,導致系統(tǒng)功能紊亂。這種單粒子翻轉(SEU)造成的邏輯錯誤不是永久性的,一般不會造成器件的物理性損傷。SEU已經成為衛(wèi)星電子設備的常見錯誤。
目前大多數(shù)FPGA 基于SRAM 結構。SRAM 型FPGA的用戶組合和時序邏輯都是用可配置的存儲單元(即SRAM 單元)實施。根據(jù)SRAM 的結構特點和SEU 產生的機理,SRAM 是FPGA 中最容易產生翻轉的部分。隨著集成電路工藝向低電壓、高集成度方向發(fā)展,相應的空間SEU 閾值越來越低,因此FPGA 發(fā)生故障的概率越來越高,最終導致計算結果錯誤、程序執(zhí)行任務系列錯誤、數(shù)據(jù)域改變、程序指令錯誤導致系統(tǒng)跑飛異常復位、甚至導致衛(wèi)星相關系統(tǒng)永久失效、燒毀。因此針對SRAM 型FPGA 很有必要進行高可靠性設計。
針對SRAM 型FPGA 的特點,本文分別從硬件設計角度和軟件設計方面對SRAM 型FPGA 設計提出可靠性設計。
衡量器件抗SEU 能力是用該器件的翻轉閾值和翻轉截面來描述的。由該器件的翻轉截面對線性能力傳遞(LET)值的曲線可以推算出衛(wèi)星軌道的SEU 翻轉率,用次/天·位表示。整機設計時選用SEU 率低的器件非常重要,如果SEU 率非常高,其它的措施都將不起作用。
整體屏蔽辦法就是在衛(wèi)星電子設備外面包覆一層具有一定厚度的屏蔽材料,通常采用的材料有鋁、鉛、鉭和某些酯類化合物等,此法可以有效地緩解衛(wèi)星電子設備所承受的空間輻射壓力,減少空間輻射環(huán)境對電子設備造成影響。
在制作FPGA 芯片時采取抗輻照工藝及其它硬件加固手段,增強芯片本身對空間輻照環(huán)境的耐受力。
錯誤檢測和糾正電路(Error Detection and Correctio n,EDAC)可以糾正SRAM 型FPGA 數(shù)據(jù)中的一位錯誤和檢測出兩位錯誤能力。其原理是:處理器向FPGA 內部RAM 存儲區(qū)域寫入數(shù)據(jù)時,根據(jù)寫入的數(shù)據(jù)生成一個變形漢明碼校驗字例如(7,4)漢明碼,把該校驗字存入RAM 存儲區(qū)中。當下次處理器讀取該區(qū)域數(shù)據(jù)時,同時把數(shù)據(jù)和相應的校驗字同時送入EDAC 電路中進行糾錯,若EDAC 電路發(fā)現(xiàn)檢測數(shù)據(jù)中有一比特數(shù)據(jù)出現(xiàn)錯誤時便生成單錯標志SEF,并輸出糾正后的數(shù)據(jù)和校驗字。若同時出現(xiàn)兩比特以上數(shù)據(jù)錯誤時,EDAC 電路不能糾正數(shù)據(jù)錯誤,只產生雙錯標志DEF。在某些情況下在軟件設計中必須要考慮SEU 造成兩位或多位翻轉。
版圖交錯法就是一種有效降低單粒子多位翻轉影響的方法[1]。其方法是將同一邏輯碼字中的各比特位放置到存儲器的不同物理位置上,當單粒子多位翻轉時,實際上翻轉的比特位在邏輯上是分離的,因而可以被糾錯。
使用多個SRAM 型FPGA 同時運行相同的程序,并將某一時刻運算的結果同時輸出給抗輻照加固器件中進行仲裁,以達到糾錯目的,該方法可靠度較高,因為需要多個FPGA 同時運算和表決因此會帶來較大的功耗和硬件開銷。
對FPGA 進行重新配置可以清除累積錯誤。在估計的SEU 發(fā)生間隔時間內重新配置FPGA ,潛在的SEU影響可以被抑制。翻轉的配置信息在重配置時可以將翻轉的配置位糾正。
在重新配置期間,FPGA 不處于工作狀態(tài),并且器件管腳也會處于一種不受控狀態(tài),所以需要在系統(tǒng)層面充分考慮FPGA 重新配置期間地保護與重新配置后地恢復處理,設置合適地時機啟動重新配置操作。實際應用中在低輻照的空間環(huán)境或者對于可以短時工作的衛(wèi)星設備或載荷設備可以運用此方法,如按需工作的CCD 成像儀等[2]。
配置刷新就是在不中斷當前功能和邏輯的基礎上重新寫入配置數(shù)據(jù)。一般情況下配置刷新需要FPGA 外部設計相應的控制電路,如ASIC、反熔絲FPGA 或微處理。而Xilinx 公司的Virtex-5 系列以上FPGA 集成了配置存儲區(qū)內部回讀糾錯技術,不需要板級額外增加控制電路,簡化了系統(tǒng)設計。配置刷新有回讀刷新和定時刷新兩種方式[3]。
(1)回讀刷新
第一種方法是回讀對比配置區(qū)數(shù)據(jù)幀,與初始的配置數(shù)據(jù)進行對比,如果對比數(shù)據(jù)不一致,則對該幀進行刷新,刷新以幀為最小單位。該方法需要使用固化(.msk)和回讀文件(.rbb),這兩個文件大小都與FPGA 配置的原始文件大小差不多,因此本方法對系統(tǒng)存儲區(qū)要求較大。
一般電路中會使用一片高等級的具有抗單粒子免疫的FPGA 例如Actel FPGA(反熔絲工藝,對SEU 免疫)作為具有檢測和監(jiān)督功能的芯片,通過反熔絲FPGA 不斷的回讀SRAM 型FPGA 內部的配置文件并進行校驗,一旦發(fā)現(xiàn)校驗出錯,就自主控制拉低PROM 配置引腳,重新加載FPGA 配置文件,通過更新配置文件來確保FPGA一直處于配置正確狀態(tài)。由于配置文件包含的是FPGA所有資源的配置信息,其中包含設計中未使用的一些模塊。而這些模塊的資源配置信息如果遇到單粒子效應其并不會影響FPGA 的正常功能使用,然而這些冗余的配置信息往往占整體信息比例較高會嚴重降低校驗的效率,因此增加一片PROM 芯片存放屏蔽位文件,該文件專門對設計中未被使用資源的配置信息進行標注。通過對該文件的分析,可以僅對設計中使用資源的配置信息做校驗。
第二種方法是回讀對比配置區(qū)數(shù)據(jù)幀CRC 校驗結果,與存儲的初始CRC 校驗結果進行比對,如果結果不一致,則對出錯幀進行刷新。本方法只需存儲CRC 校驗結果,對系統(tǒng)存儲區(qū)的需求很小。
回讀FPGA 配置文件有兩種模式,一種SelectMAP模式,另一種為邊界掃描(JointTestActionGroup,JTAG)模式。SelectMAP 模式采用并行模式讀取數(shù)據(jù),讀配置文件的速度較快,但采用該模式FPGA 的某些通用引腳必須作為SelectMAP 模式的數(shù)據(jù)讀取專用引腳,FPGA 引腳被占用得比較多。而JTAG 模式采用串行模式讀取數(shù)據(jù),雖然讀配置文件的時間比較長(采用1MHz 的時鐘,回讀配置文件的時間為2s 左右),但FPGA 被占用的引腳僅為4 個。
Xilinx 7 系列FPGA 發(fā)布的SEM IP 具備糾正SEU軟錯誤的能力[4],其替換模式基于數(shù)據(jù)重載的修復方式,支持任意多個比特錯誤。SEM IP 能實現(xiàn)FPGA 內部配置區(qū)文件與外部FLASH 內存儲的EBC 文件的比對,并對配置區(qū)進行刷新。
(2)定時刷新
定時刷新指的是在特定程序的控制之下,或者以一定的時間周期例如衛(wèi)星星歷表的時間信息在指定的時間來對FPGA 的配置文件進行重加載操作,FPGA 重新加載程序可以有效避免因為SEU 效應而對單機或系統(tǒng)而產生影響,定時刷新過程在設計的時間點上應不影響用戶正常功能的使用。該方法的優(yōu)點是在不增加硬件開銷成本的基礎上只需要通過軟件編程即可實現(xiàn),具有較高的靈活性和經濟性。例如在現(xiàn)有的商業(yè)衛(wèi)星測控系統(tǒng)中,為了避免衛(wèi)星在入境時存在SEU 效應,一般的在衛(wèi)星入境之前五分鐘,衛(wèi)星計算機系統(tǒng)會發(fā)出刷新指令對測控系統(tǒng)中的FPGA 做一次全面的刷新操作,保證衛(wèi)星在進入測控通信弧段之前測控系統(tǒng)無SEU 影響。
回讀刷新一般采用反熔絲FPGA 作為控制器對刷新過程進行控制,其軟硬件設計較為復雜。相較而言,定時刷新器件自動識別和匹配目標FPGA 芯片,只需提供時鐘和刷新使能信號,即可自動實現(xiàn)對目標FPGA 的刷新操作,大幅降低系統(tǒng)設計的難度和復雜度,縮短開發(fā)周期。而回讀刷新只在發(fā)現(xiàn)翻轉錯誤時進行刷新,故障恢復更加高效和有針對性。
對關鍵數(shù)據(jù)或信號進行三模冗余(TMR)設計能有效防止SEU。TMR 是利用3 個相同單元構成并聯(lián)形式,通過表決單元輸出最終的數(shù)據(jù)或信號。在一個單元發(fā)生SEU 的情況下,通過表決,保證了關鍵數(shù)據(jù)或信號的正確性和安全可靠。TMR 在提高可靠性的同時,也會需要開銷額外的資源和速度降低系統(tǒng)的性能,而表決器本身也不是完全可靠的,并不具備抗空間輻照的能力。如果一個長加電系統(tǒng)長時間暴露于空間輻照環(huán)境中,由于SEU 的累積效應,兩個表決單元發(fā)生SEU 的可能是存在的,在這種情況下三模冗余失效。
在傳統(tǒng)三模冗余技術的基礎上引入反饋路徑可以解決因為SEU 錯誤累積而導致的三模冗余失效問題,利用當前的正確判決結果對前一級的冗余寄存器進行更新,從而及時糾正前級可能引入的SEU 錯誤,避免錯誤的累積。對于那些不斷更新數(shù)據(jù)的寄存器,即便發(fā)生SEU 錯誤,在下一個時鐘周期內就會被新的數(shù)據(jù)覆蓋,因此這種寄存器冗余采用傳統(tǒng)三模冗余即可;對于那些長時間駐留的數(shù)據(jù)寄存器建議采用反饋糾錯的三模冗余[5]。
為了更有效的提高FPGA 抗空間輻射的更有效方法,國際上主流的做法是采用回讀刷新結合三模冗余方法,此方法可以增強SRAM 型FPGA 的抗SEU 能力。
回讀刷新和定時刷新需要對FPGA 進行全面的配置,然而一些設備需要長時間穩(wěn)定工作,整體的刷新會影響到他的性能,針對這些系統(tǒng)往往采用動態(tài)局部重構。動態(tài)局部重構是指對于被規(guī)定為可重構區(qū)域內的硬件邏輯資源可進行實時的動態(tài)重構操作,而其它部分的電路邏輯功能不會受到影響。動態(tài)局部重構要求FPGA 具有動態(tài)局部可重構能力。只需將FPGA 中的部分邏輯或模塊的配置信息進行動態(tài)重新配置,不需要重新加載整個FPGA 的配置文件,非重構部分的工作狀態(tài)完全不受影響。FPGA 動態(tài)局部重構技術首先由Xinlinx 公司提出和實現(xiàn),目前Xilinx 公司很多系列的FPGA 芯片支持動態(tài)局部可重構技術。動態(tài)局部重構技術可以有不同的設計流程[6]。
針對局部動態(tài)重構技術的特性,可以充分利用局部動態(tài)重構技術在保證工作狀態(tài)的功能不受影響的情況下局部重構被單粒子影響的區(qū)域,實現(xiàn)系統(tǒng)功能修復。
放在RAM 中的程序和數(shù)據(jù)易受SEU 的影響,可以把程序和重要數(shù)據(jù)固化在PROM 中,PROM 一般不受SEU 影響。
ECC(Error Correcting Code)糾錯編碼技術是解決SRAM FPGA 中存儲區(qū)域發(fā)生SEU 錯誤的有效方法。根據(jù)香農理論通過增加信息的冗余位,可以有效提高數(shù)據(jù)的抗錯誤能力,提高信道的可靠性。因此在FPGA 數(shù)據(jù)的存儲區(qū)域中通過采用糾錯編碼技術可以有效提高信息的傳輸正確性,這是解決在輻照環(huán)境下數(shù)據(jù)出現(xiàn)SEU 錯誤的有效方法。
糾錯編碼的基本思想如圖1 所示:在原有信息位的后面增加冗余位來構造一完整的信息編碼字。其中k 比特位信息位,n-k 比特位冗余位一起組成n 比特編碼字長。根據(jù)采用不同的糾錯編碼算法可以得到不同糾錯性能和復雜度的編碼字通常情況采用較多的糾錯編碼類型有:BCH 碼,RS 編碼,LDPC 編碼等。
圖1 糾錯編碼基本結構
在具體電路設計中一般根據(jù)設計的預期和復雜度選用合理的編碼方法。如圖2 所示是一個典型的FPGA 內部數(shù)據(jù)編碼存儲和讀取方法。其中編碼數(shù)據(jù)進入FPGA內部存儲區(qū)域SRAM 存儲區(qū)時先進行編碼,然后存在相映的存儲區(qū)中,在讀取時對存取的數(shù)據(jù)進行解碼,如在輻照條件下,存儲區(qū)中的數(shù)據(jù)發(fā)生錯誤,解碼模塊在輸出時能正確恢復出原始數(shù)據(jù),糾正因為SEU 導致的數(shù)據(jù)位錯誤。
對于設計中的關鍵狀態(tài)機進行編碼加固,在原有自然碼、格雷碼、獨熱碼基礎上可以通過增加編碼冗余的方法,實現(xiàn)狀態(tài)機加固從而能夠達到檢測錯誤甚至糾錯的能力,從而避免了因為SEU 造成狀態(tài)機跑飛或死鎖等問題。
綜合研究了SRAM 型FPGA 的硬件和軟件可靠性設計方法,根據(jù)衛(wèi)星電子設備的具體情況,選擇或結合使用以上設計方法可以有效抗空間SEU。
圖2 ECC 糾錯一般結構