0 引言
隨著航天技術(shù)的發(fā)展,空間任務(wù)日益復雜化、多樣化,未來航天系統(tǒng)對處理器的性能要求越來越高。在一些航天設(shè)備如星載 ATP 等系統(tǒng)的電子模塊設(shè)計中,基于 SRAM 的現(xiàn)場可編程門陣列(FPGA)得到了日益廣泛的應(yīng)用??臻g環(huán)境中的電子系統(tǒng)設(shè)計,不僅要滿足高性能,而且其數(shù)據(jù)處理、傳輸和控制的準確性和可靠性也必須得到保證。對于機載、星載、空間武器和其他空間應(yīng)用電子系統(tǒng),往往暴露在形形色色的電磁輻射環(huán)境中,如α粒子、宇宙射線、外太空強輻射等等惡劣環(huán)境,加之一些電子系統(tǒng)工作在地面的高電磁輻射環(huán)境中,這些輻射環(huán)境中充滿了各種高能粒子,高能粒子撞擊工作中的電子器件會引發(fā)輻射效應(yīng),如單粒子翻轉(zhuǎn)(SEU)等,并導致器件發(fā)生故障,由輻射效應(yīng)引起的軟錯誤是導致空間環(huán)境中電子系統(tǒng)失效的重要原因之一[1]。
在提高系統(tǒng)可靠性與安全性方面,避錯與容錯技術(shù)是常用的兩種關(guān)鍵技術(shù)。微電子抗輻射加固技術(shù)[2],通過對材料選取、工藝結(jié)構(gòu)設(shè)計等方面進行加固設(shè)計,在物理層消除導致?lián)p傷的各類寄生參數(shù), 能有效提高電子器件的抗輻射能力。但是僅在物理層上對系統(tǒng)進行故障防護不能滿足惡劣環(huán)境中的系統(tǒng)可靠性要求,還需要從電路設(shè)計方面對系統(tǒng)功能進行保護。運用錯誤校正碼(ECC)技術(shù)[3],在數(shù)據(jù)包的后端添加額外的校驗數(shù)據(jù)位,來實現(xiàn)讀取 / 寫入數(shù)據(jù)的準確性,能在一定程度上對存儲器進行檢錯和糾錯。容錯設(shè)計技術(shù),如采用冗余設(shè)計來“屏蔽”或“隔離”故障,如信息冗余[4]、硬件冗余[5]等,進而在一定時期內(nèi)將故障的影響掩蓋起來,使發(fā)生故障的電子系統(tǒng)在一定時期內(nèi)仍能正常工作,但這種方式并未排除故障,隨著故障的累積和疊加,系統(tǒng)仍然可能失效,所以賦予系統(tǒng)故障自修復能力能有效減少故障累積,提高系統(tǒng)的可靠性。
本文從故障容錯和故障自修復角度對系統(tǒng)進行芯片級的可靠性設(shè)計,提出了一種基于 SRAM 型 FPGA 的實時容錯自修復系統(tǒng)結(jié)構(gòu),并將該設(shè)計結(jié)構(gòu)在 Xilinx Virtex-6 FPGA 上進行了設(shè)計驗證。
1 基于動態(tài)部分重構(gòu)的模塊修復
FPGA 的配置可分為靜態(tài)配置和動態(tài)配置,靜態(tài)配置通常對整個 FPGA 模塊進行重新配置,系統(tǒng)功能在配置過程時中斷,并在配置結(jié)束后改變系統(tǒng)功能。動態(tài)配置,又稱為動態(tài)部分重構(gòu),能夠在不干擾 FPGA 內(nèi)部其他模塊工作的同時動態(tài)地對部分區(qū)域的邏輯功能進行修改。其核心思想是將 FPGA 內(nèi)部的邏輯資源從物理布局上劃分為靜態(tài)區(qū)域和若干個動態(tài)區(qū)域。每個動態(tài)區(qū)域可以對應(yīng)有多個配置文件,以實現(xiàn)不同的功能,將這些配置文件事先存放在片外存儲器中。在系統(tǒng)運行的不同時刻,根據(jù)系統(tǒng)的實際需求加載不同的配置文件到同一個動態(tài)區(qū)域來實現(xiàn)相應(yīng)的邏輯功能。在某一動態(tài)區(qū)域進行功能切換時,不影響靜態(tài)區(qū)域和其他動態(tài)區(qū)域的邏輯功能,系統(tǒng)依然處于連續(xù)運行狀態(tài)。
動態(tài)部分重構(gòu)技術(shù)能對 FPGA 的部分資源實現(xiàn)分時復用,使芯片能夠在不同時刻實現(xiàn)不同的功能,提高了芯片資源的利用率,已廣泛應(yīng)用于工業(yè)系統(tǒng)設(shè)計中,如文獻[6]中結(jié)合動態(tài)部分重構(gòu)技術(shù)對工業(yè)傳感器數(shù)據(jù)采集系統(tǒng)進行設(shè)計,針對不同的傳感器切換不同的功能。該技術(shù)還可應(yīng)用于可重構(gòu)計算[7]、可進化硬件[8-9]、容錯設(shè)計[10-14]等方面。將動態(tài)部分重構(gòu)技術(shù)和冗余技術(shù)結(jié)合,即將冗余設(shè)計中各冗余模塊分別置于一動態(tài)區(qū)域中,在故障發(fā)生時通過動態(tài)重構(gòu)對故障模塊進行修復,可以避免故障的累積和疊加,在容錯的同時賦予系統(tǒng)故障自修復能力。
2 粗粒度和細粒度的三模冗余自修復結(jié)構(gòu)
2.1 粗粒度的三模冗余設(shè)計結(jié)構(gòu)
典型的模塊冗余技術(shù)——N 模冗余設(shè)計:將功能模塊復制為 N 份,N 個模塊具有相同的輸入,N 個模塊的輸出經(jīng)過多數(shù)表決器表決輸出。N 模冗余系統(tǒng)在工作過程中能同時容忍不超過半數(shù)的冗余模塊發(fā)生故障而不影響最終的系統(tǒng)輸出。隨著冗余模塊的數(shù)量增加,系統(tǒng)的容錯能力提高,但同時系統(tǒng)的硬件資源開銷和功耗增大,綜合考慮容錯能力和資源開銷,三模冗余(TMR)技術(shù)具有最高的性能表現(xiàn)。
FPGA 的系統(tǒng)通??梢苑譃槎鄠€功能模塊,粗粒度的三模冗余設(shè)計結(jié)構(gòu)以整個功能模塊為單位進行冗余設(shè)計,如圖 1 所示,即將整個功能模塊作為一個冗余單位,將整個功能模塊復制三份,將每個功能單元模塊 FU1~FU3 配置到單獨的部分重構(gòu)模塊(PRM)中,使得每個冗余模塊都可以獨立被修復。表決器選擇多數(shù)的輸入結(jié)果進行輸出。在粗粒度的三模冗余設(shè)計結(jié)構(gòu)中,只要兩個冗余模塊的輸出結(jié)果正確,就能保證整個模塊輸出正常,當其中任意模塊發(fā)生故障時,通過系統(tǒng)的故障檢測機制可進行故障定位,隔離故障區(qū)域并進行自修復操作。
2.2 細粒度的三模冗余設(shè)計結(jié)構(gòu)
采用粗粒度設(shè)計結(jié)構(gòu)能有效提高系統(tǒng)的可靠度,但其仍然存在一些不足,一是當多數(shù)表決器出現(xiàn)故障時整個自修復結(jié)構(gòu)本身不可靠;二是由于模塊粒度較大,一些不能導致模塊功能失效的隱性故障持續(xù)累積,容易導致多個模塊同時故障,使得防護結(jié)構(gòu)失效。本文中細粒度的三模冗余設(shè)計結(jié)構(gòu)能有效減少故障累積,該設(shè)計結(jié)構(gòu)將一功能模塊拆分為若干個獨立的時序元件和組合邏輯部分,本文將該設(shè)計結(jié)構(gòu)利用圖形化表示來說明,將功能單元模塊中的組合邏輯表示為 CG,時序元件表示為 SE,則利用有向圖表示方法可以將圖 2(a)電路表示為圖 2(b)。
細粒度的三模冗余容錯自修復結(jié)構(gòu)建立在有向圖表示方法基礎(chǔ)之上,其核心思想是,將電路分割為邏輯電路和時序電路,在時序電路輸出插入多數(shù)表決器,然后再對原始電路進行三模冗余設(shè)計,使得此自修復結(jié)構(gòu)具有三個表決器,因此加強了此結(jié)構(gòu)的故障容錯能力,同時減輕了時序電路引起的錯誤累積,可以成功避免域交叉錯誤的出現(xiàn)。圖 2(a)表示的原始電路,利用有向圖表示方法將原始電路分割開來如圖 2(b)所示,利用 TMR 三模冗余技術(shù)將其容錯化如圖 2(c)所示。MV 表示多數(shù)表決器(Multiple Voter)在電路時序元件輸出之后插入,利用其三模冗余結(jié)構(gòu),增強了電路容錯能力。當 D1 模塊的組合、時序電路以及表決器出現(xiàn)故障時,D2 模塊和 D3 模塊通過多數(shù)表決器可以檢測到此類故障,并經(jīng)中斷喚醒處理器進行部分動態(tài)重構(gòu)處理,使得 D1 部分重構(gòu)區(qū)域得以自修復。
細粒度的三模冗余容錯自修復結(jié)構(gòu)同時降低了時序電路引起的錯誤累積的概率,可以成功避免域交叉錯誤的產(chǎn)生。當 D1 模塊的 SE2 電路和 D3 模塊的 CG4 電路同時出現(xiàn)故障的時候,由于在時序電路的輸出端用表決器成功地將 SE2 故障進行檢測和隔離,不會傳遞積累影響下一級的 CG4 錯誤,因此可以成功避免域交叉錯誤的產(chǎn)生。
2.3 可靠度對比
功能模塊在 FPGA 內(nèi)部的實現(xiàn)可以用邏輯資源來表示,如查找表(LUTs)、觸發(fā)器(Flip-Flops)、塊存儲器(BRAM)等。而各邏輯資源的連接和使用通過比特流文件配置來實現(xiàn)。比特流文件由若干個配置幀(frame)組成,配置幀又包含若干個表示配置信息的比特位。在輻射環(huán)境中,當 FPGA 中的電路模塊發(fā)生單粒子翻轉(zhuǎn)效應(yīng)時,并不是模塊任意比特位發(fā)生翻轉(zhuǎn)就會導致模塊功能失效,該模塊功能往往由一些關(guān)鍵比特位所決定??紤]該粗粒度的三模冗余設(shè)計結(jié)構(gòu)的容錯能力,討論馬爾科夫模型下的三模冗余結(jié)構(gòu)[15],假設(shè)功能模塊在時間 t 內(nèi)功能正常的可靠度隨著時間的推移呈指數(shù)遞減,其可靠度可以表示為:
其中λm 表示功能模塊 m 的故障率,其由比特位在單位時間內(nèi)的翻轉(zhuǎn)速率和模塊對應(yīng)的關(guān)鍵比特位數(shù)量所決定。對于一個三模冗余系統(tǒng)來說只有當兩個或者兩個以上的模塊發(fā)生錯誤時系統(tǒng)防護功能才會失效,假設(shè)三模冗余系統(tǒng)表決邏輯功能正常,那么對于該粗粒度的三模冗余設(shè)計結(jié)構(gòu)其可靠度可以表示為:
將提出的細粒度的三模冗余結(jié)構(gòu)和粗粒度的三模冗余結(jié)構(gòu)的可靠度進行比較,其可靠度示意圖如圖 3 所示。細粒度的三模冗余結(jié)構(gòu)容錯可靠度相對于粗粒度的可靠度有顯著的提高,但同時細粒度的三模冗余結(jié)構(gòu)會引入額外表決器和故障檢測邏輯,導致額外資源開銷的增加。細粒度的三模冗余結(jié)構(gòu)更適用于對故障率高的電路模塊進行防護。
3 實時故障自修復系統(tǒng)設(shè)計
3.1 實時故障自修復系統(tǒng)整體設(shè)計結(jié)構(gòu)
圖 4 給出了一種基于 Xilinx FPGA 實現(xiàn)的故障自修復系統(tǒng)整體結(jié)構(gòu)設(shè)計方案。整個系統(tǒng)實現(xiàn)基于 MicroBlaze 軟核的片上微處理器系統(tǒng),主要劃分為兩個部分:靜態(tài)區(qū)域和動態(tài)部分重構(gòu)區(qū)域。靜態(tài)區(qū)域主要包括:軟核 MicroBlaze、串口控制器、Flash 控制器等,這部分區(qū)域包括了整個關(guān)鍵處理模塊不適于動態(tài)重構(gòu)的模塊,主要負責運行低優(yōu)先級程序和檢測動態(tài)重構(gòu)區(qū)域的正常運行。動態(tài)部分重構(gòu)區(qū)域是整個電子系統(tǒng)自修復的基礎(chǔ),所有的自修復操作都在其他模塊監(jiān)測、控制下有序地進行,保證整個電子系統(tǒng)不間斷正常的工作,其中各個冗余模塊的標準配置文件存放于片外 Flash 中。當系統(tǒng)收到重構(gòu)請求時,由 Flash 控制器讀取片外存儲器中對應(yīng)模塊的比特流文件并通過內(nèi)部配置訪問端口(ICAP)寫入重構(gòu)區(qū)域。動態(tài)部分重構(gòu)區(qū)域結(jié)合上文提出的容錯方案進行容錯設(shè)計,同時 MicroBlaze 負責控制和監(jiān)測每個動態(tài)重構(gòu)單元的工作情況:比如當設(shè)計動態(tài)重構(gòu)單元為三模冗余故障容錯模塊時,當此模塊內(nèi)部故障檢測單元檢測到發(fā)生故障時,通過中斷的形式將信息發(fā)送到 MicroBlaze 中,MicroBlaze 讀取此模塊的狀態(tài)寄存器以判明故障類型和區(qū)域,根據(jù)應(yīng)用場合不同選擇不同的故障自修復策略將此模塊進行有序的自重構(gòu),實現(xiàn)故障自修復的同時并不影響系統(tǒng)正常運行。
3.2 內(nèi)嵌式故障檢測結(jié)構(gòu)
采用一內(nèi)嵌式故障檢測結(jié)構(gòu)對冗余模塊進行故障檢測,該方案將故障檢測單元嵌入到冗余模塊中。圖 5(a)所示為三模冗余容錯自修復結(jié)構(gòu)中以邏輯門描述的故障檢測單元示意圖,該故障檢測單元由多數(shù)表決器和異或非門構(gòu)成,將多數(shù)表決器的輸出和檢測的冗余模塊的輸出接到異或非門的輸入端,多數(shù)表決器的輸出作為錯誤標志信號 FLAG。當檢測的冗余模塊的輸出和表決器的輸出相同,則異或門輸出為邏輯 1,表示該檢測的冗余模塊無故障發(fā)生,若異或門輸出邏輯為 0,則表明檢測的冗余模塊發(fā)生故障或故障檢測單元自身發(fā)生故障。具有該故障檢測單元的三模冗余結(jié)構(gòu)如圖 5(b)所示。
功能模塊在 FPGA 內(nèi)部的實現(xiàn)可以用邏輯資源來表示,如查找表(LUTs)、觸發(fā)器(Flip-Flops)、塊存儲器(BRAM)等。而各邏輯資源的連接和使用通過比特流文件(Bitstream)配置來實現(xiàn)。比特流文件由若干個配置幀(frame)組成,功能模塊大小也可通過配置幀的數(shù)量來表示。
該檢測單元從細粒度的角度對電路輸出的每一位進行比較,也就是說對于一個輸出信號為 N 位的功能模塊來說,采用該故障檢測單元會對每一個冗余模塊會產(chǎn)生 N 個故障標志信號。然而對于一個冗余模塊來說只需要一個標志信號來表明該模塊是否發(fā)生故障。對此提出了一種將標志信號進行融合的邏輯結(jié)構(gòu),該融合邏輯結(jié)構(gòu)采用 FPGA 片內(nèi)進位鏈邏輯來實現(xiàn)。如圖 6 所示,以 4 位的輸出信號為例,故障檢測單元對 TR1 模塊的輸出位進行檢測,將故障標志信號分別接入進位鏈的 C0~C3 端口。進位鏈 CIN 端口輸入邏輯 1,當無故障發(fā)生時進位鏈輸出邏輯 1,當其中一位或者多位錯誤發(fā)生時,進位鏈中的二選一選擇器選擇故障標志信號進行傳遞,進位鏈輸出邏輯 0,表示 TR1 模塊發(fā)生故障。對于模塊輸出信號位數(shù)少于 4 位的情況,可以將進位鏈空閑的輸入端輸入邏輯 1 即可。對于模塊輸出信號位數(shù)大于 4 位的情況,可以將前一進位鏈的標志輸出 FLAG 接入后一進位鏈的 CIN 輸入端,將進位鏈串行連接。
4 實驗設(shè)計與分析
本節(jié)中將上文提出的故障自修系統(tǒng)在 Xilinx XC6VLX240T-1FF1156 FPGA 上進行設(shè)計實現(xiàn),實驗中靜態(tài)區(qū)域包含了一基于 MicroBlaze 核的片上微處理器系統(tǒng),該微處理器系統(tǒng)主要負責與上位機進行交互、響應(yīng)重構(gòu)請求、控制片外存儲器讀取比特文件數(shù)據(jù)和控制內(nèi)部配置訪問端口(ICAP)對重構(gòu)區(qū)域進行重配置等任務(wù)。動態(tài)區(qū)域中將 ITC99 benchmark 電路中 8 個不同粒度的標準電路進行冗余設(shè)計,以分析不同粒度模塊的故障自修復時間。
4.1 FPGA 系統(tǒng)設(shè)計流程
實驗中對系統(tǒng)進行設(shè)計實現(xiàn)采用的是基于 Xilinx ISE 開發(fā)工具的設(shè)計流程,設(shè)計流程如圖 7 所示。在 ISE 頂層設(shè)計規(guī)劃中對系統(tǒng)各模塊進行劃分,定義系統(tǒng)中的各靜態(tài)模塊和動態(tài)模塊,并對動態(tài)模塊進行冗余保護設(shè)計。片上微處理器系統(tǒng)在 Xilinx 的 XPS 設(shè)計工具中進行設(shè)計搭建,并在 SDK 設(shè)計工具中對微處理器系統(tǒng)進行軟件功能編譯,PlanAhead 設(shè)計工具可通過圖形界面(GUI)對 FPGA 進行早期分析和布局規(guī)劃功能,施加物理約束,分析布線和時序的結(jié)果。實驗中各動態(tài)模塊的區(qū)域劃分在 PlanAhead 中進行設(shè)計。PlanAhead 中比特流文件生成完成后,需要進行軟硬件協(xié)同處理,即將 XPS 生成的塊存儲器映射文件(*.bmm)、SDK 生成的可執(zhí)行文件(*.elf)和 PlanAhead 生成的全局比特流文件合為一個新的比特流文件,借助 Xilinx 命令行工具 ISE Design Suite Command Prompt,通過命令指令合成最終的比特流文件。
4.2 實驗結(jié)果分析
實驗中各動態(tài)模塊的區(qū)域劃分如圖 8 所示,動態(tài)區(qū)域內(nèi)的邏輯資源能夠滿足各模塊功能實現(xiàn)。各動態(tài)模塊的資源開銷如表 1 所示,由實驗結(jié)果可知,模塊粒度越小其冗余設(shè)計中表決器和故障檢測結(jié)構(gòu)所占的資源比例則越大,即系統(tǒng)模塊粒度劃分越小、重構(gòu)區(qū)域劃分越多,則容錯自修復設(shè)計所帶來的額外資源開銷越大。
各動態(tài)模塊重構(gòu)時間花費表 2 所示。實驗中所采取的故障注入方式同樣采取動態(tài)重構(gòu)方式,即通過 FPGA 的內(nèi)部配置訪問通道(ICAP)動態(tài)地對各模塊進行錯誤配置來實現(xiàn)。實驗中故障檢測方案采用上文所提出的內(nèi)嵌式故障檢測結(jié)構(gòu),其故障檢測延遲與信號在進位鏈中的傳播延遲相關(guān),即和進位鏈的串聯(lián)個數(shù)相關(guān),而進位鏈中信號傳播延遲為納秒級,遠小于模塊重構(gòu)時間,可認為模塊的自修復時間近似于模塊的重構(gòu)時間。由實驗結(jié)果可看出模塊重構(gòu)時間與模塊占用資源數(shù)和模塊重構(gòu)區(qū)域大小成正比,即模塊占用資源數(shù)越多,其劃分的最小重構(gòu)區(qū)域則越大,模塊重構(gòu)時間花費越大。而同時,功能模塊劃分越小,其進行冗余設(shè)計時所帶來的額外資源開銷比例則越大。故在系統(tǒng)設(shè)計時,需要綜合考慮資源分配情況和故障修復時間要求,合理地進行模塊粒度劃分,實現(xiàn)粗粒度和細粒度的靈活組合。
5 結(jié)論
本文提出了一種基于 SRAM 型 FPGA 的實時容錯自修復系統(tǒng)結(jié)構(gòu)和設(shè)計方法。該設(shè)計方法將系統(tǒng)分為若干功能模塊,采用粗粒度三模冗余結(jié)構(gòu)和細粒度三模冗余結(jié)構(gòu)并結(jié)合動態(tài)重構(gòu)對系統(tǒng)進行容錯自修復設(shè)計,實驗結(jié)果表明該設(shè)計結(jié)構(gòu)下故障修復時間短,系統(tǒng)的可靠性得到有效提高。在系統(tǒng)設(shè)計時,可以綜合考慮資源分配情況和故障修復時間要求,合理進行模塊粒度劃分,實現(xiàn)粗粒度和細粒度的靈活組合。
評論
查看更多