(1.中國(guó)科學(xué)院大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,北京 1000492.中國(guó)科學(xué)院光電技術(shù)研究所,成都 610209 )
為了滿足不斷增長(zhǎng)的性能和功率需求,F(xiàn)PGA制造技術(shù)流程需不斷演變,采用先進(jìn)的工藝節(jié)點(diǎn)制造,這使得FPGA組件尺寸不斷縮小形成高邏輯密度器件。在這么小的幾何結(jié)構(gòu)器件中,太空環(huán)境單個(gè)輻射粒子撞擊器件所引發(fā)的單粒子翻轉(zhuǎn)(single error upset,SEU)效應(yīng)已不限于單比特翻轉(zhuǎn)(single bit upset,SEU)事件,單粒子撞擊甚至?xí)?dǎo)致存儲(chǔ)器陣列的多個(gè)相鄰位的翻轉(zhuǎn),即多比特翻轉(zhuǎn)(multiple bit upset,MBU)事件[1]。器件物理尺寸的減小還會(huì)導(dǎo)致電源和閾值電壓的比例下降[2],導(dǎo)致FPGA器件受太空輻射影響的概率不斷增大,進(jìn)一步導(dǎo)致FPGA存儲(chǔ)單元發(fā)生SEU的概率增加。
FPGA的存儲(chǔ)資源主要有配置存儲(chǔ)器和用戶設(shè)計(jì)中的存儲(chǔ)單元組如:BRAM、DRAM、觸發(fā)器等構(gòu)成。BRAM作為FPGA的第二大內(nèi)存,提供了大量的高容量存儲(chǔ)單元用于存儲(chǔ)用戶設(shè)計(jì)狀態(tài),實(shí)現(xiàn)FPGA內(nèi)部數(shù)據(jù)的隨機(jī)存儲(chǔ)。一旦BRAM發(fā)生翻轉(zhuǎn)故障,會(huì)導(dǎo)致FPGA邏輯電路發(fā)生異常,嚴(yán)重時(shí)甚至?xí)?dǎo)致電路失效。因此本文主要針對(duì)BRAM進(jìn)行抗SEU防護(hù)。
FPGA緩解SEU的防護(hù)可從工藝、版圖設(shè)計(jì)和系統(tǒng)設(shè)計(jì)等不同層面進(jìn)行,但工藝和版圖設(shè)計(jì)代價(jià)昂貴且設(shè)計(jì)周期較長(zhǎng),目前的抗輻射加固主要是在系統(tǒng)設(shè)計(jì)層面上進(jìn)行。緩解SEU最常用的系統(tǒng)容錯(cuò)方案是采用具有單比特糾錯(cuò)和雙比特檢錯(cuò)(SEC-DED)的漢明碼技術(shù)。但是,隨著制造工藝節(jié)點(diǎn)的減小使得太空輻射環(huán)境中FPGA的MBU成為高發(fā)事件。在采用的 45 納米技術(shù)中, MBU 事件占FPGA軟錯(cuò)誤的概率高達(dá)48.28%[1],而且對(duì)于更小的技術(shù)節(jié)點(diǎn),該比率也相對(duì)變高[3]。傳統(tǒng)的SEC-DED技術(shù)已無法滿足FPGA存儲(chǔ)器糾正多位錯(cuò)誤的需求。MBU的發(fā)生主要有單粒子撞擊造成的多位翻轉(zhuǎn) ( single event multiple upset,SEMU) 和一位翻轉(zhuǎn)的積累這兩種形式,后者的消除通過縮短系統(tǒng)的整個(gè)刷新時(shí)間即可實(shí)現(xiàn),因此,目前討論的多比特翻轉(zhuǎn)多指SEMU。它是由單個(gè)高能粒子以某種入射角擊中存儲(chǔ)器的敏感區(qū)造成相鄰存儲(chǔ)單元的多個(gè)瞬時(shí)錯(cuò)誤[4-5],也稱之為多比特突發(fā)錯(cuò)誤( burst error,BE)。
為了能夠糾正MBU軟錯(cuò)誤,國(guó)內(nèi)外學(xué)者提出了多種設(shè)計(jì)方案,文獻(xiàn)[6]采用2-D海明碼校正配置存儲(chǔ)器的多位翻轉(zhuǎn),可用性超過99.9999999%。文獻(xiàn)[2]采用InD 奇偶校驗(yàn)編碼來檢測(cè)配置存儲(chǔ)器的MBU,利用糾刪碼技術(shù)重建碼字實(shí)現(xiàn)糾錯(cuò),能檢測(cè)100%MBU,且資源占用率僅為3.3%。文獻(xiàn)[7]將多個(gè)存儲(chǔ)器交錯(cuò)排列成陣列,把單個(gè)碼字分散到多個(gè)存儲(chǔ)器,從而使單個(gè)存儲(chǔ)器上產(chǎn)生的邏輯相鄰的多位翻轉(zhuǎn)錯(cuò)誤分散到不同碼字,使用傳統(tǒng)的 SEC-DED 方法即可進(jìn)行糾錯(cuò),但是這樣需要大量的硬件資源。文獻(xiàn)[8]基于信息和硬件冗余的組合,提出一種奇偶校驗(yàn)字節(jié)和復(fù)制(Parity per Byte and Duplication,PBU)的EDAC技術(shù),將每個(gè)存儲(chǔ)字分成字節(jié)段,奇偶校驗(yàn)位與每個(gè)段相關(guān)聯(lián)實(shí)現(xiàn)多位糾錯(cuò),使用的存儲(chǔ)塊僅占3.85%。在國(guó)內(nèi),文獻(xiàn)[9]提出一種改進(jìn)型的(14,8)循環(huán)碼實(shí)現(xiàn)了存儲(chǔ)器MBU的糾錯(cuò)檢錯(cuò),代碼易于實(shí)現(xiàn),且實(shí)時(shí)性高。文獻(xiàn)[10]提出一種位交錯(cuò)技術(shù),將它與漢明碼結(jié)合,可實(shí)現(xiàn)存儲(chǔ)器MBU的99.82%糾錯(cuò)。文獻(xiàn)[11]通過將兩個(gè)能糾正一位隨機(jī)錯(cuò)誤和二位突發(fā)錯(cuò)誤的(13,8)系統(tǒng)碼結(jié)合,交織度為2的(26,16)交織碼,實(shí)現(xiàn)了存儲(chǔ)器的多位翻轉(zhuǎn)糾錯(cuò)。諸如其它糾錯(cuò)能力強(qiáng)的錯(cuò)誤檢查和糾正(error correcting code,ECC)碼,比如BCH( Bose Chaudhuri Hocquenghem)碼、RS( Reed-Solomon) 碼、矩陣碼等,具有速度和時(shí)滯的缺點(diǎn)。
本文使用RM(Reed-Muller)碼來進(jìn)行多位翻轉(zhuǎn)糾錯(cuò),它是最老的錯(cuò)誤糾正線性碼之一[12],所實(shí)現(xiàn)的RM(2,5)碼構(gòu)造簡(jiǎn)單,結(jié)構(gòu)特性豐富,占用資源少,可實(shí)現(xiàn)少于4位的翻轉(zhuǎn)糾錯(cuò),而且具有低時(shí)滯和高性能的特點(diǎn)。通過對(duì)編碼系統(tǒng)進(jìn)行了可靠性分析,利用故障注入進(jìn)行了仿真實(shí)現(xiàn)和實(shí)物實(shí)驗(yàn),從理論分析和硬件實(shí)驗(yàn)驗(yàn)證證明該編碼可提高FPGA BRAM的可靠性。
RM編碼與其他糾錯(cuò)檢錯(cuò)碼一樣,均需要經(jīng)過編碼和譯碼兩個(gè)過程。
對(duì)于任意整數(shù)m和r,0 ≤r≤m存在一個(gè)二進(jìn)制碼長(zhǎng)為2m的r階 RM 碼,記為 RM(r,m),其主要參數(shù)由三部分[13]:
碼長(zhǎng):n=2m
(1)

