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