龔 博,鄭 晨,張洪源,劉 莉,王超杰
(北京宇航系統(tǒng)工程研究所,北京 100076)
空間中的輻射特性對電子元器件影響較大,主要因為輻射環(huán)境中高能粒子(重粒子、質(zhì)子、中子、X射線、γ射線等)對集成電路造成的破環(huán),其中輻射總劑量(TID,total ionizing dose)和單粒子效應(yīng)(SEE,single event effect)為主要的表現(xiàn)形式,近年來隨著電子器件中的存儲單元尺寸越來越小,TID效應(yīng)幾乎可以忽略不計[1-3],但接近納米級存儲單元邏輯門和極低核心電壓導(dǎo)致單粒子效應(yīng)(SEE,single event effect)大大增強,SEE又分為單粒子翻轉(zhuǎn)(SEU,single event upset)和單粒子鎖定(SEL,single event latch),本文主要是針對邏輯門翻轉(zhuǎn)效應(yīng)進行研究。
SEU是指半導(dǎo)體邏輯器件由于受到單個高能粒子撞擊而使邏輯狀態(tài)翻轉(zhuǎn)的情況,這種情況造成的錯誤不是硬傷是可恢復(fù)的,因此也被稱為軟錯誤。空間計算機系統(tǒng)中SEU發(fā)生頻率最高的是面積相對較大的存儲器部分(例如外部SRAM),同時CPU和接口電路中存儲單元也有發(fā)生的可能(例如緩存,鎖存器)。
傳統(tǒng)的容錯算法和容錯方案只針對單粒子單位翻轉(zhuǎn),但是隨著存儲單元的工藝尺寸越來越小,核心電壓越來越低,單粒子多位翻轉(zhuǎn)的情況越來越多。Alsat-1小衛(wèi)星的觀測表明在其軌道上每天每一位存儲單元發(fā)生單粒子翻轉(zhuǎn)的概率約為百萬分之一,其中80%為單粒子單位翻轉(zhuǎn),20%為單粒子兩位翻轉(zhuǎn)和多位翻轉(zhuǎn)[4],而UoSAT-12衛(wèi)星星載計算機SRAM對單子翻轉(zhuǎn)的在軌實驗統(tǒng)計得出結(jié)論在LEO軌道的單子多位翻轉(zhuǎn)占單粒子翻轉(zhuǎn)總數(shù)5%~10%[5],盡管數(shù)據(jù)不盡相同,但我們可以得出結(jié)論:MBU已經(jīng)不容忽視。
目前國內(nèi)外許多衛(wèi)星、在軌飛行器都采用了硬件的冗余容錯來實現(xiàn)對空間計算機外圍的存儲芯片的糾錯和檢錯,實現(xiàn)方式有抗輻照加固、三模冗余,專用的EDAC芯片等,但這些方案都不適用于現(xiàn)代商業(yè)航天的發(fā)展模式,主要是因為抗輻射加固會大大增重,影響有效載荷重量,三模冗余無法解決多位翻轉(zhuǎn)問題,而專用冗余芯片無法滿足周期短成本低的要求,因此需要構(gòu)建一種針對MBU的容錯碼解決方案,占用較少資源的同時提升糾錯能力,從而達到計算機存儲單元加固目的。
因為空間高能粒子具有較大離散性和較低的密度,所以單粒子多位翻轉(zhuǎn)除特殊情況外(例如遭遇太陽磁暴等宇宙環(huán)境,粒子密度短時間內(nèi)驟增,導(dǎo)致高密度粒子流或多個粒子同時擊中多個存儲單元)一般指單個高能粒子造成多個存儲單元翻轉(zhuǎn),這種情況的發(fā)生主要依靠兩種方式,第一種為注入塌陷效應(yīng),指高能粒子以小入射角垂直于存儲單元入射,產(chǎn)生的電荷擴散到互相相鄰的位置,由于電荷的共享效應(yīng),造成鄰位多位翻轉(zhuǎn),例如圖1中的第二類和第三類。第二種為擊穿效應(yīng),高能粒子以大入射角水平入射轟擊并穿過多個存儲單元造成多位翻轉(zhuǎn),例如圖1中的第一類和第四類,均造成了相鄰位邏輯翻轉(zhuǎn)[6];傳統(tǒng)上認為由于能量限制第一類較多,而隨著存儲單元核心電壓降低第二類同樣值得重視。圖1是存儲單元多位翻轉(zhuǎn)的矩陣示意圖,水平方向為存儲單元排列方向,垂直方向為存儲單元照射方向。