(2)
最小碼距:dmin=2m-r
(3)

t=(dmin-1)/2=3[13]
設(shè)信息碼為m=(m15,m14,…,m0),生成矩陣為G,則R(2,5)碼的編碼生成的編碼字C為:
C=m×G
(4)
RM(2,5)碼共有5個(gè)變量:X1、X2、X3、X4、X5,它可以糾正大多數(shù)的三位隨機(jī)翻轉(zhuǎn)錯(cuò)誤,其生成矩陣定義為G=(1,G1,G2)[14]。其中:
G1=(X1,X2,X3,X4,X5,)T
G2=(X1X2,X1X3,X1X4,X1X5,X2X3,X2X4,
X2X5,X3X4,X3X5,X4X5)
RM(r, m)為正交結(jié)構(gòu),因此譯碼通常采用大數(shù)邏輯譯碼(majority logic decoder,MLD),整個(gè)譯碼過程由3個(gè)階段構(gòu)成[15]。
第一階段先譯碼出10個(gè)信息位(m9,…,m0),而且每個(gè)信息位都由8位校驗(yàn)和來確定,以m9為例:

(5)
其中:C′為譯碼器接所收到的編碼字,通過對(duì)8位校驗(yàn)和進(jìn)行多數(shù)表決決定該譯碼信息位是0還是1,即:分別比較0和1的個(gè)數(shù),若0的個(gè)數(shù)多,則該信息位為0,否則為1;若0和1的個(gè)數(shù)相等,則表示為發(fā)生4位錯(cuò)誤,為未知信息位,無法進(jìn)行正確譯碼。
第二階段的譯碼需要生成16位中間碼字C″,由公式(6)計(jì)算得到,該中間字的值跟第一階段譯碼的信息位相關(guān)。該階段譯碼出5個(gè)信息位(m14,…,m10),每個(gè)信息由16個(gè)校驗(yàn)和進(jìn)行多數(shù)表決確實(shí),式(7)給出m14的16位校驗(yàn)和計(jì)算公式。
C″=C′-[m9…m0]G2
(6)
(7)
第三階段譯碼出最后一位信息位m15,該信息位的譯碼需要生成32位中間碼字C?,由公式(8)計(jì)算得到。該階段無需生成校驗(yàn)和,可直接對(duì)C?進(jìn)行多數(shù)表決得到m15。同時(shí)C?也指示了BRAM數(shù)據(jù)的具體翻轉(zhuǎn)位置,若無翻轉(zhuǎn)故障發(fā)生,C?的所有位全為‘0’或者‘1’,發(fā)生翻轉(zhuǎn)時(shí),若1的個(gè)數(shù)大于0的個(gè)數(shù),則不為‘1’的那幾位所在的位置即為數(shù)據(jù)翻轉(zhuǎn)位;相反,若0的個(gè)數(shù)多,則不為‘0’的那幾位所在位置即為數(shù)據(jù)翻轉(zhuǎn)位。
C?=C″[m14…m10]G1
(8)
至此,經(jīng)過3個(gè)階段的譯碼,譯碼器將接收到的32位編碼字譯碼成16位信息位,并完成糾錯(cuò)檢錯(cuò)。RM(2,5)碼譯碼思想總結(jié)為:
(1)在RM(2,5)編碼矩陣的每行找到2m-r=8個(gè)特征矢量,將其與接收到的碼字C進(jìn)行點(diǎn)乘得到8位校驗(yàn)和。
(2) 將每個(gè)譯碼位所得的校驗(yàn)和0和1的個(gè)數(shù)進(jìn)行判斷,若0的個(gè)數(shù)多,則該譯碼位為0,否則為1。
(3) 將(2)中得到的譯碼位與生成矩陣G2相乘,用接收到的碼字C′減去相乘結(jié)果得到新的碼字C″,在C″找到新的特征矢量求出16位校驗(yàn)和,重復(fù)(2)。
(4) 將(2)中得到的譯碼位與G1相乘,用C″減去相乘結(jié)果得到新的碼字C?,重復(fù)(2)。
(5) 將(2)(3)(4)中得到的所有譯碼信息位進(jìn)行整合輸出。
Xilinx Virtex-5 FPGA的BRAM其內(nèi)嵌有可實(shí)現(xiàn)SEC-DED的漢明碼,用于緩解SEU的SBU效應(yīng),一旦發(fā)生MBU,內(nèi)嵌的漢明碼防護(hù)無法起到防護(hù)作用。常用的解決方案有:對(duì)BRAM進(jìn)行TMR,屏蔽單個(gè)存儲(chǔ)器的SEU事件;或者為BRAM提供具有糾錯(cuò)能力更強(qiáng)的ECC防護(hù),在存儲(chǔ)數(shù)據(jù)前進(jìn)行編碼防護(hù),讀取數(shù)據(jù)時(shí)進(jìn)行譯碼修復(fù)。
FPGA常用的可靠性評(píng)估方法主要為輻射實(shí)驗(yàn)和故障注入。輻射實(shí)驗(yàn)使用粒子加速器提供的各種粒子來源以模擬太空輻射環(huán)境,通過對(duì)目標(biāo)器件進(jìn)行照射實(shí)現(xiàn)。該方法可以得到較為真實(shí)的實(shí)驗(yàn)數(shù)據(jù),但是目前國(guó)內(nèi)能提供實(shí)驗(yàn)條件的設(shè)備不多,而且實(shí)現(xiàn)操作復(fù)雜、器件價(jià)格昂貴并且實(shí)驗(yàn)周期過長(zhǎng)。
故障注入技術(shù)通過對(duì)待測(cè)電路模塊進(jìn)行定點(diǎn)或者隨機(jī)的故障注入,通過觀察分析模塊電路的輸出結(jié)果,可得到被測(cè)模塊電路的可靠性評(píng)估結(jié)果。該技術(shù)可以彌補(bǔ)輻射實(shí)驗(yàn)的不足,且成本低、操作簡(jiǎn)便,已成為FPGA評(píng)估單粒子效應(yīng)的一種重要方法。本文通過對(duì)BRAM存儲(chǔ)的數(shù)據(jù)進(jìn)行隨機(jī)故障注入,進(jìn)行0/1翻轉(zhuǎn),驗(yàn)證RM碼防護(hù)時(shí)BRAM的可靠性。
TMR是一種易于實(shí)現(xiàn)的靜態(tài)冗余防護(hù)方法,將電路模塊進(jìn)行三備份,最終通過表決器進(jìn)行3取2的表決輸出,達(dá)到屏蔽單個(gè)電路模塊失效的故障[16]。由于在同一時(shí)刻,3個(gè)模塊均發(fā)生單粒子翻轉(zhuǎn)事件的概率較低,且電路實(shí)現(xiàn)過程相對(duì)簡(jiǎn)單,被廣泛應(yīng)用于緩解SEU。因此,對(duì)BRAM進(jìn)行三模冗余可提高存儲(chǔ)器的可靠性。
盡管TMR易于實(shí)現(xiàn),有效緩解SEU,且提高BRAM的可靠性,但其也存在以下缺陷[17]:
1)只能對(duì)錯(cuò)誤進(jìn)行屏蔽不能進(jìn)行糾錯(cuò)。單個(gè)模塊發(fā)生故障后,只能將其屏蔽,由于不具備糾錯(cuò)功能,且翻轉(zhuǎn)錯(cuò)誤的累積,最終會(huì)導(dǎo)致TMR防護(hù)失效,甚至導(dǎo)致系統(tǒng)崩潰。
2)盡管多個(gè)模塊同時(shí)發(fā)生SEU的概率較低,但仍有可能發(fā)生,對(duì)系統(tǒng)可靠性來說是一個(gè)較大的威脅。
3)BRAM的TMR防護(hù)導(dǎo)致硬件資源開銷增大,其資源利用率在大型設(shè)計(jì)中較低,且布線資源會(huì)增加系統(tǒng)的延遲。
4)表決器本身不具備抗輻射的能力,也可能發(fā)生SEU事件,導(dǎo)致表決出錯(cuò)。
因此,單純的對(duì)BRAM進(jìn)行TMR防護(hù),在一定程度生可有效緩解SEU,提高系統(tǒng)的可靠性,但隨著時(shí)間的推移,未及時(shí)修復(fù)的故障會(huì)積累,TMR的可靠性也會(huì)下降。
使用糾錯(cuò)能力更強(qiáng)的ECC碼進(jìn)行防護(hù),可節(jié)省硬件資源開銷,提高資源的利用率。RM(2,5)碼對(duì)BRAM的防護(hù)原理如圖1所示,數(shù)據(jù)處理單元控制BRAM的讀寫以及故障注入,RM(2,5)模塊實(shí)現(xiàn)數(shù)據(jù)的編譯碼故障注入模塊實(shí)現(xiàn)故障模擬。
數(shù)據(jù)處理單元發(fā)出寫操作指令時(shí),16位原始數(shù)據(jù)通過encin端口送入編碼器,編碼器進(jìn)行編碼后將32位編碼字由encout端口寫入BRAM;當(dāng)數(shù)據(jù)處理單元發(fā)出讀操作指令時(shí),BRAM中的32位數(shù)據(jù)先從decin端口輸入到譯碼器進(jìn)行解碼,如果塊存儲(chǔ)器中的數(shù)據(jù)發(fā)生翻轉(zhuǎn)故障,解碼器能夠?qū)ΨD(zhuǎn)的數(shù)據(jù)位進(jìn)行糾正。故障注入模塊用來進(jìn)行故障注入測(cè)試,根據(jù)處理器單元提供的注入地址從BRAM中讀取相應(yīng)的字對(duì)其進(jìn)行0/1翻轉(zhuǎn),并將翻轉(zhuǎn)后的數(shù)據(jù)重寫回BRAM,模擬BRAM發(fā)生翻轉(zhuǎn)故障的狀態(tài)。error指示故障狀態(tài),error輸出“00”表示無故障發(fā)生,“01”表示檢測(cè)到一位、兩位或者3位翻轉(zhuǎn)錯(cuò)誤,并進(jìn)行了修復(fù),“10”表示檢測(cè)到四位翻轉(zhuǎn)錯(cuò)誤,無法進(jìn)行修復(fù), “11”表示檢測(cè)到無效位錯(cuò)誤。

