龔 博,鄭 晨,張洪源,劉 莉,王超杰
(北京宇航系統(tǒng)工程研究所,北京 100076)
空間中的輻射特性對(duì)電子元器件影響較大,主要因?yàn)檩椛洵h(huán)境中高能粒子(重粒子、質(zhì)子、中子、X射線、γ射線等)對(duì)集成電路造成的破環(huán),其中輻射總劑量(TID,total ionizing dose)和單粒子效應(yīng)(SEE,single event effect)為主要的表現(xiàn)形式,近年來(lái)隨著電子器件中的存儲(chǔ)單元尺寸越來(lái)越小,TID效應(yīng)幾乎可以忽略不計(jì)[1-3],但接近納米級(jí)存儲(chǔ)單元邏輯門和極低核心電壓導(dǎo)致單粒子效應(yīng)(SEE,single event effect)大大增強(qiáng),SEE又分為單粒子翻轉(zhuǎn)(SEU,single event upset)和單粒子鎖定(SEL,single event latch),本文主要是針對(duì)邏輯門翻轉(zhuǎn)效應(yīng)進(jìn)行研究。
SEU是指半導(dǎo)體邏輯器件由于受到單個(gè)高能粒子撞擊而使邏輯狀態(tài)翻轉(zhuǎn)的情況,這種情況造成的錯(cuò)誤不是硬傷是可恢復(fù)的,因此也被稱為軟錯(cuò)誤??臻g計(jì)算機(jī)系統(tǒng)中SEU發(fā)生頻率最高的是面積相對(duì)較大的存儲(chǔ)器部分(例如外部SRAM),同時(shí)CPU和接口電路中存儲(chǔ)單元也有發(fā)生的可能(例如緩存,鎖存器)。
傳統(tǒng)的容錯(cuò)算法和容錯(cuò)方案只針對(duì)單粒子單位翻轉(zhuǎn),但是隨著存儲(chǔ)單元的工藝尺寸越來(lái)越小,核心電壓越來(lái)越低,單粒子多位翻轉(zhuǎn)的情況越來(lái)越多。Alsat-1小衛(wèi)星的觀測(cè)表明在其軌道上每天每一位存儲(chǔ)單元發(fā)生單粒子翻轉(zhuǎn)的概率約為百萬(wàn)分之一,其中80%為單粒子單位翻轉(zhuǎn),20%為單粒子兩位翻轉(zhuǎn)和多位翻轉(zhuǎn)[4],而UoSAT-12衛(wèi)星星載計(jì)算機(jī)SRAM對(duì)單子翻轉(zhuǎn)的在軌實(shí)驗(yàn)統(tǒng)計(jì)得出結(jié)論在LEO軌道的單子多位翻轉(zhuǎn)占單粒子翻轉(zhuǎn)總數(shù)5%~10%[5],盡管數(shù)據(jù)不盡相同,但我們可以得出結(jié)論:MBU已經(jīng)不容忽視。
目前國(guó)內(nèi)外許多衛(wèi)星、在軌飛行器都采用了硬件的冗余容錯(cuò)來(lái)實(shí)現(xiàn)對(duì)空間計(jì)算機(jī)外圍的存儲(chǔ)芯片的糾錯(cuò)和檢錯(cuò),實(shí)現(xiàn)方式有抗輻照加固、三模冗余,專用的EDAC芯片等,但這些方案都不適用于現(xiàn)代商業(yè)航天的發(fā)展模式,主要是因?yàn)榭馆椛浼庸虝?huì)大大增重,影響有效載荷重量,三模冗余無(wú)法解決多位翻轉(zhuǎn)問(wèn)題,而專用冗余芯片無(wú)法滿足周期短成本低的要求,因此需要構(gòu)建一種針對(duì)MBU的容錯(cuò)碼解決方案,占用較少資源的同時(shí)提升糾錯(cuò)能力,從而達(dá)到計(jì)算機(jī)存儲(chǔ)單元加固目的。
因?yàn)榭臻g高能粒子具有較大離散性和較低的密度,所以單粒子多位翻轉(zhuǎn)除特殊情況外(例如遭遇太陽(yáng)磁暴等宇宙環(huán)境,粒子密度短時(shí)間內(nèi)驟增,導(dǎo)致高密度粒子流或多個(gè)粒子同時(shí)擊中多個(gè)存儲(chǔ)單元)一般指單個(gè)高能粒子造成多個(gè)存儲(chǔ)單元翻轉(zhuǎn),這種情況的發(fā)生主要依靠?jī)煞N方式,第一種為注入塌陷效應(yīng),指高能粒子以小入射角垂直于存儲(chǔ)單元入射,產(chǎn)生的電荷擴(kuò)散到互相相鄰的位置,由于電荷的共享效應(yīng),造成鄰位多位翻轉(zhuǎn),例如圖1中的第二類和第三類。第二種為擊穿效應(yīng),高能粒子以大入射角水平入射轟擊并穿過(guò)多個(gè)存儲(chǔ)單元造成多位翻轉(zhuǎn),例如圖1中的第一類和第四類,均造成了相鄰位邏輯翻轉(zhuǎn)[6];傳統(tǒng)上認(rèn)為由于能量限制第一類較多,而隨著存儲(chǔ)單元核心電壓降低第二類同樣值得重視。圖1是存儲(chǔ)單元多位翻轉(zhuǎn)的矩陣示意圖,水平方向?yàn)榇鎯?chǔ)單元排列方向,垂直方向?yàn)榇鎯?chǔ)單元照射方向。
圖1 單粒子多位翻轉(zhuǎn)示意圖
目前市場(chǎng)上商用器件除部分采用物理臨位和邏輯臨位分開(kāi)工藝的器件外,大多數(shù)存儲(chǔ)器件都容易收到單粒子效應(yīng)影響,因此需要通過(guò)試驗(yàn)?zāi)M高能粒子轟擊存儲(chǔ)單元來(lái)建立容錯(cuò)模型,圖2是幾組對(duì)比試驗(yàn)[7-9],能量單位為MeV,取4個(gè)檔位,并運(yùn)用大量樣本分析統(tǒng)計(jì)數(shù)據(jù),從試驗(yàn)結(jié)果我們可以得出當(dāng)用不同能量的質(zhì)子轟擊SRAM存儲(chǔ)單元時(shí)可以造成大量的多位翻轉(zhuǎn),從存儲(chǔ)矩陣的橫列和縱列來(lái)看多位翻轉(zhuǎn)幾乎全部是相鄰兩位,相鄰三位雖然存在但數(shù)量較少,四位及四位以上幾乎可以忽略不計(jì),由此可以得出模型中重要能力:容錯(cuò)能力要求在保持糾正1位檢測(cè)兩位錯(cuò)誤的基礎(chǔ)上能糾相鄰2bit和3bit錯(cuò)誤。
圖2 單粒子多位翻轉(zhuǎn)測(cè)試結(jié)果
容錯(cuò)模型的容錯(cuò)能力提出后還需要找到合適的容錯(cuò)方法,抗輻照加固、專用芯片前文已經(jīng)提過(guò)不適應(yīng)于現(xiàn)在的發(fā)展?fàn)顩r,我們主要考慮硬件冗余和信息冗余兩種方法,硬件冗余中常見(jiàn)為三模冗余、多模冗余、邏輯冗余等,由于前文得出需要糾2bit、3bit的能力,經(jīng)典三模冗余無(wú)法完成,多模冗余和邏輯冗余完成需要構(gòu)建大量重復(fù)邏輯資源,造成體積、重量、成本等增加同樣不適合于商用航天,另一種方案是信息冗余,信息冗余是通過(guò)某種算法(既冗余位和有效位的對(duì)應(yīng)關(guān)系)來(lái)對(duì)信息位進(jìn)行校驗(yàn)和糾錯(cuò),信息冗余的優(yōu)點(diǎn)是冗余度相對(duì)較少,所占資源相對(duì)較少,適用于本文需要解決的問(wèn)題,但傳統(tǒng)的以海明碼為算法的EDAC(error detection and correction)算法同樣不具有糾2bit、3bit的能力,不使用專用芯片的情況下需要構(gòu)建一個(gè)算法來(lái)完成信息冗余方案。
信息冗余算法指在發(fā)送端按照某種特性構(gòu)造增加一些冗余位,當(dāng)數(shù)據(jù)有效部分和冗余部分因外界故障注入時(shí)發(fā)生錯(cuò)誤,接收端按照同樣的構(gòu)造特性進(jìn)行計(jì)算和比對(duì),這種構(gòu)造規(guī)則即為冗余算法,也就是常說(shuō)的糾錯(cuò)碼。由上文建模結(jié)果可知,我們需要一種抗MBU多位翻轉(zhuǎn)的糾錯(cuò)算法。
因考慮工程實(shí)現(xiàn)的簡(jiǎn)便性,本文所討論的編碼算法均為二進(jìn)制碼,設(shè)輸入的每組信息碼的碼元為k,經(jīng)過(guò)編碼后的每組碼的碼元為n,其中n>k,通常用(n,k)來(lái)表示。要構(gòu)造編碼算法首先要確定編碼類型,這里我們需要選擇最簡(jiǎn)單的線性編碼,即在有效的8位或16位數(shù)據(jù)后面通過(guò)邏輯加法增加冗余位,線性編碼能最大的節(jié)省寄存器資源,否則采用復(fù)雜編碼算法就需要專門開(kāi)辟寄存器存儲(chǔ)區(qū)域來(lái)專門運(yùn)行和存儲(chǔ)計(jì)算結(jié)果,不但提高了成本和資源占用且會(huì)造成計(jì)算和存儲(chǔ)的時(shí)間延遲。
由上文糾錯(cuò)模型可知,傳統(tǒng)基于海明碼和擴(kuò)展海明碼的EDAC算法糾錯(cuò)能力不足,無(wú)法應(yīng)對(duì)商用器件空間環(huán)境下的MBU,需要我們重新構(gòu)造編碼算法,在線性編碼的條件下完成糾錯(cuò)能力的提高,從工程實(shí)現(xiàn)和理論分析兩個(gè)角度出發(fā)必須滿足以下幾個(gè)條件:首先,此糾錯(cuò)碼必須為系統(tǒng)碼,即保持有效位不變,也就是說(shuō)從工程實(shí)現(xiàn)的角度來(lái)考慮有效的8位或16位在編碼譯碼的過(guò)程中保持不變,減小工程實(shí)現(xiàn)難度;第二,從編碼原理上分析,提高糾錯(cuò)能力必然意味著碼距的增加,但通過(guò)上文建模可知,多位翻轉(zhuǎn)并不是隨機(jī)的,而是在存儲(chǔ)陣列縱橫的鄰位翻轉(zhuǎn),這樣我們只需要解決鄰位翻轉(zhuǎn)問(wèn)題即可,碼距增加的越小,編碼的復(fù)雜程度越低,編碼和解碼所占用的資源和時(shí)間越少,越有利于工程實(shí)現(xiàn);第三,此算法需要具有(n,8)的結(jié)構(gòu),因?yàn)楝F(xiàn)在工程上信息位基本均為8的倍數(shù),使用(n,8)的結(jié)構(gòu)可以最大程度增加冗余而又不影響工程上8位、16位、32位數(shù)據(jù)的使用,否則數(shù)據(jù)拼接這一項(xiàng)額外環(huán)節(jié)就會(huì)對(duì)系統(tǒng)造成額外負(fù)擔(dān)。
現(xiàn)假設(shè)信息碼原碼為U,編碼后的監(jiān)督碼為C,則C與U的關(guān)系可以描述為:
C=U·G
(1)
G即為生成矩陣,解碼時(shí)公式如下:
H·CT=0
(2)
進(jìn)行解碼時(shí)H矩陣就叫做校驗(yàn)矩陣,也叫做監(jiān)督矩陣,校驗(yàn)矩陣的各行是線性無(wú)關(guān)的,H矩陣與生成矩陣的關(guān)系如下:
G·HT=0
(3)
也就是所給定糾錯(cuò)碼的情況下,編碼和解碼的線性關(guān)系就唯一確定了。由上可知H矩陣不僅確定了信息碼和冗余碼之間的關(guān)系,也決定了碼的距離特性,實(shí)際上我們就是在用H矩陣在2n的碼字中進(jìn)行篩選。
設(shè)R是接收端接收到的碼字,此時(shí)R中已經(jīng)含有錯(cuò)誤圖樣,仍然用校驗(yàn)矩陣H來(lái)檢查碼字是否滿足校驗(yàn)方程,設(shè)編碼碼字C=(c6,c5,c4,c3,c2,c1,c0),錯(cuò)誤碼字為E=(e6,e5,e4,e3,e2,e1,e0),則R=C+E。收到R后用H矩陣進(jìn)行校驗(yàn),如下所示:
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就被稱為伴隨式或校驗(yàn)子,根據(jù)校正子和錯(cuò)誤圖樣對(duì)應(yīng)關(guān)系表查找對(duì)應(yīng)錯(cuò)誤。
本文在一種糾正相鄰錯(cuò)誤(15,9)的循環(huán)碼的基礎(chǔ)上進(jìn)行改進(jìn)[10-12],這種碼是系統(tǒng)碼和線性碼,可以糾正相鄰2位和3位錯(cuò)誤,這種(15,9)的循環(huán)碼的生成多項(xiàng)式為g(x)=x6+x5+x4+x3+1,它的校驗(yàn)矩陣H如矩陣(6)所示。
(6)
對(duì)比上文幾個(gè)必要條件我們得出:此碼為2進(jìn)制線性碼,具備工程實(shí)現(xiàn)方便的特點(diǎn),此碼碼距為3,雖然能糾正鄰位錯(cuò)位,卻不具備檢測(cè)任意2位錯(cuò)位的能力,需要重新構(gòu)造,增加其碼距,提高其容錯(cuò)能力,同時(shí),此碼不滿足(n,8)結(jié)構(gòu),我們也需要對(duì)其重新構(gòu)造,使其符合我們計(jì)算機(jī)常用存儲(chǔ)單元數(shù)據(jù)位要求,這里以最基本的8位為例,其他8的倍數(shù)依此類推。
我們首先對(duì)其進(jìn)行結(jié)構(gòu)上的改進(jìn),刪除第九列,碼字變?yōu)?14,8)結(jié)構(gòu),H矩陣變?yōu)榫仃?7),使其滿足我們結(jié)構(gòu)上(n,8)的要求,但是其碼距仍然為3,通過(guò)計(jì)算要檢查任意2位錯(cuò)位同時(shí)保持糾正鄰位錯(cuò)誤碼距至少為4,考慮到工程實(shí)現(xiàn)上的復(fù)雜程度,考慮提高碼距為4。
(7)
原碼字?jǐn)?shù)據(jù)D7D6D5D4D3D2D1D0共計(jì)8位,根據(jù)校驗(yàn)矩陣(7)得出增加冗余碼后碼字的長(zhǎng)度變?yōu)?4位,設(shè)為D7D6D5D4D3D2D1D0C5C4C3C2C1C0,其中C5C4C3C2C1C0為冗余碼,通過(guò)公式C·HT=0來(lái)約束,同時(shí)設(shè)S為伴隨式,共計(jì)六位,為S5S4S3S2S1S0,我們通過(guò)公式S=E·HT得出伴隨式S,計(jì)算結(jié)果可知伴隨式不是一一對(duì)應(yīng),重疊情況如表1所示。
表1 改進(jìn)校驗(yàn)矩陣對(duì)應(yīng)的伴隨式重疊表
伴隨式共6位,含義如下:C2表示C2位單個(gè)錯(cuò)誤,D50表示D5和D0位都出現(xiàn)錯(cuò)誤,D210表示D2、D1、D0三位鄰位錯(cuò)誤,而C2和D50對(duì)應(yīng)同一個(gè)伴隨式值,表示伴隨式重疊,即糾錯(cuò)碼無(wú)法分辨這兩種錯(cuò)誤,同理D654、D71和D30表示三種錯(cuò)誤對(duì)應(yīng)同一個(gè)伴隨式無(wú)法完成分辨和糾錯(cuò)。
通過(guò)上表我們可以看到我們?nèi)匀幻媾R以下幾個(gè)問(wèn)題:1)部分錯(cuò)誤使用同一伴隨式,這樣就會(huì)使我們?cè)诠こ逃?jì)算上分辨不出原碼或冗余碼的故障來(lái)源于哪種錯(cuò)誤,從而無(wú)法就行糾錯(cuò);2)工程上實(shí)現(xiàn)的意義僅在于糾正或檢驗(yàn)出原碼的正確與否,而冗余碼出錯(cuò)也可以忽略,但此伴隨式冗余碼卻占用者一定資源。
為解決以上兩個(gè)問(wèn)題,我們進(jìn)一步分析可以發(fā)現(xiàn)D31D70這樣的錯(cuò)誤雖然是兩位錯(cuò)誤重疊,但我們僅僅要求檢測(cè)兩位,糾正相鄰兩位和三位,而不要求糾正任意2位,所以D31D70這樣的錯(cuò)誤我們工程上不關(guān)心可以忽略不計(jì),同時(shí)我們發(fā)現(xiàn)所有重疊的錯(cuò)誤中由于矩陣本身的性質(zhì)導(dǎo)致均為奇偶重疊,即一位錯(cuò)誤與兩位錯(cuò)誤伴隨式相同,兩位錯(cuò)誤和三位錯(cuò)誤伴隨式相同,并沒(méi)有一位錯(cuò)誤與三位錯(cuò)誤伴隨式相同的情況,因此我們很自然想到在重疊的基礎(chǔ)上用奇偶來(lái)區(qū)分,增加一列奇偶區(qū)分列,可以使碼距由3變?yōu)?,滿足檢測(cè)任意兩位的同時(shí)也保持了糾正任意一位同時(shí)糾正相鄰兩位、三位錯(cuò)誤的能力,因此我們調(diào)整后矩陣H如矩陣(8)所示。
(8)
第二次改進(jìn)矩陣求出的伴隨式重疊統(tǒng)計(jì)如表2所示。從表中分析我們得出任意一位、相鄰兩位和相鄰三位都不重疊,且任意兩位可以檢測(cè),因此我們得出結(jié)論:改進(jìn)后的循環(huán)碼保證糾正1位檢測(cè)2位錯(cuò)誤的基礎(chǔ)上針對(duì)MBU的錯(cuò)誤模式滿足了糾正相鄰2位和3位的能力的要求。
表2 改進(jìn)校驗(yàn)矩陣對(duì)應(yīng)的伴隨式重疊表
工程上我們可以根據(jù)改進(jìn)后的H矩陣求出編碼方程和解碼的伴隨式方程。電路實(shí)現(xiàn)時(shí)所需要的邏輯運(yùn)算都是三種基本運(yùn)加邏輯異或運(yùn)算,這種邏輯電路通過(guò)可編程邏輯器件來(lái)實(shí)現(xiàn),且可以根據(jù)不同的算法做出相應(yīng)修改,具有很好的靈活性。以8bit為例得出編碼計(jì)算公式和伴隨式計(jì)算公式分別如公式(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容錯(cuò)原理圖如圖3所示,在CPU和存儲(chǔ)器之間增加EDAC模塊,由可編程邏輯器件FPGA實(shí)現(xiàn),處理器和存儲(chǔ)器之間除了地址總線相連外其他控制信號(hào)和數(shù)據(jù)信號(hào)均通過(guò)EDAC模塊處理后再發(fā)給存儲(chǔ)器,即對(duì)存儲(chǔ)器的讀寫均由FPGA完成。
圖3 EDAC模塊設(shè)計(jì)原理圖
兩片存儲(chǔ)器芯片分為數(shù)據(jù)RAM和校驗(yàn)RAM,分別用來(lái)存放數(shù)據(jù)碼和編碼模塊生成的冗余碼。其中addr1、addr2分別連接數(shù)據(jù)和校驗(yàn)SRAM,addr3連接FPGA實(shí)現(xiàn)EDAC模塊,數(shù)據(jù)16位分為高8位和低8位,DATAH為高8位數(shù)據(jù)原碼,PARITYH為高8位數(shù)據(jù)校驗(yàn)碼,低8位同理。EDAC模塊被分為平行的兩部分,一部分對(duì)高8位數(shù)據(jù)進(jìn)行校驗(yàn),一部分對(duì)低8位數(shù)據(jù)進(jìn)行校驗(yàn),兩部分?jǐn)?shù)據(jù)位和校驗(yàn)位存儲(chǔ)到四片SRAM中,4片SRAM的地址都由CPU統(tǒng)一控制,F(xiàn)PGA只對(duì)存儲(chǔ)器進(jìn)行數(shù)據(jù)的讀寫。
EDAC實(shí)現(xiàn)模塊內(nèi)部結(jié)構(gòu)圖如圖4所示,其中EDAC模塊負(fù)責(zé)連接CPU和SRAM之間的數(shù)據(jù)流,對(duì)于CPU來(lái)說(shuō)SRAM是透明的,當(dāng)片選信號(hào)有效時(shí),寫信號(hào)過(guò)程如下:wr/rd讀寫控制信號(hào)置1,三態(tài)門A打開(kāi),CPU發(fā)出數(shù)據(jù)經(jīng)過(guò)三態(tài)門進(jìn)入編碼器,生成糾錯(cuò)碼,此時(shí)多路選擇器打開(kāi),數(shù)據(jù)碼和糾錯(cuò)碼通過(guò)三態(tài)門B寫入存儲(chǔ)器。當(dāng)片選信號(hào)有效時(shí),讀信號(hào)過(guò)程如下,wr/rd讀寫控制信號(hào)置0,三態(tài)門B打開(kāi),需要校驗(yàn)的數(shù)據(jù)由存儲(chǔ)器進(jìn)入鎖存器,由FPGA內(nèi)部的時(shí)序控制器發(fā)出鎖存信號(hào)sr_en將數(shù)據(jù)鎖存,糾錯(cuò)模塊將鎖存的數(shù)據(jù)就行校驗(yàn),并在讀過(guò)程結(jié)束時(shí)由時(shí)序控制器發(fā)出是否有錯(cuò)的信號(hào)error,如果沒(méi)有錯(cuò)誤將數(shù)據(jù)通過(guò)三態(tài)門A送到CPU,如果有錯(cuò)將多路選擇器打,將糾正后的數(shù)據(jù)通過(guò)三態(tài)門B回寫入存儲(chǔ)器。
圖4 EDAC內(nèi)部結(jié)構(gòu)圖
時(shí)序控制器產(chǎn)生糾錯(cuò)結(jié)束標(biāo)志信號(hào)cr_over,鎖存標(biāo)志信號(hào)sr_en,寫控制信號(hào)we,具體操作如下,首先是鎖存信號(hào)sr_en的產(chǎn)生,根據(jù)CPU數(shù)據(jù)手冊(cè),CPU地址總線使能最大延遲為20 ns,片選使能延遲也約為20 ns,而本系統(tǒng)中片選信號(hào)通過(guò)FPGA還要有約為5 ns的延遲,而從地址有效到數(shù)據(jù)有效的時(shí)間約為15 ns,從外部通過(guò)三態(tài)門B到鎖存器的延遲約為5 ns,一共延遲約為20+5+15+5=45 ns,加上一些余量鎖存時(shí)間確定為60 ns可以確保采到有效數(shù)據(jù),糾錯(cuò)模塊的邏輯電路延遲約為12 ns,取80 ns可以確定糾錯(cuò)完成時(shí)間,cr_over信號(hào)置1,如果發(fā)生錯(cuò)誤數(shù)據(jù)還要回寫至存儲(chǔ)器,存儲(chǔ)器最小寫入時(shí)間約為18 ns,加上通過(guò)三態(tài)門的約為5 ns的延遲,約為80+18+5=103 ns,取120 ns為最后結(jié)束時(shí)間,所以we信號(hào)從80 ns至120置1,其他時(shí)間置0。
本節(jié)將改進(jìn)型循環(huán)碼、擴(kuò)展海明碼以及準(zhǔn)循環(huán)碼進(jìn)行仿真、測(cè)試和結(jié)果比較,比較他們的糾錯(cuò)能力和消耗的資源。
擴(kuò)展的海明碼、準(zhǔn)循環(huán)碼、改進(jìn)的循環(huán)碼功能仿真圖如圖5、圖6、圖7所示。clk是系統(tǒng)時(shí)鐘,clkinsert是采樣時(shí)鐘,是驗(yàn)證環(huán)節(jié)錯(cuò)誤注入需要的,cstate和nstate為兩段式狀態(tài)機(jī)的兩個(gè)狀態(tài),din為輸入數(shù)據(jù),paritycode為編碼數(shù)據(jù),parityerror是軟件注入的錯(cuò)誤,s代表生成的伴隨式,dataout為輸出,e為最后檢查出的錯(cuò)誤,warnning為不能解決錯(cuò)誤向CPU發(fā)出的中斷請(qǐng)求信號(hào)。
圖5 擴(kuò)展的海明碼編碼解碼仿真圖
圖6 準(zhǔn)循環(huán)碼編碼解碼仿真圖
圖7 改進(jìn)型循環(huán)碼編碼解碼仿真圖
三種算法的糾錯(cuò)能力和資源消耗的總結(jié)如表3所示,其中實(shí)現(xiàn)資源中的S指Xilinx FPGA基本單元Slice,L指4輸入查找表LUT,此表以8bit數(shù)據(jù)為例,所以存儲(chǔ)資源1byte用來(lái)存放數(shù)據(jù)碼,1byte用來(lái)存放冗余碼,三種算法均為2byte,而時(shí)間延遲為布局布線加上時(shí)序約束后仿真軟件的報(bào)告中給出的可能的最長(zhǎng)的時(shí)間延遲路徑。通過(guò)表中比較我們可以看到三種算法可靠度都非常高也都比較接近,而我們是通過(guò)FPGA并行實(shí)現(xiàn)的編碼,所以碼率在工程實(shí)現(xiàn)中的影響不大,時(shí)間延遲的技術(shù)指標(biāo)為20 ns,三種算法也都滿足了指標(biāo)要求,最后我們看到新算法相比較與傳統(tǒng)的海明碼來(lái)說(shuō)糾錯(cuò)能力有大幅提高,同時(shí)實(shí)現(xiàn)資源也相應(yīng)增加,我們可以得出結(jié)論,新算法達(dá)通過(guò)面積資源的消耗換取了糾錯(cuò)能力的提升。
表3 三種算法糾錯(cuò)能力與資源消耗比較比較
本文通過(guò)資料分析得出空間環(huán)境下單粒子多位翻轉(zhuǎn)模型,然后以此模型為基礎(chǔ)提出一種改進(jìn)型準(zhǔn)循環(huán)碼算法用于解決多位翻轉(zhuǎn)下的相鄰位翻轉(zhuǎn)問(wèn)題,最后以模型和算法為基礎(chǔ)提出具有工程意義的EDAC糾錯(cuò)模塊設(shè)計(jì),并給出測(cè)試和仿真結(jié)果,結(jié)果證明本方法簡(jiǎn)單可靠,適用于工程應(yīng)用,有效解決了商用存儲(chǔ)器件空間環(huán)境中單粒子多位翻轉(zhuǎn)問(wèn)題。