張志洲, 李東陽
(國防科技大學(xué) 空天科學(xué)學(xué)院,長沙 410073)
大氣外層空間存在很強(qiáng)的自然輻射,主要來自各種宇宙射線和一些高能粒子(包括高能質(zhì)子、中子、粒子、重離子等)。高能粒子具有很高的能量,很難通過屏蔽來防護(hù)。特別是隨著微電子技術(shù)的發(fā)展,微電子器件體積小、質(zhì)量輕、功耗低的特點(diǎn)使其迅速在航天器中得到廣泛應(yīng)用,并且它的集成度越來越高,于是出現(xiàn)了單個(gè)高能帶電粒子造成航天器邏輯系統(tǒng)紊亂,導(dǎo)致航天器故障的單粒子效應(yīng)(Single Event Effect,SEE)[1-2]。在眾多的SEE中,對電路影響最大的,也是人們最為關(guān)注的分別是單粒子閂鎖效應(yīng)和單粒子翻轉(zhuǎn)效應(yīng)(Single Event Upset,SEU),其中又以SEU對星載RAM的影響最大[3-4]。
單粒子翻轉(zhuǎn)效應(yīng)是人們最早發(fā)現(xiàn)的單粒子效應(yīng),所造成的邏輯錯(cuò)誤不是永久的,屬于單粒子效應(yīng)中的一種軟性錯(cuò)誤,通過系統(tǒng)復(fù)位、重新加電或?qū)懭肟苫謴?fù)。其最主要的影響是使存儲器數(shù)據(jù)位翻轉(zhuǎn) (“1”變“0”,“0”變“1”)[2,5]。飛行記錄表明,單個(gè)高能粒子引發(fā)的單粒子翻轉(zhuǎn)導(dǎo)致大量飛行器發(fā)生故障,輕則引起衛(wèi)星各種數(shù)據(jù)錯(cuò)誤;重則導(dǎo)致衛(wèi)星執(zhí)行錯(cuò)誤指令、發(fā)生異?;蚬收?,甚至使衛(wèi)星處于災(zāi)難性局面之中。
1989年10月的太陽質(zhì)子事件期間,美國TDRS-1衛(wèi)星的RAM存儲器記錄到239次單粒子翻轉(zhuǎn)事件。“風(fēng)云一號B”氣象衛(wèi)星于1990年9月發(fā)射后,星上姿控計(jì)算機(jī)多次出現(xiàn)單粒子翻轉(zhuǎn),從而致使衛(wèi)星姿態(tài)失控、衛(wèi)星失效;美國MSTI和IRON9906衛(wèi)星分別于1993年和1997年發(fā)生嚴(yán)重單粒子效應(yīng)而提前結(jié)束壽命?!皩?shí)踐四號”探測衛(wèi)星平均每天測到3.4次單粒子翻轉(zhuǎn)事件[6-9]。
由于航天器設(shè)計(jì)要求電子器件的體積小、功耗低、存儲量大、運(yùn)行速度快,這就必然促使微電子器件的集成度提高,內(nèi)部的單元電路體積縮小,而每一次狀態(tài)改變所需的能量和電荷下降,其結(jié)果是抗單粒子效應(yīng)的能力下降。因此,隨著航天事業(yè)的發(fā)展和微電子器件集成度的提高,將會不斷出現(xiàn)新的單粒子效應(yīng)問題。在航天電子設(shè)計(jì)領(lǐng)域中,這已經(jīng)成為一個(gè)不能忽視的問題,必須提出有效的手段加以解決。
本文采用EDAC技術(shù)用于克服單粒子翻轉(zhuǎn)引起的航天電子系統(tǒng)故障,優(yōu)勢在于可以延長衛(wèi)星壽命,提高衛(wèi)星應(yīng)用能力,非常適合未來敏捷航天器的平臺需要。通過了解國內(nèi)外關(guān)于EDAC技術(shù)方面的研究現(xiàn)狀,本文提出了星載機(jī)EDAC模擬系統(tǒng)設(shè)計(jì)方案,給出星載機(jī)EDAC模擬系統(tǒng)硬件電路設(shè)計(jì),完成星載機(jī)EDAC模擬系統(tǒng)軟件設(shè)計(jì),最后進(jìn)行演示驗(yàn)證。
錯(cuò)誤檢測與糾正(Error Detection And Correction,EDAC)技術(shù)是一種差錯(cuò)控制技術(shù),也稱作糾錯(cuò)編碼、數(shù)據(jù)校驗(yàn)碼。它是一種具有發(fā)現(xiàn)某些錯(cuò)誤和自動改錯(cuò)能力的數(shù)據(jù)編碼方法,起初應(yīng)用于數(shù)字通信系統(tǒng)中用以提高數(shù)據(jù)傳輸?shù)目煽啃?,現(xiàn)在也應(yīng)用于星載處理器中用以提高星載RAM存儲數(shù)據(jù)的可靠性,防止RAM內(nèi)部因單粒子翻轉(zhuǎn)效應(yīng)引發(fā)的錯(cuò)誤。其工作原理是首先對要存儲到RAM中的數(shù)據(jù)進(jìn)行編碼,即在原始數(shù)據(jù)中以一定的規(guī)則加入不同方式的冗余碼,然后存儲到RAM內(nèi)。在對數(shù)據(jù)進(jìn)行讀取時(shí),依靠多余的冗余碼來發(fā)現(xiàn)或糾正數(shù)據(jù)的錯(cuò)誤。
目前,國內(nèi)外航天界對存儲器的EDAC實(shí)現(xiàn)已經(jīng)很少采用EDAC專用芯片,而一般采用以下兩種方式:①將EDAC功能直接集成在航天用CPU芯片內(nèi);②使用沒有集成EDAC功能的CPU,采用FPGA或其它器件實(shí)現(xiàn)EDAC功能[10-16]。
本文設(shè)計(jì)一種EDAC系統(tǒng),可模擬因單粒子翻轉(zhuǎn)引起的翻轉(zhuǎn)故障,并可能利用EDAC技術(shù)排除故障。一般地,EDAC過程實(shí)現(xiàn)方案大致可分為硬件和軟件兩種方案。硬件方案是通過硬件邏輯器件(分離元件、現(xiàn)場可編程邏輯器件)實(shí)現(xiàn);軟件方案是在處理器內(nèi)部,通過EDAC編碼和解碼程序進(jìn)行處理。
本文采用軟件方案。在MCU和SRAM之間設(shè)計(jì)模擬邏輯模擬單粒子翻轉(zhuǎn)故障,然后通過EDAC編碼程序檢查并糾正錯(cuò)誤,其結(jié)構(gòu)框圖如圖1所示。設(shè)計(jì)步驟主要包括:①設(shè)計(jì)帶有MCU、RS-232接口和擴(kuò)展RAM的模擬星載機(jī),并制板實(shí)現(xiàn);②串口接收數(shù)據(jù),進(jìn)行EDAC編碼后,寫入存儲器;③讀取存儲器數(shù)據(jù)時(shí)隨機(jī)注入錯(cuò)誤,星載計(jì)算機(jī)進(jìn)行EDAC處理,將錯(cuò)誤數(shù)據(jù)和糾錯(cuò)數(shù)據(jù)發(fā)送回PC機(jī)記錄。
圖1 星載機(jī)EDAC模擬系統(tǒng)方案
目前,絕大多數(shù)的高可靠微處理器中都采用了一定的EDAC技術(shù)。EDAC有多種編碼方式,不同的編碼方式有不同的檢錯(cuò)和糾錯(cuò)能力。例如奇偶校驗(yàn)碼只能檢測出一個(gè)碼字中的奇數(shù)位錯(cuò)誤,但是不能定位錯(cuò)誤更不能糾正錯(cuò)誤。其他的,如漢明碼可以糾正一個(gè)碼字中任何1位錯(cuò)誤,檢測出兩位錯(cuò)誤,但是對于多位錯(cuò)誤不具有任何的檢錯(cuò)和糾錯(cuò)能力。當(dāng)然,還有許多其他的編碼方式,可以檢測和糾正一個(gè)碼字中的多位錯(cuò)誤,但是它們的算法往往更為復(fù)雜,增加了編碼器和譯碼器的實(shí)現(xiàn)難度,增加了電路面積開銷,而且關(guān)鍵路徑中的延時(shí)也會變得更大。
漢明碼[9,12,16]有多種編碼方式,如果只要求糾錯(cuò)1位錯(cuò)誤,那么校驗(yàn)位K和數(shù)據(jù)位N之間的對應(yīng)關(guān)系如表1所示。
表1 校驗(yàn)位K和數(shù)據(jù)位N之間的對應(yīng)關(guān)系表
數(shù)據(jù)存儲時(shí)常見的編碼方式為(7,4),這里闡述漢明碼(7,4)編碼的規(guī)則。
假設(shè)漢明碼共m位(HmHm-1…H2H1),包括N位數(shù)據(jù)位(DNDN-1…D1)和K位校驗(yàn)位(PKPK-1…P1)。
規(guī)則1每個(gè)校驗(yàn)位Pi在漢明碼中被分在位號2i-1的位置,其余為數(shù)據(jù)位,并從低到高依次排列。
以(7,4)為例,3個(gè)校驗(yàn)位分別對應(yīng)漢明碼的位號為1、2、4。排列順序?yàn)镈4D3D2P3D1P2P1。
規(guī)則2每1位校驗(yàn)碼Hi由多個(gè)校驗(yàn)位校驗(yàn),其關(guān)系為被校驗(yàn)的每1位位號要等于校驗(yàn)它的校驗(yàn)位的位號之和。
(7,4)編碼的7位漢明碼如表2所示。
表2 (7,4)編碼的7位漢明碼表
據(jù)此,可以求出由各有關(guān)數(shù)據(jù)位形成Pi值的偶校驗(yàn)結(jié)果:
P1=D1⊕D2⊕D4
P2=D1⊕D2⊕D4
P3=D2⊕D3⊕D4
根據(jù)如下關(guān)系對漢明碼進(jìn)行偶校驗(yàn):
S1=P1⊕D1⊕D2⊕D4
S2=P2⊕D1⊕D2⊕D4
S3=P3⊕D2⊕D3⊕D4
記S=S3∶S1為伴隨向量。根據(jù)S3∶S1中“1”的數(shù)量和位置可以反映漢明碼的出錯(cuò)情況。
若在傳輸過程中只有1位出錯(cuò),可以得出錯(cuò)誤位與伴隨向量的對應(yīng)關(guān)系(即漢明碼譯碼表),如表3所示。
表3 錯(cuò)誤位與伴隨向量的對應(yīng)關(guān)系表
基于漢明碼的EDAC技術(shù)的處理流程為:
(1) 編碼。根據(jù)數(shù)據(jù)位(D)計(jì)算校驗(yàn)位(P)形成漢明編碼(H),將編碼H存儲到RAM中。
(2) 解碼。從RAM中讀出漢明編碼(R),計(jì)算伴隨向量(S),根據(jù)漢明碼譯碼表確定錯(cuò)誤位置,并進(jìn)行糾正。
(3) 錯(cuò)誤處理。如果發(fā)現(xiàn)1位錯(cuò)誤,則進(jìn)行數(shù)據(jù)回寫。如果發(fā)現(xiàn)超過1位錯(cuò)誤,則告知CPU發(fā)生多位錯(cuò)誤。
在MCU和SRAM之間專門設(shè)計(jì)故障注入單元來模擬單粒子翻轉(zhuǎn)故障,然后通過EDAC編碼程序檢查并糾正錯(cuò)誤。
模擬步驟如圖2所示。①數(shù)據(jù)寫入時(shí),S1與S12相連,數(shù)據(jù)正確寫入RAM。②數(shù)據(jù)讀出時(shí),將S1與S11相連,當(dāng)S2與S22相連時(shí),Dn位始終為“0”,當(dāng)S2與S22相連時(shí),Dn位始終為“1”。當(dāng)Dn的狀態(tài)與RAM中實(shí)際狀態(tài)相反時(shí),就是1位SEU故障。
圖2 SEU模擬邏輯圖
EDAC編碼流程:①根據(jù)數(shù)據(jù)D計(jì)算校驗(yàn)碼P;②將數(shù)據(jù)寫入外部RAM的Addr地址;③將校驗(yàn)碼寫入外部RAM的Addr+1地址。
EDAC解碼流程:①從RAM的Addr地址讀回?cái)?shù)據(jù)位;②從RAM的Addr+1地址讀回校驗(yàn)位;③計(jì)算伴隨向量S;④根據(jù)S4、S3、S2、S1譯碼,確定錯(cuò)誤位置,并糾正數(shù)據(jù)位;⑤如果S不全為0且沒有對應(yīng)編碼,則錯(cuò)誤超過1位。
按照EDAC模擬系統(tǒng)的設(shè)計(jì)需求,給出系統(tǒng)硬件架構(gòu),其總體結(jié)構(gòu)圖如圖3所示。
圖3 星載機(jī)EDAC模擬系統(tǒng)硬件架構(gòu)
(1) 單片機(jī)最小系統(tǒng)。本系統(tǒng)采用Silicon Laboratories公司的C8051F040單片機(jī)。C8051單片機(jī)是功能最強(qiáng)大的8位單片機(jī)之一,具有飛行經(jīng)歷。
單片機(jī)最小系統(tǒng)如圖4所示。除了電源接口、復(fù)位接口、時(shí)鐘電路,該系統(tǒng)還提供了RAM接口、通信接口等。
圖4 單片機(jī)最小系統(tǒng)
(2) RAM存儲單元。RAM存儲單元包括15位地址線和8位數(shù)據(jù)線,如圖5所示。
圖5 RAM存儲單元
(3) 通信接口。通信接口將單片機(jī)的數(shù)據(jù)TX0_A發(fā)送至上位機(jī)Txd_PC,同時(shí)將上位機(jī)的命令Rxd_PC傳遞到單片機(jī)RX0_A(見圖6)。按照上述硬件系統(tǒng)的設(shè)計(jì)要求,完成PCB的布局、布線、加工和焊接。
該系統(tǒng)的軟件算法用于模擬EDAC過程,采用(7,4)編碼結(jié)構(gòu),能驗(yàn)證1位出錯(cuò)時(shí)的檢錯(cuò)與糾錯(cuò)過程。模擬過程如下:
(1) PC機(jī)通過串口發(fā)送一個(gè)0x00~0x0F之間的16進(jìn)制數(shù)給星載計(jì)算機(jī)(OBC);
圖6 通信接口
(2) OBC將數(shù)據(jù)進(jìn)行EDAC編碼后正常寫入RAM;
(3) 對外部故障注入單元的某1位強(qiáng)制為0或1,以此造成RAM數(shù)據(jù)存儲過程中的某1位錯(cuò)誤,模擬一次SEU事件;
(4) PC機(jī)發(fā)送命令控制OBC讀出RAM存儲的數(shù)據(jù);
(5) OBC對讀出的數(shù)據(jù)進(jìn)行EDAC校驗(yàn);
(6) OBC將讀出的原始數(shù)據(jù)、EDAC校驗(yàn)后數(shù)據(jù)、錯(cuò)誤數(shù)據(jù)編碼等通過串口發(fā)送給PC機(jī);
(7) 在PC機(jī)對處理結(jié)果進(jìn)行判斷。
涉及的軟件程序包括:
(1) 系統(tǒng)的初始化。主要包括禁止看門狗定時(shí)器、配置系統(tǒng)時(shí)鐘、端口配置、串口初始化、RAM模塊測試等。
(2) 接收數(shù)據(jù)。包括測試串口通信,等待串口發(fā)送數(shù)據(jù),接收數(shù)據(jù)后再發(fā)送回PC。
(3) 數(shù)據(jù)編碼。首先將十進(jìn)制數(shù)轉(zhuǎn)化為二進(jìn)制序列,然后根據(jù)漢明碼算法計(jì)算以上4位有效數(shù)據(jù)的校驗(yàn)碼P1、P2、P3,保存到 BinaryArray 數(shù)組中,即1、2、4位保存校驗(yàn)位,3、5、6、7保存數(shù)據(jù)位。將BinaryArray數(shù)組中保存的數(shù)據(jù)(Dx)和校驗(yàn)碼(Px)按照漢明碼的編碼方式進(jìn)行編碼后,保存到變量CodeData中,并將CodeData寫入RAM。
(4) 數(shù)據(jù)解碼。人工調(diào)整撥碼開關(guān),強(qiáng)制該位為0或1,使得某數(shù)據(jù)位出現(xiàn)編碼翻轉(zhuǎn)。然后讀取內(nèi)存data_buffer[0],保存到變量ReadData中。隨后根據(jù)漢明碼,使用數(shù)組BinaryArray計(jì)算校驗(yàn)碼S1、S2、S3。根據(jù)校驗(yàn)碼S1、S2、S3計(jì)算S。按照前文的錯(cuò)誤位與伴隨向量的對應(yīng)關(guān)系表,發(fā)現(xiàn)故障位ErrorBit,同時(shí)調(diào)整數(shù)據(jù)翻轉(zhuǎn)位ErrorBit的值,完成糾錯(cuò),并將糾錯(cuò)后的數(shù)據(jù)重新保存。
演示過程分為以下幾個(gè)步驟:
(1) 打開串口助手,設(shè)置串口號COM,波特率為600 b/s,校驗(yàn)位為NONE,數(shù)據(jù)位8,停止位1,設(shè)定16進(jìn)制發(fā)送,然后運(yùn)行程序。
(2) PC用串口助手手動發(fā)送00~0F的16進(jìn)制數(shù)。如在“發(fā)送的字符/數(shù)據(jù)”一欄中填入2個(gè)8位的16進(jìn)制數(shù),點(diǎn)擊發(fā)送。串口助手界面將顯示剛發(fā)送的數(shù)據(jù)SendData,解析出4為有效數(shù)據(jù)ValidData,給出編碼后的數(shù)據(jù)CodeData。
(3) 設(shè)置故障位,跳線、撥動撥碼開關(guān),并且再次點(diǎn)擊“手動發(fā)送”,編碼后的數(shù)據(jù)將寫入RAM。串口助手的界面將顯示出讀回的數(shù)據(jù)ReadData,標(biāo)示出錯(cuò)誤的位ErrorBit,并給出校正后的數(shù)據(jù)DecoData。
這里演示某數(shù)第0位檢錯(cuò)糾錯(cuò)過程。①發(fā)送16進(jìn)制數(shù)據(jù)“14”,界面顯示收到發(fā)送的數(shù)據(jù)SendData位“14”,解析出4為有效數(shù)據(jù)ValidData為“04”,給出編碼后的數(shù)據(jù)CodeData為“2A”。②設(shè)置跳線和撥動撥碼開關(guān),令數(shù)據(jù)第1位為“1”,并且再次點(diǎn)擊“手動發(fā)送”,編碼后的數(shù)據(jù)將寫入RAM。串口助手的界面將顯示出讀回的數(shù)據(jù)ReadData為“2B”,標(biāo)示出錯(cuò)誤的位ErrorBit為“1”,并給出校正后的數(shù)據(jù)DecoData為“04”。其中,強(qiáng)制設(shè)置數(shù)據(jù)第1位為1的故障注入單元如圖7所示。
整個(gè)演示過程串口助手界面的顯示結(jié)果如圖8所示。
上述演示結(jié)果表明,星載機(jī)檢錯(cuò)糾錯(cuò)模擬系統(tǒng)可以模擬MCU和RAM存儲單位間的1位數(shù)據(jù)翻轉(zhuǎn),并且可以自動糾正該位錯(cuò)誤。通過多次選擇不同的16進(jìn)制數(shù)據(jù),上述模擬系統(tǒng)都能很好的模擬1位數(shù)據(jù)位故障,并能正確地糾正出該位錯(cuò)誤。
圖7 數(shù)據(jù)位第1位強(qiáng)制置1
圖8 演示結(jié)果
本文設(shè)計(jì)了基于漢明碼的EDAC存儲器檢錯(cuò)糾錯(cuò)模擬系統(tǒng)。包括帶有MCU、RS-232接口和擴(kuò)展RAM的模擬星載機(jī),可以隨機(jī)模擬RAM存儲數(shù)據(jù)過程中的1位錯(cuò)誤,此時(shí)該系統(tǒng)讀取帶有1位故障位的存儲器數(shù)據(jù)時(shí)能進(jìn)行EDAC處理,將錯(cuò)誤數(shù)據(jù)和糾錯(cuò)數(shù)據(jù)發(fā)送回PC機(jī)記錄,自動完成檢錯(cuò)糾錯(cuò)過程。整個(gè)過程模擬了因單粒子效應(yīng)引起的翻轉(zhuǎn)故障,并運(yùn)用了EDAC技術(shù)進(jìn)行消除,達(dá)到了預(yù)期的設(shè)計(jì)效果。