徐 輝,朱 爍,孫皓潔,馬瑞君,梁華國,黃正峰
(1.安徽理工大學計算機科學與工程學院,安徽 淮南 232001; 2.合肥工業大學微電子學院,安徽 合肥 230009)
伴隨著時代不斷發展,工藝技術不斷精進,在納米級別的金屬氧化物半導體集成電路中,晶體管的尺寸也同時在快速縮小。晶體管的縮小雖然帶來了很多優勢,例如低成本和低功耗,但是也會不可避免地帶來一些問題,軟錯誤便是其中之一。軟錯誤通常是由空間中的帶電粒子對電路的轟擊造成的[1-3]。如圖1所示,高能粒子沖擊內存模塊底層電路上的晶體管時,產生的電荷會通過漂移和擴散機制被附近的PN結吸附。當電荷量積聚到一定程度后,便會產生一個瞬態脈沖,導致電平值異常。異常的電平值傳導到電路功能模塊,此時會產生錯誤的邏輯值,這種情況被稱為單粒子翻轉SNU(Single-Node-Upset)[4-6]。因為集成電路本身的連接復雜,加之電荷共享,很多敏感節點邏輯值都會同時受到影響,從而產生多節點翻轉MNU(Multiple-Node-Upset),比如三節點翻轉TNU(Triple-Node-Upset)[7,8]。目前針對MNU的主流研究方向是針對TNU進行加固。據研究,節點翻轉后,發生MNU的概率在40 nm技術中達到了35%以上,而TNU發生的概率占到了8%,且隨著工藝技術的進步,TNU發生的概率逐步在上升。節點翻轉會導致數據存儲和執行錯誤,甚至系統崩潰,這都將會影響系統的正常工作[9,10]。因此,設計出低功耗、能容忍TNU且自恢復的鎖存器具有實際意義。

Figure 1 Particles strike transistor圖1 粒子轟擊晶體管

Figure 2 C-element and clock C-element of different inputs, and their symbols of C-element and clock C-element, and DICE element圖2 不同單元輸入的C單元和時鐘單元及其單元簡化圖和DICE單元
為了解決TNU,涌現出了很多加固的方式,比如布局隔離、空間冗余技術和電路設計加固。其中,主要的解決方案仍然是電路設計加固。因此,本文提出一種基于C單元的三節點翻轉自恢復鎖存器MKEEP。通過仿真實驗表明,相比于其他鎖存器,本文所提的MKEEP鎖存器不僅具有三節點翻轉自恢復的能力,同時還有功耗小、延遲低的特點。
在很多的鎖存器加固設計中,由于C單元容忍單節點翻轉的特性,它的應用無疑是很廣泛的。圖2a~圖2d代表的是不同輸入的C單元和時鐘C單元。當C單元輸入相同時,輸出便是輸入相反的邏輯值;如果輸入不相同,此時便是C單元的高阻狀態。同時,C單元與時鐘相配合使用可以減少鎖存器在透明時期的功耗。除了C單元之外,還有雙互鎖存儲鎖存器DICE(Dual-Interlocked storage CEll)。DICE鎖存器可以實現單節點翻轉自恢復的特性受到很多青睞。
隨著對鎖存器加固設計研究的深入,基于這些基礎結構,很多容忍或者同時具備節點翻轉自恢復能力的鎖存器涌現了出來。

