基於SRAM型FPGA的實時容錯自修復系統設計方法

隨著航天技術的發展,空間任務日益複雜化、多樣化,未來航天系統對處理器的性能要求越來越高。在一些航天設備如星載ATP等系統的電子模塊設計中,基於SRAM的現場可編程門陣列(FPGA)得到了日益廣泛的應用。空間環境中的電子系統設計,不僅要滿足高性能,而且其數據處理、傳輸和控制的準確性和可靠性也必須得到保證。對於機載、星載、空間武器和其他空間應用電子系統,往往暴露在形形色色的電磁輻射環境中,如α粒子、宇宙射線、外太空強輻射等等惡劣環境,加之一些電子系統工作在地面的高電磁輻射環境中,這些輻射環境中充滿了各種高能粒子,高能粒子撞擊工作中的電子器件會引發輻射效應,如單粒子翻轉(SEU)等,並導致器件發生故障,由輻射效應引起的軟錯誤是導致空間環境中電子系統失效的重要原因之一[1]

在提高系統可靠性與安全性方面,避錯與容錯技術是常用的兩種關鍵技術。微電子抗輻射加固技術[2],通過對材料選取、工藝結構設計等方面進行加固設計,在物理層消除導致損傷的各類寄生參數, 能有效提高電子器件的抗輻射能力。但是僅在物理層上對系統進行故障防護不能滿足惡劣環境中的系統可靠性要求,還需要從電路設計方面對系統功能進行保護。運用錯誤校正碼(ECC)技術[3],在數據包的後端添加額外的校驗數據位,來實現讀取/寫入數據的準確性,能在一定程度上對存儲器進行檢錯和糾錯。容錯設計技術,如採用冗餘設計來“屏蔽”或“隔離”故障,如信息冗餘[4]、硬件冗餘[5]等,進而在一定時期內將故障的影響掩蓋起來,使發生故障的電子系統在一定時期內仍能正常工作,但這種方式並未排除故障,隨著故障的累積和疊加,系統仍然可能失效,所以賦予系統能力能有效減少故障累積,提高系統的可靠性。

本文從故障容錯和故障自修復角度對系統進行芯片級的可靠性設計,提出了一種基於SRAM型FPGA的實時容錯自修復系統結構,並將該設計結構在Xilinx Virtex-6 FPGA上進行了設計驗證。

1 基於動態部分重構的模塊修復

FPGA的配置可分為靜態配置和動態配置,靜態配置通常對整個FPGA模塊進行重新配置,系統功能在配置過程時中斷,並在配置結束後改變系統功能。動態配置,又稱為動態部分重構,能夠在不干擾FPGA內部其他模塊工作的同時動態地對部分區域的邏輯功能進行修改。其核心思想是將FPGA內部的邏輯資源從物理佈局上劃分為靜態區域和若干個動態區域。每個動態區域可以對應有多個配置文件,以實現不同的功能,將這些配置文件事先存放在片外存儲器中。在系統運行的不同時刻,根據系統的實際需求加載不同的配置文件到同一個動態區域來實現相應的邏輯功能。在某一動態區域進行功能切換時,不影響靜態區域和其他動態區域的邏輯功能,系統依然處於連續運行狀態。

動態部分重構技術能對FPGA的部分資源實現分時複用,使芯片能夠在不同時刻實現不同的功能,提高了芯片資源的利用率,已廣泛應用於工業系統設計中,如文獻[6]中結合動態部分重構技術對工業傳感器數據採集系統進行設計,針對不同的傳感器切換不同的功能。該技術還可應用於可重構計算[7]、可進化硬件[8-9]、容錯設計[10-14]等方面。將動態部分重構技術和冗餘技術結合,即將冗餘設計中各冗餘模塊分別置於一動態區域中,在故障發生時通過動態重構對故障模塊進行修復,可以避免故障的累積和疊加,在容錯的同時賦予系統故障自修復能力。

2 粗粒度和細粒度的三模冗餘自修復結構

2.1 粗粒度的三模冗餘設計結構