圖1 BRAM的防護(hù)原理
RM(2,5)編譯碼原理圖如圖2所示。存入數(shù)據(jù)時(shí),16位原始信息碼M(15:0)從encin端口進(jìn)入編碼器與32位生成矩陣G進(jìn)行異或運(yùn)算,得到的32位編碼字存入BRAM中。讀取數(shù)據(jù)時(shí),從BRAM讀取的32位譯碼數(shù)據(jù)從decin端口進(jìn)入譯碼器,第一階段譯碼出M(9:0),第二階段譯碼出M(14:10),第三階段譯碼出M15,最后從decout端口輸出16位譯碼字,譯碼過程中同時(shí)修復(fù)存儲(chǔ)器中的最多3位翻轉(zhuǎn)錯(cuò)誤,同時(shí)指示了錯(cuò)誤發(fā)生的位置,以及錯(cuò)誤發(fā)生的位數(shù),譯碼結(jié)果輸出到處理器。

圖2 RM(2,5)碼編譯原理圖
由RM(2,5)碼組成的EDAC電路,并不具備抗輻射的能力,在太空輻照環(huán)境中,編譯碼電路也可能發(fā)生SEU事件,導(dǎo)致在編碼和譯碼過程中出現(xiàn)翻轉(zhuǎn)故障,無論是編碼數(shù)據(jù)還是譯碼數(shù)據(jù)均會(huì)出現(xiàn)錯(cuò)誤。因此通過將TMR與EDAC相結(jié)合,屏蔽單個(gè)編譯碼電路模塊的故障,可有效避免EDAC電路的SEU事件,提高系統(tǒng)的可靠性。其原理框圖如圖3所示,將編碼器和譯碼器分別進(jìn)行三備份,數(shù)據(jù)同時(shí)進(jìn)入3個(gè)模塊,通過表決器進(jìn)行3取2表決輸出,提高了EDAC的可靠性。

