喬冰濤,吳旭凡,劉海靜,王 正,董業(yè)民
(1.信息功能材料國家重點實驗室(中國科學(xué)院 上海微系統(tǒng)與信息技術(shù)研究所),上海,200050;2.材料與光電研究中心(中國科學(xué)院大學(xué)),北京 100049)
星載電子系統(tǒng)容易受到空間高能粒子、質(zhì)子和中子的影響發(fā)生單粒子效應(yīng)(Single Event Effect,SEE),從而產(chǎn)生軟錯誤,在大規(guī)模集成電路芯片系統(tǒng)中,靜態(tài)隨機存儲器(Static Random Access Memory, SRAM)約占一半以上的面積[1],系統(tǒng)中出現(xiàn)的錯誤絕大部分也與存儲器有關(guān).因此,對存儲器單元進行加固是降低集成電路系統(tǒng)軟錯誤率(Soft Error Radio,SER)的重要途徑之一[2-3].
隨著半導(dǎo)體工藝節(jié)點的不斷降低,SRAM對SEE更加敏感.當集成電路尺寸降低到深亞微米(<0.18 μm)以下時,存儲器內(nèi)受單粒子翻轉(zhuǎn)(Single Event Upsets, SEU)的影響不會明顯增加,而是逐漸趨于飽和[4].但是由于工藝節(jié)點的降低,相同面積內(nèi)擺放了更多的存儲單元,使得存儲器發(fā)生多位翻轉(zhuǎn)(Multiple Bits Upset, MBU)的概率大大增加[5-6].
為了提高SRAM單元抗SEE的能力,常用的加固方法可以分為兩種,一種為工藝加固,另一種為設(shè)計加固.工藝加固主要采用SOI或者GaAs工藝[7-8],能夠取得很好的抗輻射效果;設(shè)計加固主要可以分為電路級、版圖級和系統(tǒng)級加固.電路加固通過加入反饋電路來維持存儲節(jié)點電容上的電荷值來增強抗輻射效果,如雙互鎖存儲單元(Dual Interlocked storage Cell, DICE)結(jié)構(gòu)[9];版圖加固通常采用版圖交錯技術(shù)[10],它把不同字上的位單元分配成在物理版圖上相鄰的單元,從而避免同一個字上的多個位單元同時發(fā)生翻轉(zhuǎn),但是這種方法會使得存儲器布線增長,當交錯位數(shù)變多時,上述問題會更加明顯.系統(tǒng)級加固主要采用檢錯糾錯(Error Detection And Correction, EDAC)技術(shù),常用的EDAC編碼有漢明碼[11]、BCH碼[12]和RS碼[13].漢明碼譯碼電路比較簡單,但是只能糾正一位翻轉(zhuǎn)或者檢測出兩位翻轉(zhuǎn);BCH碼和RS碼可以修正存儲器中出現(xiàn)的多位翻轉(zhuǎn),但是他們的編碼和譯碼電路比較復(fù)雜[14-15],需要以查找表的方式處理高階域的乘法運算,具有較大的電路延遲.
因此,本文針對系統(tǒng)級加固提出一種雙模冗余漢明(Dual Modular Redundancy Hamming,DMRH)碼,它能夠修正存儲器中出現(xiàn)的一位翻轉(zhuǎn)和兩位翻轉(zhuǎn),且電路延遲小于兩位修正能力的BCH碼.
漢明碼基本原則是在n位原碼的基礎(chǔ)上插入k位的校驗碼,校驗碼依據(jù)漢明碼編碼規(guī)則生成,記錄了原碼的部分信息,能夠在所存儲的數(shù)據(jù)中出現(xiàn)一位翻轉(zhuǎn)時對錯誤進行修正[16-17],其中n與k的關(guān)系式為
2k≥n+k+1.
(1)
在需要讀取所存儲的n+k位數(shù)據(jù)之前,依據(jù)漢明碼的解碼規(guī)則,生成k位狀態(tài)碼(記為S0~Sk-1).若所存儲的數(shù)據(jù)中未發(fā)生翻轉(zhuǎn),S0~Sk-1每一位狀態(tài)碼的值均為0;若數(shù)據(jù)在存儲過程中發(fā)生了一位錯誤,出錯位置不同,狀態(tài)碼的值也將不同.因此,可以根據(jù)狀態(tài)碼的值確定翻轉(zhuǎn)的位置,對錯誤進行修正.
此外,在漢明碼的基礎(chǔ)上再增加一位校驗位(記為Pk)就可實現(xiàn)糾一檢二的功能.在漢明碼編碼階段,Pk生成式為將n+k位數(shù)據(jù)進行異或運算.
在需要讀取所存儲的n+k+1位數(shù)據(jù)之前,使用所讀出來的n位原碼與k+1位校驗碼相異或,得到k+1位的狀態(tài)碼(記為Sk).在糾一檢二漢明碼中,若Sk的值為0,同時S0~Sk-1全為0,則代表所存儲數(shù)據(jù)內(nèi)未發(fā)生翻轉(zhuǎn);若Sk的值為1,則代表所存儲數(shù)據(jù)中出現(xiàn)了一位翻轉(zhuǎn);若Sk的值為0,同時S0~Sk-1不全為0,則代表數(shù)據(jù)中出現(xiàn)了兩位翻轉(zhuǎn).
在表1中,假設(shè)k=4,說明狀態(tài)碼與錯誤類型對照關(guān)系.表中記S0~Sk-1為St,××××為不等于0000的值.
表1 狀態(tài)碼與錯誤類型對照表
在漢明碼解碼模塊內(nèi)定義信號兩位翻轉(zhuǎn)標志位S_2err_flag,則其生成關(guān)系式為
S_2err_flag=(Sk=0&&St≠4′b0000)?1′b1:1′b0.
(2)
當數(shù)據(jù)中出現(xiàn)兩位翻轉(zhuǎn)時,S_2err_flag值為1;否則該值為0.
為了提高SRAM單元抗MBU的能力,本文在前節(jié)糾一檢二漢明碼的基礎(chǔ)上,提出了一種雙模冗余漢明碼.DMRH碼各模塊說明如下:
1.2.1 編碼模塊
DMRH碼編碼模塊如圖1所示,輸入數(shù)據(jù)將首先經(jīng)過優(yōu)化后的漢明碼編碼模塊.與前節(jié)不同的是,在優(yōu)化后的編碼模塊內(nèi),通過將P0~Pk-1的生成式代入Pk的生成式,將原來n+k位的異或運算進行了化簡,有效降低了電路的延遲.
圖1 雙模冗余漢明碼編碼電路
之后添加了雙模冗余模塊對k+1校驗碼做處理,得到2(k+1)位校驗碼與n位原碼組成加固后的數(shù)據(jù),作為雙模冗余漢明碼編碼模塊的輸出.
1.2.2 解碼模塊
DMRH碼解碼模塊如圖2所示,待解碼的數(shù)據(jù)包括原碼與兩份校驗碼(分別記為P0和P1).
依據(jù)漢明碼的解碼規(guī)則對校驗碼P0和原碼做處理得到修正后數(shù)據(jù)OUT0和兩位錯誤標志位S0_2err_flag;由校驗碼P1和原碼得到修正后數(shù)據(jù)OUT1和兩位錯誤標志位S1_2err_flag;MUX模塊將依據(jù)S0_2err_flag和S1_2err_flag的值從OUT0和OUT1中選擇正確的數(shù)據(jù)作為輸出.
圖2 雙模冗余漢明碼解碼電路
如表2所示,記原碼為D,當所存儲的數(shù)據(jù)中出現(xiàn)一位翻轉(zhuǎn)到兩位翻轉(zhuǎn)時,修正后的數(shù)據(jù)為OUT0和OUT1,兩位翻轉(zhuǎn)標志位為S0_2err_flag和S1_2err_flag,表中共有9種不同的翻轉(zhuǎn)類型.可以看到當兩位翻轉(zhuǎn)標志位為0時,解碼得到的數(shù)據(jù)是正確的.
因此,我們可以依據(jù)兩位翻轉(zhuǎn)標志位選擇正確的數(shù)據(jù)作為解碼模塊的輸出.但是,當兩位翻轉(zhuǎn)同時發(fā)生在數(shù)據(jù)位D內(nèi)時,兩位翻轉(zhuǎn)標志位同時為1,此時,并不能從OUT0和OUT1內(nèi)獲得正確的數(shù)據(jù)作為解碼模塊的輸出.
1.2.3 版圖分割技術(shù)
為了進一步提高DMRH碼的可靠性,本文依據(jù)版圖分割技術(shù)對校驗碼與原碼排序,消除了兩位翻轉(zhuǎn)同時發(fā)生在原碼D內(nèi)的情況.排序的基本原則為每兩位原碼之間至少要有一位校驗碼間隔.因此n與k還應(yīng)該有關(guān)系為
n≤2k+3.
(3)
當高能粒子引起所存儲的數(shù)據(jù)中發(fā)生兩位翻轉(zhuǎn)時,采用版圖分割技術(shù)后,可能翻轉(zhuǎn)的位置會出現(xiàn)以下3種情況:
a)翻轉(zhuǎn)的是P0內(nèi)一位校驗碼和一位原碼D;
b)翻轉(zhuǎn)的是P1內(nèi)一位校驗碼和一位原碼D;
c)翻轉(zhuǎn)的是兩位校驗碼.
由表2可知,a情況對應(yīng)表內(nèi)序號6的情況;b情況對應(yīng)表內(nèi)序號5的情況;c情況對應(yīng)了表內(nèi)序號4、7和8對應(yīng)的情況.以上情況均可以通過S0_2err_flag和S1_2err_flag的值從OUT0和OUT1中選擇出正確的數(shù)據(jù)作為DMRH碼的輸出.因此,本文所設(shè)計的MUX模塊解碼流程如圖3所示.
表2 一位翻轉(zhuǎn)與兩位翻轉(zhuǎn)輸出結(jié)果分析
由于版圖分割技術(shù)消除了兩位翻轉(zhuǎn)同時出現(xiàn)在原碼D內(nèi)的情況,S0_2err_flag和S1_2err_flag不會同時為1.本文選用S0_2err_flag作為判定條件,當該值為1時,標志原碼D與校驗碼P0內(nèi)出現(xiàn)了兩位錯誤,解碼后得到的OUT0時錯誤的,此時應(yīng)選擇OUT1作為輸出;同理,當該值為0時,選擇OUT0作為輸出.
本節(jié)在糾一檢二漢明碼的基礎(chǔ)上設(shè)計了兩位修正能力的DMRH碼.接下來本文以原碼n=8為例,實現(xiàn)該修正碼.
當原碼為8位時(記為D0~D7),依據(jù)DMRH碼的編碼規(guī)則,需要10位校驗碼,其生成方式為
圖3 雙模冗余漢明碼解碼流程圖
P0[0]=D0^D(zhuǎn)1^D(zhuǎn)3^D(zhuǎn)4^D(zhuǎn)6,
P0[1]=D0^D(zhuǎn)2^D(zhuǎn)3^D(zhuǎn)5^D(zhuǎn)6,
P0[2]=D1^D(zhuǎn)2^D(zhuǎn)3^D(zhuǎn)7,
P0[3]=D4^D(zhuǎn)5^D(zhuǎn)6^D(zhuǎn)7,
P0[4]=D0^D(zhuǎn)1^D(zhuǎn)2^D(zhuǎn)4^D(zhuǎn)5^D(zhuǎn)6,
P1[0]=D0^D(zhuǎn)1^D(zhuǎn)3^D(zhuǎn)4^D(zhuǎn)6,
P1[1]=D0^D(zhuǎn)2^D(zhuǎn)3^D(zhuǎn)5^D(zhuǎn)6,
P1[2]=D1^D(zhuǎn)2^D(zhuǎn)3^D(zhuǎn)7,
P1[3]=D4^D(zhuǎn)5^D(zhuǎn)6^D(zhuǎn)7,
P1[4]=D0^D(zhuǎn)1^D(zhuǎn)2^D(zhuǎn)4^D(zhuǎn)5^D(zhuǎn)6.
(4)
式中,^為異或運算.
P0[4]和P1[4]分別為D0~D7、P0[0]~P0[3]和P1[0]~P1[3]的異或運算的化簡結(jié)果,使得原來的12位數(shù)據(jù)相異或減少到了6位相異或,有效減小了電路的延遲.
當輸入的8位原碼經(jīng)過漢明碼編碼模塊后,若按照圖4(a)的順序存入存儲單元,那么當高能粒子所引起的兩位翻轉(zhuǎn)全部出現(xiàn)在原碼D內(nèi)時,會影響解碼后數(shù)據(jù)的正確性.
因此采用版圖分割技術(shù)把原碼D與校驗碼P0、P1排序,基本原則為每兩位原碼之間至少要有一位校驗碼間隔.使用版圖分割法后,當原碼為8時,版圖結(jié)構(gòu)如圖4(b)所示.
圖4 (a)未采用版圖分割技術(shù)的8位寬度字的版圖結(jié)構(gòu);(b)采用版圖分割技術(shù)的8位寬度字的版圖結(jié)構(gòu)
可以看到,當所存儲數(shù)據(jù)在高能粒子影響下發(fā)生兩位翻轉(zhuǎn)時,有可能發(fā)生以下3種情況:
a)一位原碼和P0內(nèi)一位校驗位翻轉(zhuǎn);
b)P0內(nèi)一位校驗位與P1內(nèi)一位校驗位翻轉(zhuǎn);
c)P1內(nèi)一位校驗位和一位原碼翻轉(zhuǎn).
由表2可知,以上3種情況分別對應(yīng)表內(nèi)序號6、序號4和序號5代表的情況,可以結(jié)合兩位錯標志位的值從OUT0和OUT1選擇正確的數(shù)據(jù)作為輸出.
當需要從存儲器中讀取數(shù)據(jù)時,記存儲器內(nèi)讀出的數(shù)據(jù)分別為D′、P0′和P1′,接下來需要按照漢明碼的解碼規(guī)則生成對應(yīng)的狀態(tài)碼.
由讀出的數(shù)據(jù)D′和P0′生成的狀態(tài)碼S0為
(5)
在得到狀態(tài)碼S0的值后,依據(jù)漢明碼解碼規(guī)則可得翻轉(zhuǎn)數(shù)據(jù)發(fā)生的位置,進而得到修正后的數(shù)據(jù)OUT0,同時可得兩位錯誤標志位S0_2err_flag的值,其生成關(guān)系式為
S0_2err_flag=(S0[4]=0 &&S0[3:0]≠4′b0000)?
1′b1:1′b0,
(6)
由讀出的數(shù)據(jù)D′和P1′生成的狀態(tài)碼S1為
(7)
在得到狀態(tài)碼S1的值后,依據(jù)漢明碼解碼規(guī)則可得翻轉(zhuǎn)數(shù)據(jù)發(fā)生的位置,進而得到修正后的數(shù)據(jù)OUT1,同時可得兩位錯誤標志位S1_2err_flag的值,其生成關(guān)系式為
(8)
最后,依據(jù)S0_2err_flag和S1_2err_flag的值,從OUT0和OUT1里面選擇出正確的數(shù)據(jù)作為輸出,其具體流程如圖3所示.
在解碼電路的設(shè)計中,本文通過分析存儲器內(nèi)發(fā)生兩位翻轉(zhuǎn)的情況,發(fā)現(xiàn)當翻轉(zhuǎn)位置不同時,可以依據(jù)狀態(tài)碼中兩位錯誤標志位的值來判定數(shù)據(jù)中發(fā)生翻轉(zhuǎn)的位置,之后結(jié)合版圖分割技術(shù)完成了解碼電路算法的設(shè)計.
雙模冗余漢明碼測試系統(tǒng)的電路如圖5所示,為了驗證它的糾錯能力,添加了錯誤注入單元,用于向存儲器中讀出的數(shù)據(jù)中注入錯誤.在Test_en為0時,為正常工作模式,從存儲器內(nèi)讀出的數(shù)據(jù)不作任何處理,直接交給解碼模塊解碼.當Test_en為1時,進入測試模式,從存儲器內(nèi)讀出的數(shù)據(jù)與測試變量err相異或,對數(shù)據(jù)進行修改.之后,再把修改后的數(shù)據(jù)交由解碼模塊解碼.若解碼后的數(shù)據(jù)與寫入的數(shù)據(jù)一致,則認為加固方法有效,可以修正所存儲數(shù)據(jù)中出現(xiàn)的兩位錯誤.
圖5 雙模冗余漢明碼測試系統(tǒng)
字長為8位的DMRH碼的仿真結(jié)果如圖6所示,在Test_en有效后,通過err與加固后的數(shù)據(jù)相異或,向數(shù)據(jù)中注入錯誤.在時間段T0內(nèi),讓(D3、P0[4])所存儲的信息翻轉(zhuǎn),此時S0_2err_flag為1,選擇OUT1作為輸出,解碼后得到的數(shù)據(jù)與原碼相同.在時間段T1內(nèi),分別仿真了向(P0[4]、P1[0])與(P1[0]、D4)注入錯誤的情況,均得到預(yù)期的效果.最后遍歷了所有可能的一位翻轉(zhuǎn)與兩位翻轉(zhuǎn)的情況,仿真結(jié)果表明,DMRH能夠修正數(shù)據(jù)中出現(xiàn)的錯誤,本文提出的加固方法是有效的.
當工藝節(jié)點降低到130 nm時,大量試驗數(shù)據(jù)表明其產(chǎn)生兩位翻轉(zhuǎn)的次數(shù)占總翻轉(zhuǎn)次數(shù)的1%左右,三位翻轉(zhuǎn)的次數(shù)占總翻轉(zhuǎn)次數(shù)的0.1%左右[18].因此,相比于一位修正的漢明碼,使用兩位修正能力的DMRH碼能夠提高存儲單元的可靠性.
圖6 雙模冗余漢明碼仿真結(jié)果
在本文中,共設(shè)計了三種DMRH碼,分別對應(yīng)字長為4、8和11,與其他修正碼的面積、功耗和延遲參數(shù)對比如表3所示.以漢明碼為參考,字長為4、8和11的DMRH碼的電路延遲分別是漢明碼的85%、89%和96%,低于兩位修正能力的BCH碼.
本文提出了一種雙模冗余漢明碼,它能夠抑制存儲單元中出現(xiàn)的兩位翻轉(zhuǎn).首先,對漢明碼編碼模塊進行邏輯優(yōu)化,有效減少了編碼電路的延遲,再把該模塊生成的校驗碼進行雙模冗余處理,作為雙模冗余漢明碼編碼模塊的輸出.之后依據(jù)漢明碼解碼規(guī)則分別對每份校驗碼與原碼的組合進行處理,通過分析發(fā)現(xiàn)當兩位翻轉(zhuǎn)未同時發(fā)生在原碼內(nèi)時,可以依據(jù)兩位錯誤標志位的值得到正確的輸出.最后,采用版圖分割技術(shù)有效抑制了兩位原碼同時翻轉(zhuǎn)的情況,進一步提高了存儲器的可靠性.與其他的兩位錯誤修正碼相比,本文提出的DMRH碼具有較低的電路延遲.
表3 修正電路的面積、功耗延遲參數(shù)列表