圖1 單粒子多位翻轉(zhuǎn)示意圖
目前市場上商用器件除部分采用物理臨位和邏輯臨位分開工藝的器件外,大多數(shù)存儲器件都容易收到單粒子效應(yīng)影響,因此需要通過試驗?zāi)M高能粒子轟擊存儲單元來建立容錯模型,圖2是幾組對比試驗[7-9],能量單位為MeV,取4個檔位,并運用大量樣本分析統(tǒng)計數(shù)據(jù),從試驗結(jié)果我們可以得出當(dāng)用不同能量的質(zhì)子轟擊SRAM存儲單元時可以造成大量的多位翻轉(zhuǎn),從存儲矩陣的橫列和縱列來看多位翻轉(zhuǎn)幾乎全部是相鄰兩位,相鄰三位雖然存在但數(shù)量較少,四位及四位以上幾乎可以忽略不計,由此可以得出模型中重要能力:容錯能力要求在保持糾正1位檢測兩位錯誤的基礎(chǔ)上能糾相鄰2bit和3bit錯誤。

圖2 單粒子多位翻轉(zhuǎn)測試結(jié)果
容錯模型的容錯能力提出后還需要找到合適的容錯方法,抗輻照加固、專用芯片前文已經(jīng)提過不適應(yīng)于現(xiàn)在的發(fā)展?fàn)顩r,我們主要考慮硬件冗余和信息冗余兩種方法,硬件冗余中常見為三模冗余、多模冗余、邏輯冗余等,由于前文得出需要糾2bit、3bit的能力,經(jīng)典三模冗余無法完成,多模冗余和邏輯冗余完成需要構(gòu)建大量重復(fù)邏輯資源,造成體積、重量、成本等增加同樣不適合于商用航天,另一種方案是信息冗余,信息冗余是通過某種算法(既冗余位和有效位的對應(yīng)關(guān)系)來對信息位進行校驗和糾錯,信息冗余的優(yōu)點是冗余度相對較少,所占資源相對較少,適用于本文需要解決的問題,但傳統(tǒng)的以海明碼為算法的EDAC(error detection and correction)算法同樣不具有糾2bit、3bit的能力,不使用專用芯片的情況下需要構(gòu)建一個算法來完成信息冗余方案。
信息冗余算法指在發(fā)送端按照某種特性構(gòu)造增加一些冗余位,當(dāng)數(shù)據(jù)有效部分和冗余部分因外界故障注入時發(fā)生錯誤,接收端按照同樣的構(gòu)造特性進行計算和比對,這種構(gòu)造規(guī)則即為冗余算法,也就是常說的糾錯碼。由上文建模結(jié)果可知,我們需要一種抗MBU多位翻轉(zhuǎn)的糾錯算法。
因考慮工程實現(xiàn)的簡便性,本文所討論的編碼算法均為二進制碼,設(shè)輸入的每組信息碼的碼元為k,經(jīng)過編碼后的每組碼的碼元為n,其中n>k,通常用(n,k)來表示。要構(gòu)造編碼算法首先要確定編碼類型,這里我們需要選擇最簡單的線性編碼,即在有效的8位或16位數(shù)據(jù)后面通過邏輯加法增加冗余位,線性編碼能最大的節(jié)省寄存器資源,否則采用復(fù)雜編碼算法就需要專門開辟寄存器存儲區(qū)域來專門運行和存儲計算結(jié)果,不但提高了成本和資源占用且會造成計算和存儲的時間延遲。
由上文糾錯模型可知,傳統(tǒng)基于海明碼和擴展海明碼的EDAC算法糾錯能力不足,無法應(yīng)對商用器件空間環(huán)境下的MBU,需要我們重新構(gòu)造編碼算法,在線性編碼的條件下完成糾錯能力的提高,從工程實現(xiàn)和理論分析兩個角度出發(fā)必須滿足以下幾個條件:首先,此糾錯碼必須為系統(tǒng)碼,即保持有效位不變,也就是說從工程實現(xiàn)的角度來考慮有效的8位或16位在編碼譯碼的過程中保持不變,減小工程實現(xiàn)難度;第二,從編碼原理上分析,提高糾錯能力必然意味著碼距的增加,但通過上文建模可知,多位翻轉(zhuǎn)并不是隨機的,而是在存儲陣列縱橫的鄰位翻轉(zhuǎn),這樣我們只需要解決鄰位翻轉(zhuǎn)問題即可,碼距增加的越小,編碼的復(fù)雜程度越低,編碼和解碼所占用的資源和時間越少,越有利于工程實現(xiàn);第三,此算法需要具有(n,8)的結(jié)構(gòu),因為現(xiàn)在工程上信息位基本均為8的倍數(shù),使用(n,8)的結(jié)構(gòu)可以最大程度增加冗余而又不影響工程上8位、16位、32位數(shù)據(jù)的使用,否則數(shù)據(jù)拼接這一項額外環(huán)節(jié)就會對系統(tǒng)造成額外負擔(dān)。
現(xiàn)假設(shè)信息碼原碼為U,編碼后的監(jiān)督碼為C,則C與U的關(guān)系可以描述為:
C=U·G
(1)
G即為生成矩陣,解碼時公式如下:
H·CT=0
(2)
進行解碼時H矩陣就叫做校驗矩陣,也叫做監(jiān)督矩陣,校驗矩陣的各行是線性無關(guān)的,H矩陣與生成矩陣的關(guān)系如下:
G·HT=0
(3)
也就是所給定糾錯碼的情況下,編碼和解碼的線性關(guān)系就唯一確定了。由上可知H矩陣不僅確定了信息碼和冗余碼之間的關(guān)系,也決定了碼的距離特性,實際上我們就是在用H矩陣在2n的碼字中進行篩選。
設(shè)R是接收端接收到的碼字,此時R中已經(jīng)含有錯誤圖樣,仍然用校驗矩陣H來檢查碼字是否滿足校驗方程,設(shè)編碼碼字C=(c6,c5,c4,c3,c2,c1,c0),錯誤碼字為E=(e6,e5,e4,e3,e2,e1,e0),則R=C+E。收到R后用H矩陣進行校驗,如下所示:
H·RT=H·(C+E)T=H·CT+H·ET
(4)
由方程(2)可以知道H·CT=0,帶入方程(4)得H·RT=H·ET,設(shè)S矩陣為:
ST=H·RT=H·ET
(5)
則S就被稱為伴隨式或校驗子,根據(jù)校正子和錯誤圖樣對應(yīng)關(guān)系表查找對應(yīng)錯誤。
本文在一種糾正相鄰錯誤(15,9)的循環(huán)碼的基礎(chǔ)上進行改進[10-12],這種碼是系統(tǒng)碼和線性碼,可以糾正相鄰2位和3位錯誤,這種(15,9)的循環(huán)碼的生成多項式為g(x)=x6+x5+x4+x3+1,它的校驗矩陣H如矩陣(6)所示。