圖3 EDAC的TMR框圖
通過理論分析對(duì)比不同條件下BRAM的可靠性以及RM(2,5)防護(hù)系統(tǒng)的資源利用率,最后通過仿真和實(shí)驗(yàn)驗(yàn)證,證明RM(2,5)碼可實(shí)現(xiàn)小于4位的翻轉(zhuǎn)修復(fù)。
FPGA 塊存儲(chǔ)器單元未進(jìn)行容錯(cuò)設(shè)計(jì)時(shí)其可靠性基本服從泊松分布[18],即假設(shè)每個(gè)BRAM單元發(fā)生SEU的概率為,在時(shí)間t內(nèi)未發(fā)生SEU的概率為:
P(t)=e-λt
(9)
假設(shè)一個(gè)存儲(chǔ)大小為m的BRAM其輸入輸出位寬為n,則它在時(shí)間t內(nèi)發(fā)生i位翻轉(zhuǎn)的概率為:

(10)
其中:i=0,1,2,3。RM(2,5)碼能糾正單個(gè)碼字中的3位翻轉(zhuǎn)錯(cuò)誤,因此,在時(shí)間t內(nèi)BRAM的可靠性為:
(11)
其中:i=0,1,2,3。在NASA提供的試驗(yàn)用粒子束條件下測(cè)得每個(gè)BRAM單元發(fā)生單粒子翻轉(zhuǎn)的概率λ=1.1×10-6b/d[19]。圖4是存儲(chǔ)器大小分別為m=512 byte和m=1 024 byte下,在無防護(hù)、(12,8)漢明碼防護(hù)和RM(2,5)碼防護(hù)3種條件下由MATLAB計(jì)算得到的可靠性對(duì)比。其中R0(t)是無防護(hù)時(shí)的可靠性曲線,R1(t) 是(12,8)漢明碼防護(hù)下的可靠性曲線,R2(t)是RM(2,5)碼防護(hù)下的可靠性曲線。由圖可見,在相同存儲(chǔ)器大小下,RM(2,5)碼的可靠性明顯更優(yōu);在相同的防護(hù)條件下,容量小的存儲(chǔ)器具有更高的可靠性。