典型的模塊冗餘技術——N模冗餘設計:將功能模塊複製為N份,N個模塊具有相同的輸入,N個模塊的輸出經過多數表決器表決輸出。N模冗餘系統在工作過程中能同時容忍不超過半數的冗餘模塊發生故障而不影響最終的系統輸出。隨著冗餘模塊的數量增加,系統的容錯能力提高,但同時系統的硬件資源開銷和功耗增大,綜合考慮容錯能力和資源開銷,三模冗餘(TMR)技術具有最高的性能表現。

FPGA的系統通常可以分為多個功能模塊,粗粒度的三模冗餘設計結構以整個功能模塊為單位進行冗餘設計,如圖1所示,即將整個功能模塊作為一個冗餘單位,將整個功能模塊複製三份,將每個功能單元模塊FU1~FU3配置到單獨的部分重構模塊(PRM)中,使得每個冗餘模塊都可以獨立被修復。表決器選擇多數的輸入結果進行輸出。在粗粒度的三模冗餘設計結構中,只要兩個冗餘模塊的輸出結果正確,就能保證整個模塊輸出正常,當其中任意模塊發生故障時,通過系統的故障檢測機制可進行故障定位,隔離故障區域並進行自修復操作。

基於SRAM型FPGA的實時容錯自修復系統設計方法

2.2 細粒度的三模冗餘設計結構

採用粗粒度設計結構能有效提高系統的可靠度,但其仍然存在一些不足,一是當多數表決器出現故障時整個自修復結構本身不可靠;二是由於模塊粒度較大,一些不能導致模塊功能失效的隱性故障持續累積,容易導致多個模塊同時故障,使得防護結構失效。本文中細粒度的三模冗餘設計結構能有效減少故障累積,該設計結構將一功能模塊拆分為若干個獨立的時序元件和組合邏輯部分,本文將該設計結構利用圖形化表示來說明,將功能單元模塊中的組合邏輯表示為CG,時序元件表示為SE,則利用有向圖表示方法可以將圖2(a)電路表示為圖2(b)。

細粒度的三模冗餘容錯自修復結構建立在有向圖表示方法基礎之上,其核心思想是,將電路分割為邏輯電路和時序電路,在時序電路輸出插入多數表決器,然後再對原始電路進行三模冗餘設計,使得此自修復結構具有三個表決器,因此加強了此結構的故障容錯能力,同時減輕了時序電路引起的錯誤累積,可以成功避免域交叉錯誤的出現。圖2(a)表示的原始電路,利用有向圖表示方法將原始電路分割開來如圖2(b)所示,利用TMR三模冗餘技術將其容錯化如圖2(c)所示。MV表示多數表決器(Multiple Voter)在電路時序元件輸出之後插入,利用其三模冗餘結構,增強了電路容錯能力。當D1模塊的組合、時序電路以及表決器出現故障時,D2模塊和D3模塊通過多數表決器可以檢測到此類故障,並經中斷喚醒處理器進行部分動態重構處理,使得D1部分重構區域得以自修復。

基於SRAM型FPGA的實時容錯自修復系統設計方法

細粒度的三模冗餘容錯自修復結構同時降低了時序電路引起的錯誤累積的概率,可以成功避免域交叉錯誤的產生。當D1模塊的SE2電路和D3模塊的CG4電路同時出現故障的時候,由於在時序電路的輸出端用表決器成功地將SE2故障進行檢測和隔離,不會傳遞積累影響下一級的CG4錯誤,因此可以成功避免域交叉錯誤的產生。

2.3 可靠度對比

功能模塊在FPGA內部的實現可以用邏輯資源來表示,如查找表(LUTs)、觸發器(Flip-Flops)、塊存儲器(BRAM)等。而各邏輯資源的連接和使用通過比特流文件配置來實現。比特流文件由若干個配置幀(frame)組成,配置幀又包含若干個表示配置信息的比特位。在輻射環境中,當FPGA中的電路模塊發生單粒子翻轉效應時,並不是模塊任意比特位發生翻轉就會導致模塊功能失效,該模塊功能往往由一些關鍵比特位所決定。考慮該粗粒度的三模冗餘設計結構的容錯能力,討論馬爾科夫模型下的三模冗餘結構[15],假設功能模塊在時間t內功能正常的可靠度隨著時間的推移呈指數遞減,其可靠度可以表示為:

其中λm表示功能模塊m的故障率,其由比特位在單位時間內的翻轉速率和模塊對應的關鍵比特位數量所決定。對於一個三模冗餘系統來說只有當兩個或者兩個以上的模塊發生錯誤時系統防護功能才會失效,假設三模冗餘系統表決邏輯功能正常,那麼對於該粗粒度的三模冗餘設計結構其可靠度可以表示為:

基於SRAM型FPGA的實時容錯自修復系統設計方法

將提出的細粒度的三模冗餘結構和粗粒度的三模冗餘結構的可靠度進行比較,其可靠度示意圖如圖3所示。細粒度的三模冗餘結構容錯可靠度相對於粗粒度的可靠度有顯著的提高,但同時細粒度的三模冗餘結構會引入額外表決器和故障檢測邏輯,導致額外資源開銷的增加。細粒度的三模冗餘結構更適用於對故障率高的電路模塊進行防護。

基於SRAM型FPGA的實時容錯自修復系統設計方法

3 實時故障自修復系統設計

3.1 實時故障自修復系統整體設計結構

圖4給出了一種基於Xilinx FPGA實現的故障自修復系統整體結構設計方案。整個系統實現基於MicroBlaze軟核的片上微處理器系統,主要劃分為兩個部分:靜態區域和動態部分重構區域。靜態區域主要包括:軟核MicroBlaze、串口控制器、Flash控制器等,這部分區域包括了整個關鍵處理模塊不適於動態重構的模塊,主要負責運行低優先級程序和檢測動態重構區域的正常運行。動態部分重構區域是整個電子系統自修復的基礎,所有的自修復操作都在其他模塊監測、控制下有序地進行,保證整個電子系統不間斷正常的工作,其中各個冗餘模塊的標準配置文件存放於片外Flash中。當系統收到重構請求時,由Flash控制器讀取片外存儲器中對應模塊的比特流文件並通過內部配置訪問端口(ICAP)寫入重構區域。動態部分重構區域結合上文提出的容錯方案進行容錯設計,同時MicroBlaze負責控制和監測每個動態重構單元的工作情況:比如當設計動態重構單元為三模冗餘故障容錯模塊時,當此模塊內部故障檢測單元檢測到發生故障時,通過中斷的形式將信息發送到MicroBlaze中,MicroBlaze讀取此模塊的狀態寄存器以判明故障類型和區域,根據應用場合不同選擇不同的故障自修復策略將此模塊進行有序的自重構,實現故障自修復的同時並不影響系統正常運行。

基於SRAM型FPGA的實時容錯自修復系統設計方法

3.2 內嵌式故障檢測結構

採用一內嵌式故障檢測結構對冗餘模塊進行故障檢測,該方案將故障檢測單元嵌入到冗餘模塊中。圖5(a)所示為三模冗餘容錯自修復結構中以邏輯門描述的故障檢測單元示意圖,該故障檢測單元由多數表決器和異或非門構成,將多數表決器的輸出和檢測的冗餘模塊的輸出接到異或非門的輸入端,多數表決器的輸出作為錯誤標誌信號FLAG。當檢測的冗餘模塊的輸出和表決器的輸出相同,則異或門輸出為邏輯1,表示該檢測的冗餘模塊無故障發生,若異或門輸出邏輯為0,則表明檢測的冗餘模塊發生故障或故障檢測單元自身發生故障。具有該故障檢測單元的三模冗餘結構如圖5(b)所示。

基於SRAM型FPGA的實時容錯自修復系統設計方法

功能模塊在FPGA內部的實現可以用邏輯資源來表示,如查找表(LUTs)、觸發器(Flip-Flops)、塊存儲器(BRAM)等。而各邏輯資源的連接和使用通過比特流文件(Bitstream)配置來實現。比特流文件由若干個配置幀(frame)組成,功能模塊大小也可通過配置幀的數量來表示。