Figure 3 TNUHL-DICE, TNURL, TNUHL, and LCTNUT latches圖3 TNUHL-DICE、 TNURL、TNUHL和LCTNUT鎖存器
如圖3a所示,TNUHL_DICE(TNU-Hardened Latch based on Dual-Interlocked storage CEll)鎖存器利用了DICE單元的相互配合,具備了三節點翻轉并自恢復的能力。如上文所述,DICE單元首先完全容忍單節點翻轉,在DICE單元中4個存儲節點中任何一個節點發生了翻轉,都會被其他未受影響的節點恢復。TNUHL的鎖存器設計使用了4個DICE單元相互配合彌補DICE單元的不足之處。在最壞的情況下,也就是2個鎖存器都被翻轉節點所影響的時候,利用剩下的2個DICE單元進行恢復;同時使用了時鐘C單元的變形模式,增加了2個輸入,當有3個節點發生翻轉時,4輸入的時鐘C單元會將錯誤邏輯值攔截使之不會影響輸出Q。但是,TNUHL鎖存器的4個DICE單元沒有配合時鐘進行使用,所以功耗相對較高。
圖3b中的TNURL(TNU self-Recover Latch)鎖存器結構是由一種軟錯誤攔截模塊SIM(Soft-error-Interceptive Module)構成的。如圖3b虛線圈起來的結構所示,其中SIM結構是由3輸入的C單元和1個時鐘C單元組成。鎖存器面對的最大威脅就是高能粒子轟擊在同一個SIM結構上,造成SIM結構中一個3輸入的C單元輸出發生翻轉,但是錯誤邏輯值會被下一層的時鐘C單元攔截,無法進一步擴大影響范圍。在恢復階段,通過未受影響的其他SIM結構中時鐘C單元的輸出將邏輯值恢復。
圖3c中的TNUHL鎖存器使用了一個非常對稱而又巧妙的設計,這種設計就是圖中圈注的恢復電路部分RC(Restore-Circuit),同時還使用2輸入的時鐘C單元進行錯誤邏輯值的攔截,以保證不輸出錯誤的邏輯值。TNUHL鎖存器的功耗延時都非常出色,但是這種鎖存器設計的目的是容忍三節點翻轉,卻沒有自恢復的能力。
圖3d中LCTNUT(Low Cost and TNU completely Tolerant latch)鎖存器左半部分的設計使用了反相器輸入分離的結構,并構成一個循環的路徑,同時使用2個C單元和1個時鐘C單元搭建成攔截錯誤邏輯值的層次結構。相比于C單元的鎖存器結構,LCTNUT鎖存器使用了更少的晶體管,降低了整體的功耗開銷;而且在結構上還配合了時鐘,以便于在透明期減少功耗開銷。但是,這種鎖存器只能容忍三節點翻轉,無法自恢復。
MKEEP鎖存器結構如圖4所示。圖4中,D、Q分別為輸入信號和輸出信號,CLK、CLKB為時鐘信號。結構組成包括7個傳輸門、6個C單元和6個時鐘C單元。

