一種改進(jìn)的對(duì)抗軟錯(cuò)誤電路結(jié)構(gòu)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:給出了一種改進(jìn)的基于時(shí)鐘沿的自我檢測(cè)和糾正的電路結(jié)構(gòu),以糾正由單粒子翻轉(zhuǎn)(SEU)引起的數(shù)據(jù)錯(cuò)誤。簡(jiǎn)單概述了已有的檢測(cè)和糾正SEU的電路結(jié)構(gòu),并在該電路的基礎(chǔ)上提出了改進(jìn)的電路結(jié)構(gòu).以實(shí)現(xiàn)對(duì)觸發(fā)器以及SRAM等存儲(chǔ)器的實(shí)時(shí)監(jiān)控,并可以及時(shí)糾正其由于SEU引起的數(shù)據(jù)錯(cuò)誤。采用內(nèi)建命令進(jìn)行錯(cuò)誤注入模擬單粒子翻轉(zhuǎn)對(duì)電路的影響。改進(jìn)的電路與原來(lái)的電路相比,以微小的面積和較少的資源換取更高的糾錯(cuò)率。
關(guān)鍵詞:SEU;檢測(cè)和糾正;時(shí)鐘沿;FPGA;觸發(fā)器
0 引言
在一些電磁環(huán)境比較惡劣的情況下,一些大規(guī)模集成電路常常會(huì)受到干擾,導(dǎo)致不能正常工作,特別是儲(chǔ)存單元,使原來(lái)存儲(chǔ)的“0”變?yōu)?ldquo;1”,或者“1”變?yōu)?ldquo;0”,即單粒子翻轉(zhuǎn)效應(yīng)(SEU)。隨著集成電路的發(fā)展,超大規(guī)模集成電路(VLSI)是必然的發(fā)展趨勢(shì)。但是,單粒子翻轉(zhuǎn)效應(yīng)已經(jīng)嚴(yán)重影響了VLSI的發(fā)展。
由于單粒子翻轉(zhuǎn)對(duì)電路穩(wěn)定性的影響,新的電路設(shè)計(jì)結(jié)構(gòu)必須減少其對(duì)電路穩(wěn)定性的影響。在這些新提出的電路結(jié)構(gòu)中,比較常用的檢查和糾正單粒子翻轉(zhuǎn)的方法是三模冗余(TMR)和軟件錯(cuò)誤檢測(cè)和糾正電路。三模冗余是解決SEU影響的最有效方式,其設(shè)計(jì)原理是將要保護(hù)的電路復(fù)制成完全相同的三份,同時(shí)運(yùn)行這三部分電路,并且對(duì)該三部分電路的運(yùn)行結(jié)果進(jìn)行大數(shù)表決,表決出一個(gè)置信度高的結(jié)果輸出,同時(shí)檢測(cè)出那個(gè)冗余邏輯塊翻轉(zhuǎn)并進(jìn)行修復(fù)。但它的最大缺點(diǎn)是需要消耗大量的資源,才能實(shí)現(xiàn)該電路結(jié)構(gòu)。軟件錯(cuò)誤檢測(cè)和糾正電路的原理是根據(jù)不同的編解碼方式,實(shí)現(xiàn)對(duì)所存儲(chǔ)數(shù)據(jù)進(jìn)行檢測(cè)和糾正。最常用的海明碼方式,其設(shè)計(jì)原理是在存儲(chǔ)的數(shù)據(jù)源碼中加入一些冗余碼,使這些數(shù)據(jù)源碼和數(shù)據(jù)源碼之間建立一定的關(guān)系,一旦數(shù)據(jù)源碼或是冗余碼出現(xiàn)某種錯(cuò)誤時(shí),數(shù)據(jù)碼和冗余碼之間的關(guān)系被破壞,就形成非法編碼。接收端可以通過(guò)檢測(cè)數(shù)據(jù)碼和冗余碼來(lái)檢測(cè)數(shù)據(jù)碼的正確性,并對(duì)檢測(cè)出來(lái)的錯(cuò)誤數(shù)據(jù)源碼進(jìn)行修改。
近來(lái),一種基于時(shí)鐘沿來(lái)檢測(cè)和糾正單粒子翻轉(zhuǎn)的電路結(jié)構(gòu),實(shí)現(xiàn)了檢測(cè)單元占用更小的面積,使用更少的邏輯單元,實(shí)現(xiàn)相近的檢測(cè)和糾正率。本文在基于該文提出的檢測(cè)和糾錯(cuò)原理的基礎(chǔ)上,提出了一種新的可以多次檢測(cè)和糾正單粒子翻轉(zhuǎn)的電路結(jié)構(gòu)。
1 時(shí)鐘沿檢測(cè)和糾錯(cuò)電路原理
1.1 時(shí)鐘沿產(chǎn)生原理
基于時(shí)鐘沿的檢測(cè)和糾正電路原理可知,對(duì)于觸發(fā)器來(lái)說(shuō),只有在時(shí)鐘上升沿的時(shí)候,輸出數(shù)據(jù)發(fā)生轉(zhuǎn)變才是有效的正確數(shù)據(jù),而其他任何時(shí)刻的變化都是由于外界原因引起的信號(hào)錯(cuò)誤(本文主要是針對(duì)SEU引起的錯(cuò)誤)。該電路結(jié)構(gòu)就是基于上述原理,通過(guò)對(duì)比數(shù)據(jù)與時(shí)鐘的轉(zhuǎn)變沿來(lái)對(duì)數(shù)據(jù)進(jìn)行檢測(cè)和糾正的,其過(guò)程可描述為時(shí)鐘沿經(jīng)過(guò)3個(gè)非門(mén)的延時(shí),產(chǎn)生信號(hào)not_clk,該信號(hào)和時(shí)鐘信號(hào)相與產(chǎn)生1個(gè)上升沿脈沖。
1.2 錯(cuò)誤檢測(cè)和糾正電路
另外一個(gè)需要解決的重要問(wèn)題就是錯(cuò)誤的檢測(cè)和糾正。首先,該文信號(hào)的錯(cuò)誤檢測(cè)原理圖如圖1所示。時(shí)鐘產(chǎn)生的脈沖與數(shù)據(jù)翻轉(zhuǎn)產(chǎn)生的脈沖進(jìn)行比較。比較單元的核心部分可由如下表達(dá)式表述:
SEU_O=Data_pulse×Clk_pulse’ (1)
式中:Data_pulse是數(shù)據(jù)信號(hào)經(jīng)過(guò)沿檢測(cè)電路后的信號(hào);Clk_pulse是時(shí)鐘信號(hào)經(jīng)過(guò)沿檢測(cè)電路后的信號(hào)。在時(shí)鐘上升沿時(shí),Clk_pulse會(huì)產(chǎn)生一個(gè)正向脈沖,如果此時(shí)數(shù)據(jù)發(fā)生翻轉(zhuǎn),Data_pulse也會(huì)產(chǎn)生一個(gè)正相脈沖,SEU_O將保持0不變,當(dāng)SEU影響,使數(shù)據(jù)發(fā)生翻轉(zhuǎn)時(shí),Data_pulse會(huì)產(chǎn)生一個(gè)脈沖,而此時(shí)由于不是在時(shí)鐘上升沿,信號(hào)Clk_pulse將保持為1,此時(shí)的輸出信號(hào)SEU_O就被置為1。由上述分析可知,當(dāng)沒(méi)有SEU錯(cuò)誤發(fā)生時(shí)SEU_O為0;當(dāng)發(fā)生SEU錯(cuò)誤時(shí)SEU_O為1;
該文的錯(cuò)誤糾正電路原理如圖1所示,該部分電路的核心是運(yùn)用一個(gè)多路輸出選擇器來(lái)糾正觸發(fā)器的錯(cuò)誤輸出信號(hào)。多路輸出選擇器的輸入信號(hào)為SEU_O,輸出選擇信號(hào)為觸發(fā)器的輸出信號(hào),兩個(gè)輸出信號(hào)分別連接到觸發(fā)器的復(fù)位端和清零端。
由上面的分析可知,檢測(cè)到有錯(cuò)誤發(fā)生時(shí),SEU_O的值為1。此時(shí),如果Q值為1(正確值應(yīng)該為0),那么就把SEU_O的值1賦給S1,觸發(fā)器被清零,Q被置為0;如果Q值為0(正確值應(yīng)該為1),那么把SEU_O的值1賦給S0,觸發(fā)器被置1,Q被置為1,從而實(shí)現(xiàn)對(duì)Q值的糾正;如果沒(méi)有錯(cuò)誤發(fā)生時(shí),SEU_O的值為0,此時(shí)不論觸發(fā)器的輸出信號(hào)Q為1或0,都不會(huì)對(duì)Q值產(chǎn)生影響。
為了避免檢測(cè)電路把糾正之后的Q值作為SEU引起的錯(cuò)誤值來(lái)進(jìn)行處理和糾正,該電路添加了一個(gè)觸發(fā)器,用以鎖存以前的電路狀態(tài),如圖1所示。信號(hào)SEU_O與信號(hào)S3,S4,S5有關(guān),可以由下述表達(dá)式表示:
SEU_O=S4×S3’×S5’ (2)
由原理圖可知,每一個(gè)時(shí)鐘上升沿到來(lái)時(shí)就會(huì)對(duì)觸發(fā)器清零,電路可以對(duì)數(shù)據(jù)進(jìn)行檢測(cè)和糾正。若在一個(gè)時(shí)鐘周期內(nèi),第1次發(fā)生單粒子翻轉(zhuǎn)并被檢測(cè)到SEU_O由0變?yōu)?,同時(shí)觸發(fā)器被置1,進(jìn)而SEU_O的值又變?yōu)?,糾正后的數(shù)據(jù)產(chǎn)生數(shù)據(jù)沿脈沖不會(huì)對(duì)SEU_O的值產(chǎn)生影響,從而完成這一次的數(shù)據(jù)檢測(cè)和糾正。
上述基于時(shí)鐘沿檢測(cè)和糾正電路是針對(duì)一個(gè)觸發(fā)器的情況,但是一個(gè)系統(tǒng)設(shè)計(jì)必定會(huì)包含多個(gè)觸發(fā)器。如圖2所示為該電路結(jié)構(gòu)應(yīng)用到多個(gè)觸發(fā)器的原理圖。電路結(jié)構(gòu)可以分為獨(dú)立模塊和公用模塊兩個(gè)部分。時(shí)鐘是整個(gè)電路系統(tǒng)公用的部分,所以時(shí)鐘沿單元是可以公用的。此外,鎖存器是存儲(chǔ)前一個(gè)時(shí)刻的電路狀態(tài),所以也是可以作為公用單元使用的。
N個(gè)單獨(dú)模塊產(chǎn)生的錯(cuò)誤檢測(cè)信號(hào)SEU_O,通過(guò)N位的或門(mén)輸入給公共模塊,進(jìn)而對(duì)電路中N能發(fā)器的輸出進(jìn)行修改。由圖2可知,任何一個(gè)觸發(fā)器檢測(cè)出有SEU錯(cuò)誤產(chǎn)生,該觸發(fā)器的單獨(dú)模塊輸出信號(hào)SEU_O變?yōu)?,那么公共模塊的輸入信號(hào)SEU變?yōu)?,進(jìn)而通過(guò)各個(gè)模塊的S5信號(hào)對(duì)狀態(tài)進(jìn)行保存,使其對(duì)改變后的值不進(jìn)行錯(cuò)誤處理。
2 多次檢測(cè)單粒子翻轉(zhuǎn)的電路結(jié)構(gòu)
由第一節(jié)可知,該方案雖然可以以較小的面積和使用較少的邏輯器件實(shí)現(xiàn)單粒子翻轉(zhuǎn)的檢測(cè)和糾正。但是它存在兩個(gè)問(wèn)題,第一個(gè)問(wèn)題是對(duì)于數(shù)據(jù)轉(zhuǎn)變沿的檢測(cè)只可以檢測(cè)0到1的轉(zhuǎn)變,不可以檢測(cè)到1到0的轉(zhuǎn)變,以至于對(duì)由于SEU引起的由1變?yōu)?的數(shù)據(jù)錯(cuò)誤翻轉(zhuǎn)無(wú)法檢測(cè),影響電路系統(tǒng)的穩(wěn)定行;第二個(gè)問(wèn)題是該電路結(jié)構(gòu)設(shè)計(jì)的假設(shè)條件,每1個(gè)時(shí)鐘周期只發(fā)生1次單粒子翻轉(zhuǎn)引起的數(shù)據(jù)錯(cuò)誤。由圖2可知,當(dāng)一個(gè)時(shí)鐘上升沿來(lái)臨,鎖存器的輸出Q被清零,SEU_O的值只與數(shù)據(jù)沿和時(shí)鐘沿有關(guān)。當(dāng)任何一個(gè)觸發(fā)器的輸出由于受到SEU的影響發(fā)生翻轉(zhuǎn)時(shí),通過(guò)各個(gè)獨(dú)立模塊的錯(cuò)誤檢測(cè)電路,檢測(cè)出有錯(cuò)誤發(fā)生。此時(shí),該獨(dú)立模塊的SEU_O變?yōu)?,并對(duì)該模塊中的觸發(fā)器輸出進(jìn)行糾正。同時(shí),公共模塊的鎖存器被置為1,由前面的式(2)可知。SEU_O變?yōu)?,并且與S3和S4無(wú)關(guān),直到下一個(gè)時(shí)鐘上升沿到來(lái)時(shí),鎖存器才被再次置為0,才會(huì)隨著S3和S4發(fā)生變化。由上述分析可知,該電路結(jié)構(gòu)在一個(gè)時(shí)鐘周期內(nèi)只可以檢測(cè)和糾正一次單粒子翻轉(zhuǎn)引起的數(shù)據(jù)輸出錯(cuò)誤。
在只有一位觸發(fā)器的情況下,電路在每一個(gè)時(shí)鐘最多發(fā)生一次翻轉(zhuǎn)的假設(shè)是可以接受的。但是,隨著現(xiàn)在電路規(guī)模和功能要求的增加,這將限制電路對(duì)數(shù)據(jù)的檢測(cè)和糾正,嚴(yán)重影響電路系統(tǒng)的可靠性。
2.1 數(shù)據(jù)沿的產(chǎn)生
針對(duì)第一個(gè)問(wèn)題,本文對(duì)數(shù)據(jù)轉(zhuǎn)變沿的檢測(cè)采用下述結(jié)構(gòu)。該電路結(jié)構(gòu)采用2個(gè)非門(mén)和1個(gè)異或門(mén)。利用兩個(gè)非門(mén)來(lái)產(chǎn)生延時(shí),異或門(mén)對(duì)延時(shí)后的信號(hào)和原來(lái)的信號(hào)進(jìn)行比較,進(jìn)而在上升沿和下降沿時(shí)產(chǎn)生一個(gè)脈沖,用于數(shù)據(jù)沿的檢測(cè)。
2.2 多次檢測(cè)和糾正錯(cuò)誤數(shù)據(jù)電路
針對(duì)第二個(gè)問(wèn)題,本文添加了少量的邏輯電路,以實(shí)現(xiàn)對(duì)由SEU引起的錯(cuò)誤數(shù)據(jù)的多次檢測(cè)和糾正。原理圖如圖3所示,與參考文獻(xiàn)提出的電路原理相比,該電路結(jié)構(gòu)只是在公共模塊上增加了1個(gè)非門(mén)和1個(gè)CMOS傳輸門(mén),用于檢測(cè)數(shù)據(jù)修改是否完成,并對(duì)鎖存器賦值,使電路在數(shù)據(jù)糾正完成以后,讓鎖存器輸出變?yōu)?,即恢復(fù)到?jīng)]:有檢測(cè)到錯(cuò)誤發(fā)生的狀態(tài)。該電路可以對(duì)下一個(gè)由SEU引起的數(shù)據(jù)翻轉(zhuǎn)進(jìn)行檢測(cè)和糾正,進(jìn)而大大提高電路的穩(wěn)定性和可靠性。
電路原理:當(dāng)時(shí)鐘處于上升沿時(shí),信號(hào)S3產(chǎn)生一個(gè)高脈沖,此時(shí)鎖存器被清零。鎖存器輸出0時(shí),CMOS傳輸門(mén)被關(guān)閉,不傳輸數(shù)據(jù)。當(dāng)檢測(cè)到由于SEU引起的Q值翻轉(zhuǎn)時(shí),SEU_O變?yōu)?,此時(shí)鎖存器被置為1。當(dāng)SEU_O變?yōu)?時(shí),對(duì)數(shù)據(jù)Q進(jìn)行糾正,Q值發(fā)生翻轉(zhuǎn),會(huì)產(chǎn)生一個(gè)高脈沖。當(dāng)鎖存器被置為1時(shí),CMOS傳輸門(mén)導(dǎo)通,SEU_O又變?yōu)?。數(shù)據(jù)Q被糾正,發(fā)生翻轉(zhuǎn)產(chǎn)生1個(gè)高脈沖,此時(shí)CMOS傳輸門(mén)被導(dǎo)通。數(shù)據(jù)Q產(chǎn)生的脈沖經(jīng)過(guò)傳輸門(mén)和非門(mén),變?yōu)榈兔}沖,該脈沖傳輸?shù)芥i存器的輸入端,進(jìn)而鎖存器的輸出變?yōu)?。此時(shí),CMOS傳輸門(mén)關(guān)閉,信號(hào)SEU_O只與S4和S3有關(guān),電路的錯(cuò)誤檢測(cè)和糾正電路恢復(fù)到?jīng)]有發(fā)生錯(cuò)誤時(shí)的狀態(tài),準(zhǔn)備檢測(cè)下一個(gè)數(shù)據(jù)沿。
由上述分析可知,該電路可以實(shí)現(xiàn)電路對(duì)多個(gè)SEU引起的數(shù)據(jù)錯(cuò)誤翻轉(zhuǎn)進(jìn)行檢測(cè)和糾正,從而提高電路的可靠性。
如圖3所示,該電路分為兩個(gè)部分,上虛框內(nèi)是每一個(gè)數(shù)據(jù)單獨(dú)具有的錯(cuò)誤檢測(cè)和修改部分;下虛框內(nèi)是該電路的公用部分。
該電路結(jié)構(gòu)運(yùn)用到N位觸發(fā)器的原理框圖如圖4所示。與原來(lái)的設(shè)計(jì)類(lèi)似,該電路結(jié)構(gòu)有N個(gè)獨(dú)立模塊和一個(gè)公用模塊。由圖可知,每個(gè)單獨(dú)模塊輸出的信號(hào)SEU_O通過(guò)一個(gè)N輸入或門(mén),得出的邏輯值傳輸給公共模塊的SEU信號(hào),以控制各個(gè)單獨(dú)模塊的數(shù)據(jù)糾正。當(dāng)檢測(cè)到SEU發(fā)生后,觸發(fā)器的輸出變?yōu)?,CMOS傳輸門(mén)被導(dǎo)通。
此時(shí),各個(gè)單獨(dú)模塊的信號(hào)S4通過(guò)一個(gè)N輸入或門(mén),得出的邏輯值傳輸給公共模塊,以改變鎖存器的輸出,進(jìn)而各個(gè)模塊的信號(hào)SEU_O也只與各個(gè)模塊的數(shù)據(jù)沿和時(shí)鐘沿有關(guān),回到了錯(cuò)誤檢測(cè)和糾正的準(zhǔn)備狀態(tài)。從而達(dá)到多次檢驗(yàn)和糾正SEU引起的錯(cuò)誤數(shù)據(jù)翻轉(zhuǎn)。
3 仿真結(jié)果
為驗(yàn)證多次檢測(cè)和糾正電路的可靠性,使用仿真器的內(nèi)建命令進(jìn)行了錯(cuò)誤注入,運(yùn)用TB文件對(duì)輸入數(shù)據(jù)進(jìn)行控制,以模擬真實(shí)情況下的SEU。在不是信號(hào)上升沿的時(shí)候,使觸發(fā)器中輸出信號(hào)Q發(fā)生翻轉(zhuǎn),模擬SEU引起的錯(cuò)誤輸出,通過(guò)觀察信號(hào)Q的值,進(jìn)行檢驗(yàn)電路的檢測(cè)和修改功能。
圖5是基于上述電路結(jié)構(gòu)和錯(cuò)誤注入的仿真結(jié)果。從圖中可以看出,隨著觸發(fā)器的輸出信號(hào)Q的變化,檢測(cè)和糾正電路的工作狀態(tài)。在左側(cè)橢圓標(biāo)示的位置,是正確的數(shù)據(jù)翻轉(zhuǎn)。此時(shí)產(chǎn)生了數(shù)據(jù)脈沖和時(shí)鐘脈沖,檢測(cè)信號(hào)SEU_O和鎖存器的輸出(LATCH)沒(méi)有發(fā)生變化,保持0的狀態(tài);在右側(cè)橢圓標(biāo)示的位置可以看出,是錯(cuò)誤的數(shù)據(jù)翻轉(zhuǎn)引起Q變?yōu)?。
此時(shí),檢測(cè)電路檢測(cè)出其為錯(cuò)誤的數(shù)據(jù)翻轉(zhuǎn),信號(hào)SEU_O由0變?yōu)?,鎖存器輸出信號(hào)變?yōu)?,CMOS傳輸門(mén)導(dǎo)通。當(dāng)信號(hào)SEU_O為1時(shí),糾正電路對(duì)Q值進(jìn)行糾正,Q值恢復(fù)為正確值,與此同時(shí),信號(hào)S4(即Q_pulse)產(chǎn)生一個(gè)正脈沖。由于CMOS傳輸門(mén)此時(shí)導(dǎo)通,所以信號(hào)S4經(jīng)過(guò)一個(gè)CMOS傳輸門(mén)和一個(gè)非門(mén)傳輸給鎖存器,鎖存器的輸出信號(hào)變?yōu)?,CMOS傳輸門(mén)關(guān)閉。由于在SEU_O信號(hào)由0變?yōu)?時(shí),鎖存器被置為1。此時(shí),信號(hào)SEU_O變?yōu)?,信號(hào)SEU_O和鎖存器的輸出(LATCH)恢復(fù)錯(cuò)誤糾正前的狀態(tài)。由上述分析可知,信號(hào)SEU_O跳變?yōu)?的時(shí)間間隔很短,如圖5所示。
4 結(jié)語(yǔ)
本文提出的電路結(jié)構(gòu)可以實(shí)現(xiàn)對(duì)SEU引起的數(shù)據(jù)錯(cuò)誤翻轉(zhuǎn)進(jìn)行多次檢測(cè)和糾正,完善了參考文獻(xiàn)所述電路結(jié)構(gòu),打破了該電路的1個(gè)時(shí)鐘只可以糾正1次SEU引起錯(cuò)誤的局限性。在提高電路結(jié)構(gòu)的檢測(cè)和糾正能力的同時(shí),本文提出的電路結(jié)構(gòu)只是增加了極少的資源消耗。為了更好地檢測(cè)SEU引起的錯(cuò)誤翻轉(zhuǎn),在每個(gè)單獨(dú)模塊中只由原來(lái)的與門(mén)替換為異或門(mén);為了實(shí)現(xiàn)對(duì)電路錯(cuò)誤翻轉(zhuǎn)的多次檢測(cè),僅在電路的公共模塊上增加了一個(gè)N輸入或門(mén),即整個(gè)電路只是增加了一個(gè)或門(mén)。因此,僅占用較少的面積和資源,就能對(duì)觸發(fā)器的錯(cuò)誤翻轉(zhuǎn)進(jìn)行實(shí)時(shí)監(jiān)控。