該檢測單元從細粒度的角度對電路輸出的每一位進行比較,也就是說對於一個輸出信號為N位的功能模塊來說,採用該故障檢測單元會對每一個冗餘模塊會產生N個故障標誌信號。然而對於一個冗餘模塊來說只需要一個標誌信號來表明該模塊是否發生故障。對此提出了一種將標誌信號進行融合的邏輯結構,該融合邏輯結構採用FPGA片內進位鏈邏輯來實現。如圖6所示,以4位的輸出信號為例,故障檢測單元對TR1模塊的輸出位進行檢測,將故障標誌信號分別接入進位鏈的C0~C3端口。進位鏈CIN端口輸入邏輯1,當無故障發生時進位鏈輸出邏輯1,當其中一位或者多位錯誤發生時,進位鏈中的二選一選擇器選擇故障標誌信號進行傳遞,進位鏈輸出邏輯0,表示TR1模塊發生故障。對於模塊輸出信號位數少於4位的情況,可以將進位鏈空閒的輸入端輸入邏輯1即可。對於模塊輸出信號位數大於4位的情況,可以將前一進位鏈的標誌輸出FLAG接入後一進位鏈的CIN輸入端,將進位鏈串行連接。

基於SRAM型FPGA的實時容錯自修復系統設計方法

4 實驗設計與分析

本節中將上文提出的故障自修系統在Xilinx XC6VLX240T-1FF1156 FPGA上進行設計實現,實驗中靜態區域包含了一基於MicroBlaze核的片上微處理器系統,該微處理器系統主要負責與上位機進行交互、響應重構請求、控制片外存儲器讀取比特文件數據和控制內部配置訪問端口(ICAP)對重構區域進行重配置等任務。動態區域中將ITC99 benchmark電路中8個不同粒度的標準電路進行冗餘設計,以分析不同粒度模塊的故障自修復時間。

4.1 FPGA系統設計流程

實驗中對系統進行設計實現採用的是基於Xilinx ISE開發工具的設計流程,設計流程如圖7所示。在ISE頂層設計規劃中對系統各模塊進行劃分,定義系統中的各靜態模塊和動態模塊,並對動態模塊進行冗餘保護設計。片上微處理器系統在Xilinx的XPS設計工具中進行設計搭建,並在SDK設計工具中對微處理器系統進行軟件功能編譯,PlanAhead設計工具可通過圖形界面(GUI)對FPGA進行早期分析和佈局規劃功能,施加物理約束,分析佈線和時序的結果。實驗中各動態模塊的區域劃分在PlanAhead中進行設計。PlanAhead中比特流文件生成完成後,需要進行軟硬件協同處理,即將XPS生成的塊存儲器映射文件(*.bmm)、SDK生成的可執行文件(*.elf)和PlanAhead生成的全局比特流文件合為一個新的比特流文件,藉助Xilinx命令行工具ISE Design Suite Command Prompt,通過命令指令合成最終的比特流文件。

基於SRAM型FPGA的實時容錯自修復系統設計方法

4.2 實驗結果分析

實驗中各動態模塊的區域劃分如圖8所示,動態區域內的邏輯資源能夠滿足各模塊功能實現。各動態模塊的資源開銷如表1所示,由實驗結果可知,模塊粒度越小其冗餘設計中表決器和故障檢測結構所佔的資源比例則越大,即系統模塊粒度劃分越小、重構區域劃分越多,則容錯自修復設計所帶來的額外資源開銷越大。

基於SRAM型FPGA的實時容錯自修復系統設計方法基於SRAM型FPGA的實時容錯自修復系統設計方法