圖4 可靠性對(duì)比
本文設(shè)計(jì)的RM(2,5)碼防護(hù)系統(tǒng)利用Xilinx ISE14.7 設(shè)計(jì)工具在Virtex5 FPGA(xc5vfx70t) 上用VHDL實(shí)現(xiàn),工作時(shí)鐘頻率為50 MHz。譯碼器和編碼器主要是采用組合邏輯方式實(shí)現(xiàn),整個(gè)編碼系統(tǒng)的延遲由所占用的異或邏輯數(shù)量決定,編譯綜合后得到編碼器模塊LUT利用率約為0.107%,譯碼器模塊LUT利用率約為1.12%,實(shí)現(xiàn)后整個(gè)編碼模塊的延遲為4.456 ns。RM(2,5)編譯碼模塊三模冗余后,其硬件資源約為原始的三倍左右,如表1所示。

表1 RM編譯碼模塊資源 %
實(shí)驗(yàn)前對(duì)該防護(hù)系統(tǒng)進(jìn)行了連續(xù)注入故障的仿真測(cè)試,分別對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行1位、2位以及3位的翻轉(zhuǎn)。仿真結(jié)果表明可糾正不少于3位的翻轉(zhuǎn)故障。仿真結(jié)果如圖5所示。故障注入模塊inf_error(2:0)端口對(duì)BRAM進(jìn)行3位隨機(jī)翻轉(zhuǎn),可以看到經(jīng)過譯碼器修復(fù)后,error端口輸出1,3位翻轉(zhuǎn)錯(cuò)誤被修復(fù)。