(6)
對比上文幾個必要條件我們得出:此碼為2進制線性碼,具備工程實現(xiàn)方便的特點,此碼碼距為3,雖然能糾正鄰位錯位,卻不具備檢測任意2位錯位的能力,需要重新構(gòu)造,增加其碼距,提高其容錯能力,同時,此碼不滿足(n,8)結(jié)構(gòu),我們也需要對其重新構(gòu)造,使其符合我們計算機常用存儲單元數(shù)據(jù)位要求,這里以最基本的8位為例,其他8的倍數(shù)依此類推。
我們首先對其進行結(jié)構(gòu)上的改進,刪除第九列,碼字變?yōu)?14,8)結(jié)構(gòu),H矩陣變?yōu)榫仃?7),使其滿足我們結(jié)構(gòu)上(n,8)的要求,但是其碼距仍然為3,通過計算要檢查任意2位錯位同時保持糾正鄰位錯誤碼距至少為4,考慮到工程實現(xiàn)上的復(fù)雜程度,考慮提高碼距為4。

(7)
原碼字數(shù)據(jù)D7D6D5D4D3D2D1D0共計8位,根據(jù)校驗矩陣(7)得出增加冗余碼后碼字的長度變?yōu)?4位,設(shè)為D7D6D5D4D3D2D1D0C5C4C3C2C1C0,其中C5C4C3C2C1C0為冗余碼,通過公式C·HT=0來約束,同時設(shè)S為伴隨式,共計六位,為S5S4S3S2S1S0,我們通過公式S=E·HT得出伴隨式S,計算結(jié)果可知伴隨式不是一一對應(yīng),重疊情況如表1所示。