Figure 4 MKEEP latch圖4 MKEEP鎖存器
當CLK=1,CLKB=0時,鎖存器處于透明期。通過傳輸門TG1至TG6,節點Q、N3、N5、N7、N9、N11得到由輸入D傳遞的數據;然后,這6個節點分別通過a、b模塊中的C單元A1~A6賦予其他節點邏輯值;而此時的所有時鐘C單元處于關斷狀態,目的在于減少功耗,避開電流競爭。
當CLK=0,CLKB=1時,鎖存器處于鎖存期。此時傳輸門全部關斷,時鐘C單元全部導通,模塊a、b內部節點之間便會產生反饋回路來保存數據。
下面將進行鎖存器容錯分析:
(1)單節點翻轉:例如當輸出Q受到了輻射粒子的轟擊,此時,節點Q所在的C單元A1和A5都根據自身防止單節點翻轉的特性將錯誤的邏輯值阻塞,使受到影響的節點無法對電路造成更大的影響。接下來,通過時鐘C單元B3將Q點的邏輯值恢復。其他的單節點翻轉亦是如此情況,MKEEP鎖存器完全容忍單節點翻轉并可以自恢復。
(2)雙節點翻轉:雙節點翻轉的情況分為2種。如果兩個節點不是在同一個C單元上發生翻轉,這種情形和單節點翻轉的情況一致。雙節點翻轉的最糟糕情況就是同一個模塊同一個C單元中2個節點的翻轉,引起了第3個節點的翻轉。例如,在a模塊中,當Q節點翻轉和N3節點翻轉同時發生的時候,C單元A1輸出的邏輯值翻轉,如此下來節點N2就會受到影響。因此,N2所在的時鐘C單元B1會處于高阻態。在b模塊中,節點Q、N3和N2都是分別作用于C單元A5、A4和時鐘C單元B5,錯誤的邏輯值都會被所在的C單元或者時鐘C單元攔截住。鎖存器的恢復就開始展開;首先節點Q的值將會通過時鐘C單元B3恢復,節點N3的值將會通過節點N6和N12恢復;最后,節點N2通過C單元A1恢復。
(3)三節點翻轉:三節點翻轉分為4種情況。
第1種情況就是在2個模塊中3個節點分散開來分別影響3個C單元,這種情況相當于3個單節點翻轉情形的疊加,這里不再贅述。
第2種情況比起第1種情況更糟糕些;例如,當節點N3、Q和N7發生翻轉的時候,此時在a模塊中,C單元A1的輸出N2徹底發生翻轉,但是錯誤邏輯值被時鐘C單元B1攔截住,而節點N7產生的錯誤邏輯值則被C單元A2攔截住。在b模塊中,節點N3發生翻轉,C單元A4攔截住了錯誤邏輯值。節點Q和N7發生翻轉后,C單元A5就會發生錯誤輸出,此時節點N8也會翻轉,但是時鐘C單元B5攔截住了錯誤的邏輯值。也就是這種情況影響了Q、N2、N3、N7、N8一共5個節點,但是錯誤的邏輯值都被鎖存器攔截住了。至于恢復階段,時鐘C單元B3和B4的正常輸出將恢復節點Q、N7的狀態;時鐘C單元B6的正常輸出將更正節點N3的輸出;在節點Q、N3的正常邏輯值恢復之后,同時C單元A1的輸出將會恢復,節點N2則回歸到正常邏輯值;節點Q、N7的正常邏輯值使C單元A5正常輸出,恢復節點N8的狀態。由此看來,鎖存器完全可以應對三節點翻轉的第2種情況。
第3種情況也是比較糟糕的一種情況。例如,當節點N3、Q和N4發生翻轉的時候,對于a模塊中的C單元A1,它的輸出將會翻轉,也就是造成節點N2的翻轉;由于節點N4翻轉,此時的時鐘C單元B1的2個輸入都發生翻轉,所以B1的輸出N5也會翻轉;但是由于節點N7未發生翻轉,所以C單元A2將錯誤的邏輯值攔截住。也就是說,此次3個翻轉的節點造成了另外2個節點的翻轉,一共5個節點發生了翻轉。對于b模塊,在上文中的工作原理中也說明了,這正是MKEEP鎖存器的重點之處,將5個節點分別散落放在鎖存器結構的不同C單元上,這樣,對于b模塊中的C單元就會將所有的錯誤邏輯值攔截住。接下來就是這種情況的恢復。首先a模塊中時鐘C單元B3持續輸出的正確邏輯值將Q恢復;b模塊中的時鐘C單元B6將恢復節點N3的正確邏輯值;a模塊中的C單元A1輸出則因為2個輸入的恢復而正常,那么N2的邏輯值將會被恢復;同理,b模塊中的C單元A4則會將N4的正確邏輯值恢復過來;最后,在節點N2、N4正確恢復之后,節點N5的邏輯值也被正確恢復。鎖存器所有的節點都被正確恢復,并繼續正常工作。
第4種情況影響的節點數應該是最糟糕的一種情況。例如,節點N1、N3和N9發生翻轉,那么此時影響節點的范圍相對于第3種情況進一步地擴大。在a模塊中,節點Q、N3的翻轉使節點N2發生了翻轉;b模塊中節點N3、N9的翻轉導致了節點N4的翻轉;同時節點N4發生翻轉反饋至a模塊,N5因此發生翻轉;但是節點N7沒有發生翻轉,所以傳輸的錯誤值被C單元A2攔截。同樣,由于節點N9的翻轉,a模塊中的C單元A3處于高阻態,b模塊中的時鐘C單元和C單元B4、A5、B5、A6分別攔截住了節點N4、Q、N2、N5傳遞的錯誤邏輯值。由于錯誤的邏輯值沒有繼續往下傳播,恢復的步驟就可以依據正確工作的邏輯值展開。節點N9的邏輯值,可以通過時鐘C單元B2正確恢復;節點N3可以通過時鐘C單元B6正確恢復;節點N3、N9的正確恢復就可以使C單元A4輸出正確的邏輯值,因此節點N4正確恢復;節點Q可以通過時鐘C單元B3正確恢復;由于節點N3、N1恢復至正確的邏輯值,所以節點N2可以通過C單元A1正確恢復;同理,節點N5也可以被正確恢復。所以,以上被影響的節點都被恢復。
綜上所述,MKEEP鎖存器完全可以實現三節點的容忍并自恢復。
本節將會通過實驗來驗證MKEEP鎖存器的魯棒性和節點冗余自恢復能力。使用仿真軟件HSPICE并基于32 nm的工藝模型,設定的電源電壓為0.9 V,溫度為27 ℃,時鐘頻率為500 MHz。NMOS管的長寬比是1∶1;PMOS管的長寬比是1∶2。圖5和圖6中是MKEEP鎖存器的正常波形和在故障注入后的波形圖。