圖5 仿真結(jié)果
經(jīng)過仿真驗(yàn)證后,初步驗(yàn)證了該防護(hù)可修復(fù)不少于3位的翻轉(zhuǎn),進(jìn)一步利用FPGA內(nèi)部ICAP接口將配置RAM的配置幀內(nèi)容回讀寫入BRAM作為原始存儲(chǔ)數(shù)據(jù)。Virtex-5每個(gè)配置幀大小為41×32位,所設(shè)計(jì)的RM(2,5)編碼系統(tǒng)其編碼輸入寬度為16位,通過將其級(jí)聯(lián)實(shí)現(xiàn)32位的輸入。本實(shí)驗(yàn)采用單端口的BRAM,存儲(chǔ)寬度為64位,深度為41。使用Xilinx ISE14.7開發(fā)工具套件提供的ChipScopeTMPro工具抓取讀取BRAM數(shù)據(jù)時(shí)的信號(hào)波形圖,觀察其存入BRAM的數(shù)據(jù)、故障注入后的數(shù)據(jù)以及糾錯(cuò)后的數(shù)據(jù),實(shí)驗(yàn)結(jié)果與仿真結(jié)果相同。
圖6(a)為BRAM寫入數(shù)據(jù)的波形圖,當(dāng)ICAP回讀計(jì)數(shù)器rb_cmd_cnt計(jì)數(shù)到71時(shí),BRAM地址addra 從0加到1開始寫入數(shù)據(jù),原始數(shù)據(jù)首先從encin端口進(jìn)入編碼器進(jìn)行編碼,編碼字落后1個(gè)時(shí)鐘由dina端口存入BRAM中。
圖6(b)顯示了故障注入的過程。翻轉(zhuǎn)信號(hào)start_flip_bit在時(shí)鐘上升沿處拉高,表示開始從BRAM 的douta端口讀取地址07,對(duì)位地址為25~27的3 位數(shù)據(jù)進(jìn)行翻轉(zhuǎn),圖中可以看到相應(yīng)的位25~27由“0”變?yōu)椤癊”,翻轉(zhuǎn)結(jié)束后通過dina端口將數(shù)據(jù)寫回BRAM中,flip_start_done拉高表示一輪故障注入結(jié)束 。
圖6(c)是數(shù)據(jù)處理單元從BRAM讀取數(shù)據(jù)并實(shí)現(xiàn)三位糾錯(cuò)的過程,當(dāng)ICAP寫計(jì)數(shù)器wf_cmd_cnt計(jì)數(shù)到21時(shí),BRAM的douta端口開始輸出數(shù)據(jù),先進(jìn)入譯碼器進(jìn)行譯碼,當(dāng)wf_cmd_cnt計(jì)數(shù)為37時(shí),可以看到,譯碼器decout端口輸出的數(shù)據(jù)為正常數(shù)據(jù),翻轉(zhuǎn)的三位被修復(fù)。