各動態模塊重構時間花費表2所示。實驗中所採取的故障注入方式同樣採取動態重構方式,即通過FPGA的內部配置訪問通道(ICAP)動態地對各模塊進行錯誤配置來實現。實驗中故障檢測方案採用上文所提出的內嵌式故障檢測結構,其故障檢測延遲與信號在進位鏈中的傳播延遲相關,即和進位鏈的串聯個數相關,而進位鏈中信號傳播延遲為納秒級,遠小於模塊重構時間,可認為模塊的自修復時間近似於模塊的重構時間。由實驗結果可看出模塊重構時間與模塊佔用資源數和模塊重構區域大小成正比,即模塊佔用資源數越多,其劃分的最小重構區域則越大,模塊重構時間花費越大。而同時,功能模塊劃分越小,其進行冗餘設計時所帶來的額外資源開銷比例則越大。故在系統設計時,需要綜合考慮資源分配情況和故障修復時間要求,合理地進行模塊粒度劃分,實現粗粒度和細粒度的靈活組合。

基於SRAM型FPGA的實時容錯自修復系統設計方法

5 結論

本文提出了一種基於SRAM型FPGA的實時容錯自修復系統結構和設計方法。該設計方法將系統分為若干功能模塊,採用粗粒度三模冗餘結構和細粒度三模冗餘結構並結合動態重構對系統進行容錯自修復設計,實驗結果表明該設計結構下故障修復時間短,系統的可靠性得到有效提高。在系統設計時,可以綜合考慮資源分配情況和故障修復時間要求,合理進行模塊粒度劃分,實現粗粒度和細粒度的靈活組合。

參考文獻

[1] 潘雄,鄧威,苑政國,等.SRAM型FPGA單粒子隨機故障注入模擬與評估[J].微電子學與計算機,2018,35(7):29-33.

[2] 馮彥君,華更新,劉淑芬.航天電子抗輻射研究綜述[J].宇航學報,2007,28(5):1071-1080.

[3] DEMIRCI M,REVIRIEGO P,MAESTRO J A.Implementing double error correction orthogonal latin squares codes in SRAM-based FPGAs[J].Microelectronics Reliability,2016,56:221-227.

[4] KOESTER M,LUK W,HAGEMEYER J,et al.Design optimizations for tiled partially reconfigurable systems[J].IEEE Transactions on Very Large Scale Integration Systems,2011,19(6):1048-1061.

[5] KOREN I,KRISHNA C M.Fault-tolerant systems[M].Morgan Kaufmann Publishers Inc.,2007.

[6] BAO S,YAN H,CHI Q,et al.A FPGA-Based reconfigurable data acquisition system for industrial sensors[J].IEEE Transactions on Industrial Informatics,2017,13(4):1503-1512.

[7] 鄔貴明.FPGA矩陣計算並行算法與結構[D].長沙:國防科學技術大學,2011.

[8] 姚睿,王友仁,於盛林,等.具有在線修復能力的強容錯三模冗餘系統設計及實驗研究[J].電子學報,2010,38(1):177-183.

[9] 王宏宇.基於FPGA的片上電路進化設計研究[D].石家莊:河北師範大學,2017.

[10] KONDELOVA A,CUNTALA J.Time models of dynamic and static reconfiguration in FPGAs[C].Proceedings of ELEKTRO,2014:451-454.

[11] RODRIGUES T,VESTIAS M.Using dynamic reconfiguration to reduce the area of a JPEG decoder on FPGA[C].Proceedings of 2015 Euromicro Conference on Digital System Design,2015:65-71.

[12] 張小林,丁磊,顧黎明.基於三層級低開銷的FPGA多比特翻轉緩解技術[J].電子技術應用,2018,44(4):61-64.

[13] 佟昕,於勇,趙寶珍,等.基於DMR-CED容錯方法的多相結構數字下變頻SEU防護設計[J].遙測遙控,2018,39(4):56-61.

[14] 王銳,段小虎.一種具備故障自恢復能力的容錯計算機架構設計[J].信息通信,2017(4):72-73.

[15] RUPE J W.Reliability of computer systems and networks fault tolerance,analysis,and design[M].John Wiley & Sons,Inc.,2003:586-587.

作者信息:

徐偉傑1,謝永樂2,彭禮彪2,沈北辰3

(1.長安大學 信息工程學院,陝西 西安710064;

2.電子科技大學 自動化工程學院,四川 成都611731;3.四川大學 軟件學院,四川 成都610207)

相關推薦

推薦中...