Figure 5 Simulation results of MKEEP in the error-free case圖5 MKEEP無故障注入下的仿真波形圖

Figure 6 Simulation results of MKEEP in the error case圖6 MKEEP故障注入下的仿真波形圖
這里依據上面節點恢復的分析,對鎖存器進行故障注入實驗。根據上文中舉例的情況進行波形仿真實驗,閃電標志的地方代表上述情況中受到粒子輻射的節點。從圖6可以看出,無論是雙節點翻轉還是三節點翻轉,MKEEP鎖存器都能很快地將錯誤的邏輯值恢復至原本的正常狀態。
為了進一步評估鎖存器的效能,本文要進行可靠性、面積、延遲和功耗的測試和比較(延遲是指輸入D到輸出Q的傳輸延遲,功耗為平均功耗)。將MKEEP鎖存器與LCHR(Low Cost and Highly Reliable radiation latch)[10]、DNCS(Double Node Charge Sharing SEU tolerant design)[11]、NTHLTCH(Non-Temporally Hardened LaTCH)[12]、Delta_DICE[13]、DONUT(DOuble Node Upset Tolerant latch)[14]、TNU_LATCH(Radiation hardened LATCH for TNU)[15]、LCTNURL[16]、TNUHL_DICE[17]、TNURL[18]、TNUHL[19]和LCTNUT[20]鎖存器在相同的條件下進行仿真比較。仿真環境為:使用HSPICE仿真軟件,32 nm工藝庫,電壓為0.9 V,溫度為27 ℃,時鐘信號為500 MHz。
表1列出了以上所說的各種鎖存器對單節點和多節點翻轉的容忍自恢復能力。其中達到三節點翻轉容忍并自恢復的鎖存器是LCTNURL、TNURL_DICE和TNURL。而LCTNUT和TNU_LATCH只擁有對三節點翻轉容忍的能力。
表2中給出了各鎖存器的延遲功耗仿真結果。除了延時功耗外,還有一個重要因素就是平均延時和平均功耗的乘積值,一般稱作PDP(Power- Delay-Product),最后一列就是鎖存器對應的PDP值。PDP的計算公式如式(1)所示:

Table 2 Power consumption,delay and PDP of each latch表2 各鎖存器的功耗、延遲和PDP
PDP=Power×Delay
(1)
其中,Power表示功耗,Delay表示延遲。
為了更詳細地比較,需要進行鎖存器之間的相對開銷計算,如式(2)所示:
Δ=(ProposedLatch-
ComparedLatch)/ComparedLatch
(2)
其中,ProposedLatch表示本文結構在表3中對應的數值,ComparedLatch表示列舉出的鎖存器在表3中對應的數值。
從表3可以看出,MKEEP鎖存器在功耗和延遲上相比其他鎖存器具有優勢。如果在表3中單獨進行對比,功耗和延時比較占有優勢的就是LCTNUT鎖存器,但是此鎖存器只能容忍三節點翻轉,卻無法自恢復。而本文提出的MKEEP鎖存器卻可以完全容忍三節點翻轉并且自恢復。與其他三節點翻轉自恢復的鎖存器相比,MKEEP鎖存器在晶體管的數量上減少了,這會降低面積開銷。

Table 3 Cost comparison of MKEEP and other latches表3 與其他鎖存器的成本比較 %

Figure 7 Results of each latch in PVT experiments圖7 各鎖存器在PVT實驗下的結果
隨著CMOS電路的相關工藝技術飛快發展,晶體管的特征尺寸不斷地減小,這也成為了鎖存器對PVT變化敏感的重要因素。為了進一步檢驗鎖存器的穩定性,使用HSPICE仿真軟件對MKEEP鎖存器進行合理的PVT(Process- Voltage-Temperature)分析也很重要[21,22]。
PVT實驗工藝分為5個類型:TT(典型NMOS、典型PMOS)、FF(快速NMOS、快速PMOS)、SS(慢速NMOS、慢速PMOS)、FNSP(快速NMOS、慢PMOS)和SNFP(慢NMOS、快PMOS)[23-25]。本文將電壓設從0.75 V~1.25 V,間隔是0.05 V。溫度變化則在-25 ℃~125 ℃。
經過PVT的仿真實驗,最后得到了圖7所示的折線圖。圖7a與圖7b、圖7c與圖7d、圖7e與圖7f分別是在溫度、電壓和工藝的變化下,本文設計的鎖存器與參考鎖存器在實驗中功耗和延遲的相關數據組成的折線圖。從圖7a和圖7b中可以看到,隨著溫度的升高,鎖存器延遲整體在升高,而功耗則是整體下降。MKEEP鎖存器功耗保持穩定而且數值較小,延遲上升的幅度基本上沒有變化。
圖7c和圖7d表示的是鎖存器對電壓變化的敏感度。依據電路中功耗和電壓的定律公式,隨著電壓的升高,鎖存器的功耗會升高;但是,隨著電壓升高,電阻相對不變,整個鎖存器的電流就會增加,于是鎖存器的延時便會降低。從折線圖中可以看到,某些參考的鎖存器在電壓變化的情況下,功耗和延遲的變化都是非常明顯的;而本文設計的MKEEP鎖存器對電壓變化的敏感度較低。
圖7e和圖7f表示工藝的變化對鎖存器的影響。從圖中可以看出,每種鎖存器的功耗在工藝FF中達到最大,在工藝SS中則是最小。延遲則是與之相反。圖中功耗和延遲越曲折,代表鎖存器越容易受到工藝的影響。從實驗的結果來看,MKEEP鎖存器受到工藝變化的影響較小。
隨著半導體集成電路技術的進步,高能粒子轟擊鎖存器造成的TNU變得更為嚴重。與此同時,大多數現有的鎖存器對三節點翻轉和自恢復的效果并不是很理想。為了解決這些問題,本文設計了一種高性能、低功耗的三節點翻轉自恢復的鎖存器MKEEP。通過HSPICE仿真實驗表明,相比于其他三節點翻轉容忍或者自恢復的鎖存器,本文所提出的MKEEP在面積開銷、功耗、延遲和PDP上具有明顯的優勢。從PVT測試實驗結果也可以看到,MKEEP鎖存器相比于其他的鎖存器表現得更加穩定,受環境條件的影響較小。因此,MKEEP鎖存器是一種非常具有競爭力的鎖存器。