表1 改進校驗矩陣對應(yīng)的伴隨式重疊表
伴隨式共6位,含義如下:C2表示C2位單個錯誤,D50表示D5和D0位都出現(xiàn)錯誤,D210表示D2、D1、D0三位鄰位錯誤,而C2和D50對應(yīng)同一個伴隨式值,表示伴隨式重疊,即糾錯碼無法分辨這兩種錯誤,同理D654、D71和D30表示三種錯誤對應(yīng)同一個伴隨式無法完成分辨和糾錯。
通過上表我們可以看到我們?nèi)匀幻媾R以下幾個問題:1)部分錯誤使用同一伴隨式,這樣就會使我們在工程計算上分辨不出原碼或冗余碼的故障來源于哪種錯誤,從而無法就行糾錯;2)工程上實現(xiàn)的意義僅在于糾正或檢驗出原碼的正確與否,而冗余碼出錯也可以忽略,但此伴隨式冗余碼卻占用者一定資源。
為解決以上兩個問題,我們進一步分析可以發(fā)現(xiàn)D31D70這樣的錯誤雖然是兩位錯誤重疊,但我們僅僅要求檢測兩位,糾正相鄰兩位和三位,而不要求糾正任意2位,所以D31D70這樣的錯誤我們工程上不關(guān)心可以忽略不計,同時我們發(fā)現(xiàn)所有重疊的錯誤中由于矩陣本身的性質(zhì)導(dǎo)致均為奇偶重疊,即一位錯誤與兩位錯誤伴隨式相同,兩位錯誤和三位錯誤伴隨式相同,并沒有一位錯誤與三位錯誤伴隨式相同的情況,因此我們很自然想到在重疊的基礎(chǔ)上用奇偶來區(qū)分,增加一列奇偶區(qū)分列,可以使碼距由3變?yōu)?,滿足檢測任意兩位的同時也保持了糾正任意一位同時糾正相鄰兩位、三位錯誤的能力,因此我們調(diào)整后矩陣H如矩陣(8)所示。

(8)
第二次改進矩陣求出的伴隨式重疊統(tǒng)計如表2所示。從表中分析我們得出任意一位、相鄰兩位和相鄰三位都不重疊,且任意兩位可以檢測,因此我們得出結(jié)論:改進后的循環(huán)碼保證糾正1位檢測2位錯誤的基礎(chǔ)上針對MBU的錯誤模式滿足了糾正相鄰2位和3位的能力的要求。

