王番 施敏華 常亮
(1 中國(guó)科學(xué)院微小衛(wèi)星創(chuàng)新研究院,上海 201210)(2 中國(guó)科學(xué)院大學(xué),北京 100049)(3 上海微小衛(wèi)星工程中心,上海 201210)
靜態(tài)隨機(jī)存儲(chǔ)器(SRAM)型現(xiàn)場(chǎng)可編程門陣列(FPGA)在星上的應(yīng)用非常廣泛,但由于工藝原因,該類器件在空間環(huán)境下,易受到空間高能粒子的輻射,發(fā)生單粒子翻轉(zhuǎn)(Single-Event Upsets,SEU)等問題。而FPGA依靠存儲(chǔ)在配置存儲(chǔ)單元里的配置數(shù)據(jù),實(shí)現(xiàn)其邏輯功能。所以如果配置存儲(chǔ)單元發(fā)生單粒子翻轉(zhuǎn),可能會(huì)使FPGA無法實(shí)現(xiàn)預(yù)期的功能,造成嚴(yán)重后果。
為了解決SRAM型FPGA單粒子翻轉(zhuǎn)問題,國(guó)內(nèi)外都做了很多相關(guān)研究。最直接的是對(duì)器件的制造工藝上增加抗輻照處理。除了工藝層面,常見的解決方法還有三模冗余(Triple Modular Redundancy, TMR)技術(shù),即將電路復(fù)制為三份,再通過多數(shù)表決器對(duì)電路結(jié)果進(jìn)行比較[1]。TMR雖然提高了設(shè)計(jì)的可靠性,但是相應(yīng)的也會(huì)增加面積和功耗。除此外,若多數(shù)表決器電路發(fā)生單粒子翻轉(zhuǎn),則會(huì)造成嚴(yán)重故障。鑒于此,文獻(xiàn)[2]根據(jù)SRAM型FPGA可重配置特性提出了對(duì)配置存儲(chǔ)器進(jìn)行刷新(Scrubbing)的方法,可以在不中斷用戶設(shè)計(jì)運(yùn)行的情況下直接修復(fù)配置內(nèi)存。常見的刷新可分為外部刷新和內(nèi)部刷新[3]。外部刷新接口通常使用SelectMAP模式,它一般是將刷新控制電路放在抗輻照的反熔絲FPGA中,并將原始比特流文件存儲(chǔ)在外部flash或prom存儲(chǔ)器中[4]。外部刷新常用的手段有定時(shí)刷新或回讀檢測(cè)刷新。定時(shí)刷新是按事先設(shè)定好的時(shí)間間隔對(duì)整個(gè)配置幀進(jìn)行刷新[5]。這類刷新需要較大的存儲(chǔ)空間來存儲(chǔ)原始比特流文件,而且它的刷新速率較慢,受到配置時(shí)鐘頻率和比特流文件大小的限制。文獻(xiàn)[6]中采用回讀檢測(cè)刷新,對(duì)FPGA的配置數(shù)據(jù)進(jìn)行回讀并檢測(cè)是否出現(xiàn)SEU,若出現(xiàn)則重新加載原始比特流[7],該方法設(shè)計(jì)復(fù)雜加載耗時(shí)。之后文獻(xiàn)[8]中提出了動(dòng)態(tài)部分重構(gòu)刷新方法,首先對(duì)配置數(shù)據(jù)進(jìn)行糾錯(cuò)編碼(Error Correcting Code,ECC),之后以幀為單位對(duì)配置數(shù)據(jù)進(jìn)行回讀以及ECC校驗(yàn),如果校驗(yàn)錯(cuò)誤,則對(duì)該幀進(jìn)行重新刷新。外部刷新可靠性高,但是設(shè)計(jì)復(fù)雜,而且需要額外的存儲(chǔ)器和控制芯片。內(nèi)部刷新是通過內(nèi)部配置訪問接口(Internal Configuration Access Port, ICAP),對(duì)FPGA進(jìn)行回讀,之后經(jīng)過ECC校驗(yàn),判斷是否出錯(cuò),最后進(jìn)行重寫。文獻(xiàn)[9]提出在關(guān)鍵電路上通過復(fù)制與比較進(jìn)行位置感知,從而降低冗余度,提高了內(nèi)部刷新速率。而文獻(xiàn)[1]通過提取比特流的必要位減少回讀刷新時(shí)間,再通過控制刷新次數(shù)來提高系統(tǒng)的可靠性。對(duì)比外部刷新,內(nèi)部刷新無需外部額外的芯片,所以系統(tǒng)更加簡(jiǎn)潔,配置速度也更快。文獻(xiàn)[10]中將內(nèi)部刷新與外部刷新方法相結(jié)合,既保留了外部刷新的高抗輻照性,又利用內(nèi)部刷新提高了刷新速度,但該方法設(shè)計(jì)十分復(fù)雜,不易實(shí)施。
傳統(tǒng)的內(nèi)部刷新電路是通過ICAP回讀配置幀后,再通過內(nèi)置的糾錯(cuò)電路FRAME_ECC進(jìn)行檢錯(cuò)糾錯(cuò)。該系統(tǒng)結(jié)構(gòu)存在的主要問題是刷新控制邏輯以及ECC校驗(yàn)電路也會(huì)有可能受到輻射影響出現(xiàn)單粒子翻轉(zhuǎn)現(xiàn)象,而且內(nèi)置的ECC校驗(yàn)電路只能校驗(yàn)糾正1 bit翻轉(zhuǎn),檢測(cè)2 bit翻轉(zhuǎn),無法對(duì)多位翻轉(zhuǎn)進(jìn)行檢驗(yàn)。鑒于以上分析,本文在此類傳統(tǒng)的內(nèi)部刷新電路基礎(chǔ)上,提出對(duì)刷新電路增加三模冗余加固處理,并設(shè)計(jì)了新的檢驗(yàn)糾錯(cuò)系統(tǒng),最高可支持對(duì)3位翻轉(zhuǎn)的檢錯(cuò)糾正。
目前傳統(tǒng)的內(nèi)部刷新方案,其刷新控制電路部分沒有進(jìn)行抗單粒子加固,但刷新控制電路內(nèi)部同樣可能會(huì)出現(xiàn)單粒子翻轉(zhuǎn)問題。一旦該部分電路出現(xiàn)問題,則可能會(huì)導(dǎo)致刷新系統(tǒng)紊亂,從而引起系統(tǒng)故障。系統(tǒng)造成很嚴(yán)重的影響。所以本文針對(duì)該問題,提出對(duì)刷新控制電路模塊部分增加三模冗余加固設(shè)計(jì)。同時(shí)對(duì)糾錯(cuò)碼進(jìn)行研究,提出糾錯(cuò)能力更強(qiáng)的糾錯(cuò)碼。針對(duì)以上所做出的改進(jìn),對(duì)系統(tǒng)可靠性產(chǎn)生的影響進(jìn)行了如下分析。
最常用的檢錯(cuò)糾錯(cuò)手段是利用Xilinx公司提供的FRAME_ECC。FRAME_ECC是Xilinx官方提供的內(nèi)嵌于配置存儲(chǔ)器的檢錯(cuò)糾錯(cuò)電路[11]。它采用的編碼方式是13位漢明碼,在系統(tǒng)上電時(shí),會(huì)計(jì)算初始各個(gè)配置幀對(duì)應(yīng)的ECC值,并對(duì)其進(jìn)行存儲(chǔ)。之后一旦發(fā)現(xiàn)與原始存儲(chǔ)的ECC值不一致則判定為出現(xiàn)故障,便可及時(shí)對(duì)不一致處修復(fù),解決單比特翻轉(zhuǎn)。但是它只能做到對(duì)單個(gè)比特位翻轉(zhuǎn)進(jìn)行糾正,可以檢測(cè)2比特位翻轉(zhuǎn)并發(fā)出警告。而隨著FPGA設(shè)計(jì)越來越復(fù)雜,電路越來越集中,造成連續(xù)多比特翻轉(zhuǎn)的現(xiàn)象越來越多。所以傳統(tǒng)的FRAME_ECC糾錯(cuò)碼已經(jīng)不滿足需求。由此提出可以實(shí)現(xiàn)多位糾錯(cuò)的里德-穆勒碼(Reed-Muller,RM)[12]。RM碼里的編碼方案是由Muller在1954年提出的,同年,Reed又提出了相應(yīng)的解碼方案,由此構(gòu)成了完整的RM碼。RM碼由于其延時(shí)較低的特性,被廣泛應(yīng)用在星載計(jì)算機(jī)的信息傳輸上。
假設(shè)存在整數(shù)m和r,使得在0≤r≤m時(shí),存在一個(gè)r階RM碼,并且其對(duì)應(yīng)的二進(jìn)制碼長(zhǎng)l為2m,便將此時(shí)的RM碼記為RM(r,m)[13-14],可得
l=2m
(1)
(2)
dmin=2m-r
(3)
(4)
式中:l為二進(jìn)制碼長(zhǎng);k為階數(shù);dmin為最小碼距;b為最大可以糾正的錯(cuò)誤位數(shù)。取r=2,m=5,則dmin=8,b=3。所以由此可以得出RM(2,5)糾錯(cuò)碼可以實(shí)現(xiàn)對(duì)3位錯(cuò)誤比特位的糾正,這比常用的FRAME_ECC糾錯(cuò)碼的糾錯(cuò)能力要強(qiáng)。
RM(2,5)碼編碼時(shí),假設(shè)輸入數(shù)據(jù)的位寬為16 bit,那么輸出數(shù)據(jù)位寬是32 bit。由以上分析可知,RM碼中存在5個(gè)變量,將這5個(gè)變量設(shè)為a1,a2,…,a3,并定義編碼因子Q=(1,Q1,Q2),其中
Q1=(a1,a2,…,a5)T
(5)
Q2=(a1a2,a1a3,…,a4a5)T
(6)
將編碼因子Q與待編碼的輸入數(shù)據(jù)進(jìn)行按位異或后,即可得到編碼后的輸出數(shù)據(jù)。
RM(2,5)碼譯碼過程需要分為3個(gè)過程,假設(shè)待譯碼的數(shù)據(jù)為data_out[31∶0],譯碼后的數(shù)據(jù)表示為data_decode[15∶0]。首先計(jì)算譯碼后的低十位data_decode[9∶0]。低十位中的每一位需要通過8位的校驗(yàn)和確定。以data_decode[0]為例,在得到8位校驗(yàn)和后,若其中0的個(gè)數(shù)大于1的個(gè)數(shù),則data_decode[0]=0,反之為1,若二者相等,則說明發(fā)生了4 bit以上翻轉(zhuǎn),該位出現(xiàn)錯(cuò)誤。
C0,n=data _out[31-4n]+data_out[30-4n]+data_out[29-4n]+data_out[28-4n]
(n=0,1,…,7)
(7)
Dn=data _out[n]-[data_decode[9∶0]]Q2
(n=0,1,…,31)
(8)
計(jì)算data_decode[14∶10],該部分由16 bit校驗(yàn)和決定,首先根據(jù)式(8),得到中間變量Dn,根據(jù)這個(gè)中間變量由高位到低位,相鄰兩位兩兩相加,可得到16 bit校驗(yàn)和C′。
(9)
圖1 RM(2,5)碼解碼過程
沒有做任何抗單粒子舉措的SRAM型FPGA,其可靠性R隨時(shí)間t變化的曲線服從泊松分布[15]
R(t)=e-λt
(10)
式中:λ為單粒子翻轉(zhuǎn)概率。TMR兩個(gè)及兩個(gè)以上模塊正常運(yùn)行,則系統(tǒng)正常,所以增加了TMR保護(hù)措施的FPGA,其可靠性為
R(t)=3e-2λt-2e-3λt
(11)
NASA通過粒子束來模擬高能粒子,并對(duì)器件進(jìn)行輻射,以此得到了器件單粒子翻轉(zhuǎn)的概率λ大約為1.1×10-6bit/d[16]。根據(jù)此值,通過Matlab軟件仿真,可以得到未加抗單粒子保護(hù)措施以及增加TMR后,對(duì)應(yīng)的可靠性變化曲線,如圖2所示。從中可以看出增加TMR后的可靠性明顯增強(qiáng)。
圖2 可靠性對(duì)比(未加任何緩解SEU措施、增加TMR)
設(shè)輸入輸出位寬為n,則增加了FRAME_ECC糾錯(cuò)碼的系統(tǒng),其可靠性為
(12)
而采用RM(2,5)糾錯(cuò)碼的系統(tǒng)可靠性為
(13)
圖3顯示了未加任何糾錯(cuò)碼,使用FRAME_ECC糾錯(cuò)碼以及RM(2,5)碼三者分別對(duì)應(yīng)的可靠性曲線,從中可以看出適用了RM(2,5)糾錯(cuò)碼的可靠性最高,F(xiàn)RAME_ECC碼次之,未使用任何糾錯(cuò)碼的可靠性最低。
圖3 可靠性對(duì)比(未加任何糾錯(cuò)碼、 FRAME_ECC以及RM碼)
本文提出基于內(nèi)部刷新的抗SEU系統(tǒng)框如圖4所示,主要包括刷新器(scrubber)、ICAP接口,待測(cè)試模塊DUT(Design under test,即為實(shí)際應(yīng)用中用戶所設(shè)計(jì)的功能電路),其中scrubber主要包含刷新控制模塊、地址產(chǎn)生模塊、ICAP接口控制模塊、RAM存儲(chǔ)器以及糾錯(cuò)模塊,糾錯(cuò)模塊采用的是RM(2,5)糾錯(cuò)碼。同時(shí)因?yàn)閟crubber自身所在電路同樣可能被高能粒子輻射出現(xiàn)單粒子翻轉(zhuǎn)問題,所以為了降低該部分電路出現(xiàn)故障的可能性,在此系統(tǒng)中特別提出對(duì)scrubber模塊進(jìn)行三模冗余加固,提高了scrubber容錯(cuò)率,同時(shí)也增加了系統(tǒng)的可靠性。
圖4 系統(tǒng)結(jié)構(gòu)
1)地址產(chǎn)生模塊
地址產(chǎn)生模塊的主要功能是提供檢錯(cuò)以及糾錯(cuò)所需要的幀地址。無論是對(duì)FPGA進(jìn)行初始化還是刷新操作,都需要以幀的形式回讀配置數(shù)據(jù),所以首先必須知道存儲(chǔ)的配置數(shù)據(jù)所對(duì)應(yīng)的幀地址。在對(duì)當(dāng)前幀檢錯(cuò)糾錯(cuò)完成后,地址產(chǎn)生模塊會(huì)生成下一幀數(shù)據(jù)的地址。如果在此過程中,scrubber中任何一個(gè)冗余模塊出現(xiàn)單粒子翻轉(zhuǎn),地址產(chǎn)生模塊將會(huì)把幀地址改為scrubber模塊的初始地址,以此完成對(duì)scrubber模塊的刷新操作。這樣就可以避免由于錯(cuò)誤累積,導(dǎo)致多個(gè)冗余模塊同時(shí)出現(xiàn)故障,導(dǎo)致整個(gè)電路出錯(cuò)。
2)ICAP接口控制模塊
ICAP是FPGA內(nèi)部的專用接口,可以通過例化其原語(yǔ)進(jìn)行使用。ICAP接口控制模塊要嚴(yán)格遵循Xilinx公司規(guī)定的ICAP接口讀寫時(shí)序進(jìn)行操作。因此該模塊的主要功能是根據(jù)時(shí)序要求,向ICAP接口發(fā)送讀寫使能以及幀地址,已完成對(duì)配置數(shù)據(jù)的讀寫。ICAP數(shù)據(jù)接口data信號(hào)主要的來源有3種:①根據(jù)Xilinx提供的配置手冊(cè),在通過ICAP讀寫之前都需要先發(fā)送配置命令;②由地址產(chǎn)生模塊提供的幀地址;③RM檢錯(cuò)糾錯(cuò)模塊檢查到回讀到的數(shù)據(jù)發(fā)生了SEU后,對(duì)數(shù)據(jù)進(jìn)行糾正,糾正后的數(shù)據(jù)需要重新通過ICAP寫入原始幀。
3)糾錯(cuò)模塊
糾錯(cuò)模塊主要功能是對(duì)回讀的數(shù)據(jù)進(jìn)行檢查并判斷是否存在單粒子翻轉(zhuǎn),若翻轉(zhuǎn)則進(jìn)行糾正。在此采用的糾錯(cuò)碼為RM(2,5)碼,最多對(duì)連續(xù)3位單粒子翻轉(zhuǎn)進(jìn)行糾正,可檢測(cè)連續(xù)4位翻轉(zhuǎn)但無法修復(fù)。回讀的數(shù)據(jù)經(jīng)過糾錯(cuò)模塊內(nèi)的編碼單元后,存儲(chǔ)到塊狀存儲(chǔ)器(BRAM)中,之后再?gòu)腂RAM中讀出并經(jīng)過譯碼單元判斷是否出錯(cuò),若出錯(cuò)位數(shù)低于3位,譯碼單元可直接進(jìn)行糾正,若超過3位錯(cuò)誤,則會(huì)給出錯(cuò)誤信號(hào)error_status[1∶0],00表示無錯(cuò)誤出現(xiàn),01出現(xiàn)了3位以下錯(cuò)誤且進(jìn)行了糾正,10表示出現(xiàn)4位翻轉(zhuǎn),11表示4位以上的翻轉(zhuǎn)。10以及11狀態(tài)都無法對(duì)翻轉(zhuǎn)直接進(jìn)行糾正。
4)刷新控制模塊
刷新控制模塊作為整個(gè)scrubber的核心模塊,通過發(fā)送各種指令信息控制其他子模塊的運(yùn)行。主要指令包括開始生成幀地址指令、開始讀寫配置數(shù)據(jù)指令等。刷新控制模塊收到由上位機(jī)發(fā)來的刷新開始命令后(scrub_start),首先向地址產(chǎn)生模塊發(fā)送幀地址生成命令(frame_addr_gen_start),在收到地址產(chǎn)生模塊返回的幀地址生成完畢的信號(hào)后,向ICAP接口控制模塊發(fā)送回讀配置數(shù)據(jù)(start_rb)指令。待糾錯(cuò)模塊對(duì)回讀的數(shù)據(jù)檢錯(cuò)糾錯(cuò)完畢后,刷新控制模塊會(huì)重新控制地址產(chǎn)生模塊生成下一幀地址。如果糾錯(cuò)模塊是4位以上的翻轉(zhuǎn),系統(tǒng)無法修復(fù),刷新控制模塊會(huì)關(guān)閉所有使能來暫停系統(tǒng)工作。以上整個(gè)過程中如果scrubber冗余模塊存在錯(cuò)誤,會(huì)立刻關(guān)閉所有操作,并將地址產(chǎn)生模塊的初始幀地址切換為scrubber,重新開始對(duì)scrubber進(jìn)行刷新。
如前文所述,scrubber所在電路會(huì)受到高能粒子輻射,發(fā)生單粒子翻轉(zhuǎn)。而傳統(tǒng)的內(nèi)部刷新電路并沒有對(duì)scrubber進(jìn)行加固措施。為了解決這個(gè)問題,本文提出對(duì)scrubber進(jìn)行三模冗余加固措施。但冗余模塊仍會(huì)出現(xiàn)單粒子翻轉(zhuǎn),若翻轉(zhuǎn)后不進(jìn)行維護(hù),隨著錯(cuò)誤累積,可能會(huì)出現(xiàn)多個(gè)冗余模塊同時(shí)出現(xiàn)故障,而此時(shí)多數(shù)表決器誤將多個(gè)出錯(cuò)冗余塊產(chǎn)生的輸出作為正確結(jié)果,進(jìn)行表決,這會(huì)引起scrubber模塊輸出錯(cuò)誤,從而導(dǎo)致系統(tǒng)出錯(cuò)。鑒于此,本文對(duì)每個(gè)三模冗余部分增加錯(cuò)誤判斷信號(hào),若該信號(hào)有效,則說明冗余模塊其一出現(xiàn)了故障,那么地址產(chǎn)生模塊會(huì)將刷新地址改為scrubber初始地址,對(duì)整個(gè)scrubber模塊進(jìn)行刷新,以此達(dá)到避免錯(cuò)誤積累的目的。經(jīng)過三模冗余加固后的scrubber如圖5所示。對(duì)其中的錯(cuò)誤判決器輸入輸出真值表經(jīng)過化簡(jiǎn)后,可得到其電路如圖6所示。
圖5 三模冗余結(jié)構(gòu)
圖6 錯(cuò)誤判決器電路圖
FPGA在布局布線時(shí),開發(fā)工具往往會(huì)傾向于將各個(gè)模塊集中分布,這不利于我們確定DUT以及scrubber分別對(duì)應(yīng)的起始幀地址。所以本文提出利用PlanAhead軟件中的Pblock工具對(duì)兩個(gè)模塊的分布位置進(jìn)行調(diào)整。在進(jìn)行布局布線時(shí),對(duì)scrubber與DUT分布的位置進(jìn)行手動(dòng)的調(diào)整與約束,以此來將兩個(gè)模塊布局布線分隔開。這樣在調(diào)整之后,可以根據(jù)FPGA幀地址排布規(guī)律,就可以得到scrubber以及DUT分別對(duì)應(yīng)的起始幀地址,之后可根據(jù)需要,將刷新的幀地址切換到DUT或者scrubber模塊。
綜上所述,整個(gè)內(nèi)部刷新系統(tǒng)的工作流程如圖7所示。首先對(duì)系統(tǒng)進(jìn)行初始化配置,之后將刷新使能信號(hào)拉高,進(jìn)入刷新狀態(tài),然后地址產(chǎn)生模塊開始產(chǎn)生幀地址。ICAP接口控制模塊根據(jù)幀地址回讀對(duì)應(yīng)的配置數(shù)據(jù),將幀地址以及讀寫命令序列發(fā)送至ICAP接口。糾錯(cuò)模塊對(duì)回讀到的配置數(shù)據(jù)進(jìn)行檢查,若正確則繼續(xù)判斷scrubber是否出錯(cuò),繼而繼續(xù)產(chǎn)生下一幀地址;若3位以下發(fā)生翻轉(zhuǎn),糾錯(cuò)模塊糾錯(cuò)后再寫入對(duì)應(yīng)的幀地址,然后開始下一幀讀寫。如果發(fā)生3位以上的翻轉(zhuǎn),糾錯(cuò)模塊無法恢復(fù),那么系統(tǒng)要停止工作,重新對(duì)系統(tǒng)進(jìn)行初始化。在以上過程中,若scrubber冗余模塊發(fā)生錯(cuò)誤,則將幀地址切換到scrubber的初始地址,系統(tǒng)進(jìn)入到對(duì)scrubber進(jìn)行刷新的狀態(tài)。
圖7 系統(tǒng)工作流程
本文在xilinx公司推出的kintex-7系列的XC7K325TFFG676芯片上,對(duì)上述提出的系統(tǒng)進(jìn)行實(shí)驗(yàn)仿真。DUT模塊首先選擇為常用的4位加法器,除此外,為了更貼合實(shí)際情況,還從IWSL2005基準(zhǔn)電路中選取3種不同的電路用作與DUT模塊,這3個(gè)電路分別代表著不同的應(yīng)用領(lǐng)域,其中一個(gè)為組合邏輯較多的算術(shù)電路(FPU),另一個(gè)為時(shí)序邏輯較多的控制電路(MEM_CTRL),最后一個(gè)既包含算術(shù)電路又包括控制電路(USB_FUNC)。以4輸入加法器作為DUT模塊為例,進(jìn)行邏輯綜合,圖8中(a)為由vivado工具自動(dòng)布局布線后的結(jié)果,圖中紅色部分是DUT模塊布局布線所在區(qū)域,從中可以看出DUT與scrubber模塊沒有很明顯地被分割開。圖8(b)為使用pblock工具調(diào)整后的布局布線圖,從中可以看出經(jīng)過調(diào)整布局后,可以將DUT與其他模塊分布位置分割開。同時(shí)可以得到DUT分布是在FPGA的下半部分,第2行30列的第0幀到第42幀。那么根據(jù)FPGA幀地址排列規(guī)則以及DUT所在的行和列位置信息,可以得到DUT的有效幀地址是0x110f00-0x110f2a。由此可以很方便地對(duì)DUT幀的起始位置進(jìn)行定位。
圖8 布局布線
對(duì)以上4種DUT電路設(shè)置為4個(gè)不同的工程,分別進(jìn)行邏輯綜合。表1顯示了4種DUT自身所消耗的FPGA內(nèi)部資源,以及在這4種DUT電路下,傳統(tǒng)內(nèi)部刷新系統(tǒng)整體的資源消耗情況和本文所提出的改進(jìn)后的內(nèi)部刷新系統(tǒng)所消耗的資源情況。從表中可以看出,改進(jìn)后的系統(tǒng),由于對(duì)scrubber增加三模冗余,故而導(dǎo)致資源占用率相對(duì)傳統(tǒng)內(nèi)部刷新有所增加。即便如此,改進(jìn)后的內(nèi)部刷新系統(tǒng)所占用的資源仍然很低。在系統(tǒng)頻率為100 MHz時(shí),本文所設(shè)計(jì)的內(nèi)部刷新系統(tǒng),回讀一幀需要114個(gè)時(shí)鐘周期,也就是需要1.14 μs,配置一幀數(shù)據(jù)需要110個(gè)時(shí)鐘周期,即1.1 μs。
表1 資源消耗統(tǒng)計(jì)
本文采用故障注入的方式來模擬單粒子效應(yīng),以此來驗(yàn)證系統(tǒng)的抗輻射性能。針對(duì)以上4組DUT電路,將每組DUT所在的系統(tǒng)例化兩次,其中一份作為對(duì)照組,另一份為實(shí)驗(yàn)組,并同時(shí)施加相同的激勵(lì)。采用線性反饋移位寄存器(linear feedback shift register,LFSR)生成隨機(jī)故障注入幀地址,對(duì)實(shí)驗(yàn)組進(jìn)行故障注入。在故障注入過程種,如果觀察到實(shí)驗(yàn)組DUT的輸出與對(duì)照組不一致,那么此時(shí)已經(jīng)注入的故障數(shù)目即為該系統(tǒng)最大可以接受的故障注入數(shù)目。
本文設(shè)計(jì)了3種刷新系統(tǒng)方案來綜合比對(duì),來說明改進(jìn)后刷新系統(tǒng)抗輻射性能。
(1)對(duì)傳統(tǒng)內(nèi)部刷新系統(tǒng)進(jìn)行故障注入,以得到其最大故障注入數(shù)目;
(2)將傳統(tǒng)內(nèi)部刷新系統(tǒng)的刷新電路部分增加三模冗余處理后,對(duì)該系統(tǒng)進(jìn)行故障注入,得到其最大故障注入數(shù)目;
(3)對(duì)本文所設(shè)計(jì)的內(nèi)部刷新系統(tǒng)進(jìn)行故障注入,得到最大故障注入數(shù)目。
為了使實(shí)驗(yàn)數(shù)據(jù)更準(zhǔn)確,減少偶發(fā)性造成的影響,重復(fù)對(duì)每種方案進(jìn)行100次故障注入實(shí)驗(yàn)。圖9顯示了方案(3)在DUT電路為4位加法器時(shí),其中一次回讀到的配置數(shù)據(jù),圖9(a)為故障注入前的數(shù)據(jù),圖9(b)為故障注入后的數(shù)據(jù),紅色框?yàn)?位單粒子翻轉(zhuǎn),藍(lán)色框?yàn)?位,黃色框里的為3位單粒子翻轉(zhuǎn),圖9(c)為經(jīng)過糾錯(cuò)刷新后的數(shù)據(jù),從中可以看出該系統(tǒng)可以實(shí)現(xiàn)對(duì)3位及3位以下的翻轉(zhuǎn)實(shí)現(xiàn)糾錯(cuò)。
圖9 回讀數(shù)據(jù)
100次故障注入實(shí)驗(yàn)后,得到的各系統(tǒng)最大故障注入數(shù)目如表2所示。從表中可以得到,在4種DUT電路平均下,方案(2)最大故障注入數(shù)目約為方案(1)的1.93倍,這說明了增加三模冗余防護(hù),可在一定程度上提高系統(tǒng)的容錯(cuò)率。方案(3)也就是本文所提出的系統(tǒng)最大故障注入數(shù)目是方案(1)的2.56倍,是方案(2)的1.34倍,這表明采用糾錯(cuò)能力更強(qiáng)的糾錯(cuò)碼可以進(jìn)一步提升系統(tǒng)的容錯(cuò)能力。圖10為表2對(duì)應(yīng)的最大故障注入數(shù)目統(tǒng)計(jì)圖,從圖中也可以直觀地看出方案(3)的容錯(cuò)率最高,方案(1)最低。綜上,本文所提出的內(nèi)部刷新系統(tǒng)方案相較于之前的傳統(tǒng)內(nèi)部刷新系統(tǒng),其容錯(cuò)率得到了一定的提升。
表2 最大故障注入數(shù)目統(tǒng)計(jì)
圖10 最大故障注入數(shù)目統(tǒng)計(jì)圖
本文在經(jīng)過對(duì)抗單粒子翻轉(zhuǎn)問題研究后,并結(jié)合國(guó)內(nèi)外單粒子翻轉(zhuǎn)問題進(jìn)行的研究,提出對(duì)傳統(tǒng)的內(nèi)部刷新系統(tǒng)進(jìn)行改進(jìn)。具體改進(jìn)措施為首先將刷新模塊與DUT分布式布局,方便確定兩個(gè)模塊對(duì)應(yīng)的幀地址。之后對(duì)刷新控制模塊增加三模冗余,提高刷新控制模塊的容錯(cuò)率,并且在三模冗余處增加錯(cuò)誤判決器,可以對(duì)三模冗余的情況進(jìn)行實(shí)時(shí)檢查,如果任一冗余模塊發(fā)生單粒子翻轉(zhuǎn),則會(huì)立刻對(duì)刷新模塊進(jìn)行刷新,防止錯(cuò)誤累積,造成嚴(yán)重后果。除此外,還提出使用糾錯(cuò)能力更強(qiáng)的RM(2,5)碼來替代傳統(tǒng)的FRAME_ECC糾錯(cuò)碼,使得系統(tǒng)可以對(duì)3位及3位以下的翻轉(zhuǎn)進(jìn)行檢錯(cuò)和修正。通過對(duì)系統(tǒng)可靠性進(jìn)行分析,可以得出改進(jìn)后的系統(tǒng)可靠性大幅增加。最后通過故障注入實(shí)驗(yàn),證實(shí)了改進(jìn)后的系統(tǒng)對(duì)故障的容錯(cuò)率約是傳統(tǒng)內(nèi)部刷新系統(tǒng)的2.56倍。綜上,改進(jìn)的刷新系統(tǒng)可靠性以及容錯(cuò)率都大幅增加,為衛(wèi)星上存在的單粒子翻轉(zhuǎn)問題的解決提供了參考設(shè)計(jì)。隨著電路逐漸復(fù)雜集中,同時(shí)出現(xiàn)多個(gè)粒子被打翻的可能性越來越大,所以對(duì)糾錯(cuò)碼糾錯(cuò)能力也提出了更高的要求。在之后的研究中,可以對(duì)糾錯(cuò)碼進(jìn)行進(jìn)一步的改進(jìn)。