圖6 實(shí)驗(yàn)分析
經(jīng)過仿真驗(yàn)證以及實(shí)物驗(yàn)證,均證明RM(2,5)碼可修復(fù)BRAM中發(fā)生的不少于三位的翻轉(zhuǎn)錯(cuò)誤,有效提高FPGA塊存儲(chǔ)器的可靠性。
輻射誘發(fā)的MBU是FPGA的一個(gè)嚴(yán)重的可靠性問題,器件晶體管的減少、集成度的提高,使得FPGA的MBU概率變高。BRAM作為FPGA的第二大內(nèi)存,一旦發(fā)生MBU,其設(shè)置的SEC-DED防護(hù)將會(huì)失效,造成所存儲(chǔ)的用戶數(shù)據(jù)出現(xiàn)錯(cuò)誤,從而引發(fā)電路邏輯故障。
本文利用RM(2,5)碼對(duì)FPGA的BRAM進(jìn)行了EDAC防護(hù),理論分析了防護(hù)系統(tǒng)的可靠性,并且通過仿真和實(shí)物測(cè)試實(shí)驗(yàn),結(jié)果表明該方法可實(shí)現(xiàn)對(duì)存儲(chǔ)器不少于3位翻轉(zhuǎn)故障的修復(fù),驗(yàn)證了RM(2,5)碼組成的防護(hù)系統(tǒng)的有效性和可靠性。將TMR與EDAC模塊相結(jié)合,提高了EDAC模塊的可靠性,相比較傳統(tǒng)的漢明碼技術(shù),具有更好的防護(hù)效果,該防護(hù)系統(tǒng)可靈活應(yīng)用于寄存器和存儲(chǔ)器的防護(hù)中。下一步,將繼續(xù)研究FPGA配置存儲(chǔ)器配置幀的MBU修復(fù),將用RM(2,5)防護(hù)的BRAM的來存取配置幀的配置數(shù)據(jù),保證在整個(gè)配置幀的重配置中配置數(shù)據(jù)的可靠性。