表2 改進校驗矩陣對應(yīng)的伴隨式重疊表
工程上我們可以根據(jù)改進后的H矩陣求出編碼方程和解碼的伴隨式方程。電路實現(xiàn)時所需要的邏輯運算都是三種基本運加邏輯異或運算,這種邏輯電路通過可編程邏輯器件來實現(xiàn),且可以根據(jù)不同的算法做出相應(yīng)修改,具有很好的靈活性。以8bit為例得出編碼計算公式和伴隨式計算公式分別如公式(9)和公式(10)所示。
C6=D7⊕D6⊕D4⊕D3⊕D2⊕D0
C5=D7⊕D4⊕D1
C4=D7⊕D6⊕D5⊕D4⊕D2⊕D0
C3=D7⊕D5⊕D2⊕D1
C2=D5⊕D4⊕D1⊕D0
C1=D6⊕D5⊕D4⊕D3⊕D0
C0=C6⊕C5⊕C4⊕C3⊕C2⊕C1⊕
D7⊕D6⊕D5⊕D4⊕D3⊕D2⊕D1⊕D0
(9)
S6=C6⊕D7⊕D6⊕D4⊕D3⊕D2⊕D0
S5=C5⊕D7⊕D4⊕D1
S4=C4⊕D7⊕D6⊕D5⊕D4⊕D2⊕D0
S3=C3⊕D7⊕D5⊕D2⊕D1
S2=C2⊕D5⊕D4⊕D1⊕D0
S1=C1⊕D6⊕D5⊕D4⊕D3⊕D0
S0=C0⊕C6⊕C5⊕C4⊕C3⊕C2⊕C1⊕
D7⊕D6⊕D5⊕D4⊕D3⊕D2⊕D1⊕D0
(10)
EDAC容錯原理圖如圖3所示,在CPU和存儲器之間增加EDAC模塊,由可編程邏輯器件FPGA實現(xiàn),處理器和存儲器之間除了地址總線相連外其他控制信號和數(shù)據(jù)信號均通過EDAC模塊處理后再發(fā)給存儲器,即對存儲器的讀寫均由FPGA完成。

圖3 EDAC模塊設(shè)計原理圖
兩片存儲器芯片分為數(shù)據(jù)RAM和校驗RAM,分別用來存放數(shù)據(jù)碼和編碼模塊生成的冗余碼。其中addr1、addr2分別連接數(shù)據(jù)和校驗SRAM,addr3連接FPGA實現(xiàn)EDAC模塊,數(shù)據(jù)16位分為高8位和低8位,DATAH為高8位數(shù)據(jù)原碼,PARITYH為高8位數(shù)據(jù)校驗碼,低8位同理。EDAC模塊被分為平行的兩部分,一部分對高8位數(shù)據(jù)進行校驗,一部分對低8位數(shù)據(jù)進行校驗,兩部分數(shù)據(jù)位和校驗位存儲到四片SRAM中,4片SRAM的地址都由CPU統(tǒng)一控制,F(xiàn)PGA只對存儲器進行數(shù)據(jù)的讀寫。
EDAC實現(xiàn)模塊內(nèi)部結(jié)構(gòu)圖如圖4所示,其中EDAC模塊負責(zé)連接CPU和SRAM之間的數(shù)據(jù)流,對于CPU來說SRAM是透明的,當(dāng)片選信號有效時,寫信號過程如下:wr/rd讀寫控制信號置1,三態(tài)門A打開,CPU發(fā)出數(shù)據(jù)經(jīng)過三態(tài)門進入編碼器,生成糾錯碼,此時多路選擇器打開,數(shù)據(jù)碼和糾錯碼通過三態(tài)門B寫入存儲器。當(dāng)片選信號有效時,讀信號過程如下,wr/rd讀寫控制信號置0,三態(tài)門B打開,需要校驗的數(shù)據(jù)由存儲器進入鎖存器,由FPGA內(nèi)部的時序控制器發(fā)出鎖存信號sr_en將數(shù)據(jù)鎖存,糾錯模塊將鎖存的數(shù)據(jù)就行校驗,并在讀過程結(jié)束時由時序控制器發(fā)出是否有錯的信號error,如果沒有錯誤將數(shù)據(jù)通過三態(tài)門A送到CPU,如果有錯將多路選擇器打,將糾正后的數(shù)據(jù)通過三態(tài)門B回寫入存儲器。

圖4 EDAC內(nèi)部結(jié)構(gòu)圖
時序控制器產(chǎn)生糾錯結(jié)束標志信號cr_over,鎖存標志信號sr_en,寫控制信號we,具體操作如下,首先是鎖存信號sr_en的產(chǎn)生,根據(jù)CPU數(shù)據(jù)手冊,CPU地址總線使能最大延遲為20 ns,片選使能延遲也約為20 ns,而本系統(tǒng)中片選信號通過FPGA還要有約為5 ns的延遲,而從地址有效到數(shù)據(jù)有效的時間約為15 ns,從外部通過三態(tài)門B到鎖存器的延遲約為5 ns,一共延遲約為20+5+15+5=45 ns,加上一些余量鎖存時間確定為60 ns可以確保采到有效數(shù)據(jù),糾錯模塊的邏輯電路延遲約為12 ns,取80 ns可以確定糾錯完成時間,cr_over信號置1,如果發(fā)生錯誤數(shù)據(jù)還要回寫至存儲器,存儲器最小寫入時間約為18 ns,加上通過三態(tài)門的約為5 ns的延遲,約為80+18+5=103 ns,取120 ns為最后結(jié)束時間,所以we信號從80 ns至120置1,其他時間置0。
本節(jié)將改進型循環(huán)碼、擴展海明碼以及準循環(huán)碼進行仿真、測試和結(jié)果比較,比較他們的糾錯能力和消耗的資源。
擴展的海明碼、準循環(huán)碼、改進的循環(huán)碼功能仿真圖如圖5、圖6、圖7所示。clk是系統(tǒng)時鐘,clkinsert是采樣時鐘,是驗證環(huán)節(jié)錯誤注入需要的,cstate和nstate為兩段式狀態(tài)機的兩個狀態(tài),din為輸入數(shù)據(jù),paritycode為編碼數(shù)據(jù),parityerror是軟件注入的錯誤,s代表生成的伴隨式,dataout為輸出,e為最后檢查出的錯誤,warnning為不能解決錯誤向CPU發(fā)出的中斷請求信號。

圖5 擴展的海明碼編碼解碼仿真圖

圖6 準循環(huán)碼編碼解碼仿真圖

圖7 改進型循環(huán)碼編碼解碼仿真圖
三種算法的糾錯能力和資源消耗的總結(jié)如表3所示,其中實現(xiàn)資源中的S指Xilinx FPGA基本單元Slice,L指4輸入查找表LUT,此表以8bit數(shù)據(jù)為例,所以存儲資源1byte用來存放數(shù)據(jù)碼,1byte用來存放冗余碼,三種算法均為2byte,而時間延遲為布局布線加上時序約束后仿真軟件的報告中給出的可能的最長的時間延遲路徑。通過表中比較我們可以看到三種算法可靠度都非常高也都比較接近,而我們是通過FPGA并行實現(xiàn)的編碼,所以碼率在工程實現(xiàn)中的影響不大,時間延遲的技術(shù)指標為20 ns,三種算法也都滿足了指標要求,最后我們看到新算法相比較與傳統(tǒng)的海明碼來說糾錯能力有大幅提高,同時實現(xiàn)資源也相應(yīng)增加,我們可以得出結(jié)論,新算法達通過面積資源的消耗換取了糾錯能力的提升。

表3 三種算法糾錯能力與資源消耗比較比較
本文通過資料分析得出空間環(huán)境下單粒子多位翻轉(zhuǎn)模型,然后以此模型為基礎(chǔ)提出一種改進型準循環(huán)碼算法用于解決多位翻轉(zhuǎn)下的相鄰位翻轉(zhuǎn)問題,最后以模型和算法為基礎(chǔ)提出具有工程意義的EDAC糾錯模塊設(shè)計,并給出測試和仿真結(jié)果,結(jié)果證明本方法簡單可靠,適用于工程應(yīng)用,有效解決了商用存儲器件空間環(huán)境中單粒子多位翻轉(zhuǎn)問題。