胡洪凱,施 蕾,董暘暘,劉 波,葉有時
(北京控制工程研究所,北京 100190)
目前FPGA 在星載電子產(chǎn)品和設(shè)備中的應(yīng)用非常廣泛,空間應(yīng)用的FPGA 主要有反熔絲FPGA和基于SRAM 型FPGA 兩種類型。從應(yīng)用領(lǐng)域看,前者主要應(yīng)用于控制系統(tǒng)及所屬星載電子產(chǎn)品,后者主要應(yīng)用于載荷和應(yīng)用系統(tǒng)。究其原因,主要是SRAM 型FPGA 的抗單粒子翻轉(zhuǎn)能力較差,在軌容易受到SEU 影響而發(fā)生邏輯錯誤和功能中斷,引起FPGA 所在產(chǎn)品的功能失效。這需要通過系統(tǒng)復(fù)位、斷電重啟動或者切換備份等手段才能完成系統(tǒng)的恢復(fù)。從應(yīng)用場合看,載荷和應(yīng)用系統(tǒng)對于FPGA 的故障恢復(fù)過程通常能夠容忍,而對于控制系統(tǒng)來說,F(xiàn)PGA 的故障恢復(fù)會直接影響到衛(wèi)星的控制精度和姿態(tài)穩(wěn)定度。
星載計算機作為控制系統(tǒng)的核心部件,主要利用反熔絲FPGA 完成數(shù)字和邏輯功能,非常慎重選 用SRAM 型FPGA??紤]到SRAM 型FPGA 易發(fā)生單粒子翻轉(zhuǎn),會引起計算機發(fā)生復(fù)位或者切機。因此,星載計算機使用的SRAM 型FPGA 必須采取相應(yīng)的抗單粒子翻轉(zhuǎn)設(shè)計措施,提高FPGA 空間應(yīng)用的可靠性。
目前,SRAM 型FPGA 在星載電子產(chǎn)品中應(yīng)用較多的是Xilinx 公司的FPGA。
圖1所示為Xilinx Virtex-4(V4)系列FPGA器件的內(nèi)部結(jié)構(gòu)。從圖中可以看出,F(xiàn)PGA 內(nèi)部由3 部分組成,分別為:1)用于實現(xiàn)用戶邏輯的可編程陣列(Configurable Logic Block,CLB);2)用于存儲用戶數(shù)據(jù)的左右兩列存儲器(Block RAM,BRAM);3)輸入/輸出模塊(I/O Block,IOB)。CLB 中包含有查找表LUT、進位邏輯和觸發(fā)器等元件。其中用戶邏輯的配置信息存儲在CLB 的存儲單元中,該信息如果發(fā)生錯誤,則直接影響到用戶邏輯功能。
該 FPGA 器件內(nèi)部的配置存儲單元、觸發(fā)器、LUT、Block RAM、Half Latch 都可能發(fā)生SEU 錯誤,其中配置存儲單元中發(fā)生的SEU 百分占比最大。
圖1 Virtex-4 系列FPGA 內(nèi)部結(jié)構(gòu)示意圖Fig.1 Simplified block diagram for Virtex-4 FPGA
硬件冗余設(shè)計技術(shù)是一種有效解決單粒子翻轉(zhuǎn)問題的手段,可以將FPGA 器件作為冗余的對象或者對FPGA 內(nèi)部邏輯實施三模冗余設(shè)計,設(shè)計原理如圖2所示。若星載電子產(chǎn)品采用多片F(xiàn)PGA 的冗余設(shè)計方法,則需要增加額外的FPGA 仲裁電路,會增加印制板的面積,增大設(shè)備的體積、重量和功耗。若采用FPGA 內(nèi)部邏輯的三模冗余設(shè)計,即通過片內(nèi)的多數(shù)表決器對FPGA 輸出信號進行表決輸出,則可以有效減緩SEU 的影響。
圖2 三模冗余設(shè)計的原理框圖Fig.2 Block diagram for triple modular redundancy(TMR)
雖然TMR 能夠提高FPGA 可靠性[1],但是也會降低經(jīng)過布局布線后的最大時鐘速度,增加FPGA 的資源使用量,增大芯片功耗。如果FPGA邏輯設(shè)計本身就很復(fù)雜,則TMR 設(shè)計后所帶來的資源和功耗往往是系統(tǒng)設(shè)計所無法容忍的。因此在具體設(shè)計時,可針對部分關(guān)鍵邏輯和電路進行TMR 加固設(shè)計[2-3]。在具體實現(xiàn)中,TMR 可以使用Synplify 工具進行設(shè)置,選擇關(guān)鍵寄存器進行冗余設(shè)計。
FPGA 重配置技術(shù)是一種對可編程FPGA 的局部或者全部邏輯資源進行重配置的設(shè)計方法。該方法不需要額外的FPGA,只需要外部1 路脈沖指令即可實現(xiàn)FPGA 配置信息的重新加載,控制及實現(xiàn)簡單。但是由于重配置過程中FPGA 不能正常工作,會引起系統(tǒng)的功能中斷。尤其對于使用大容量SRAM 型FPGA 的星載計算機來說,其配置時間需要持續(xù)幾十甚至幾百ms,系統(tǒng)是無法容忍的。
FPGA 自動刷新是指周期性地對配置信息進行刷新,無論是否發(fā)生單粒子翻轉(zhuǎn),均對FPGA 配置區(qū)進行配置數(shù)據(jù)回寫操作。刷新過程無須中斷用戶的功能。對于Xilinx 系列的FPGA,在線刷新CLB/IO/DSP/CLK 區(qū)域,雖然不會引起功能中斷,但是需要額外的外部刷新控制電路的支持,實現(xiàn)刷新的控制時序。對于使用大容量SRAM 型FPGA的星載計算機來說,F(xiàn)PGA 每次刷新的時間相對較長,使得實時性不高,若工作軌道的空間環(huán)境惡劣,則有可能無法及時糾正FPGA 發(fā)生的單粒子翻轉(zhuǎn),從而對計算機的穩(wěn)定運行造成一定的影響。
對FPGA 配置單元中的信息實時地進行回讀和刷新也是一種有效的抗單粒子翻轉(zhuǎn)的設(shè)計方法。
回讀是將FPGA 配置存儲器中的所有數(shù)據(jù)讀出的過程,可以用來校驗當(dāng)前的配置信息,同時也可以讀出FPGA 寄存器的當(dāng)前狀態(tài)和基于LUT 的RAM 與塊狀RAM 中的當(dāng)前數(shù)據(jù)。刷新是指將正確的配置信息回寫入FPGA 相應(yīng)的配置單元中。Xilinx系列的FPGA 支持以幀(每幀大小為41×32 bit)為單位的回讀與刷新操作。與自動刷新不同,回讀和刷新是指在運行過程中通過對回讀的FPGA 配置數(shù)據(jù)進行比對或者以某種校驗算法進行檢錯,檢驗配置數(shù)據(jù)的正確性,僅在發(fā)現(xiàn)錯誤時進行回寫,即刷新操作,因此能夠減少FPGA 刷新的次數(shù),更加高效和有針對性地對故障進行恢復(fù)。
目前,Xilinx 系列FPGA 配置訪問接口包括JTAG、SelectMap 以及ICAP 三種。其中,JTAG和SelectMap 為外部訪問接口,即外部設(shè)備通過這兩種接口實現(xiàn)對目標(biāo)FPGA 的配置刷新和回讀。JTAG接口是串行接口,速度較慢;SelectMap 接口是并行接口,速度較快。SelectMap 接口提供了與Virtex-4配置邏輯之間的一個8 bit/32 bit 雙向數(shù)據(jù)總線接口,既可以用于配置,也可以用于回讀。ICAP 接口為內(nèi)部訪問接口,通過該接口可以訪問FPGA 的配置存儲器,實現(xiàn)對自身的故障診斷和檢測。Virtex-4 系列FPGA 三種接口的最大數(shù)據(jù)帶寬如表1所示。
表1 Virtex-4 系列FPGA 配置模式Table 1 Configuration modes for Virtex-4 FPGA
1)JTAG 接口
通過JTAG 接口可對FPGA 內(nèi)部的CLB、BRAM 以及IOB 進行加載、回讀和重配置,一般用于FPGA 的在線調(diào)試和測試。
2)SelectMap 接口
SelectMap 接口有兩種配置模式:主動模式僅支持8 bit 數(shù)據(jù)位寬,被動模式下可選擇8 bit 位寬或32 bit 位寬。SelectMap 接口將FPGA 的配置信息分為若干幀進行傳輸,每幀大小為41word(即41×32 bit=1312 bit)。
3)ICAP 接口
ICAP 接口能夠利用FPGA 中內(nèi)嵌的控制器直接對配置數(shù)據(jù)進行重配置操作。
經(jīng)過分析,采用SelectMAP 接口和用戶自定義的糾錯檢錯方式實現(xiàn)FPGA 的回讀和動態(tài)刷新的優(yōu)點是實現(xiàn)簡單,較為可靠。為降低電路結(jié)構(gòu)的復(fù)雜程度,可以無須存儲rbb 文件和msk 文件,通過周期性地以幀為單位對FPGA 進行回讀、用戶自定義的糾錯檢錯和刷新操作,電路上僅需一片反熔絲FPGA 和配套PROM 芯片(PROM 芯片個數(shù)根據(jù)FPGA 容量確定)。對于校驗后檢測到故障的配置幀,通過反熔絲FPGA 控制SelectMAP 接口對該幀進行數(shù)據(jù)刷新,及將回讀校驗后不滿足用戶自定義校驗條件的配置數(shù)據(jù)從PROM 配置信息中重新加載。
SRAM 型FPGA 的刷新控制電路可以使用外部的反熔絲FPGA 或者ASIC 來實現(xiàn),若采用抗輻射等級高的元器件,則具有較高的可靠性。該方法能夠?qū)λ信渲脭?shù)據(jù)進行定期的回讀和糾錯檢錯,在刷新期間不影響FPGA 和系統(tǒng)的正常工作;支持以幀為單位的回讀、糾錯檢錯和刷新操作,具有SEU 的快速診斷和快速故障恢復(fù)能力,從而可以有效降低FPGA 因受到SEU 影響而發(fā)生故障的概率。
在實際應(yīng)用中,需要根據(jù)空間運行環(huán)境(預(yù)估SEU 的發(fā)生概率和發(fā)生頻率)、FPGA 配置數(shù)據(jù)的容量等,合理選擇和設(shè)置FPGA 的配置時鐘,在滿足元器件頻率降額的前提下,滿足系統(tǒng)對于FPGA整片刷新的時間要求,使得SEU 故障能夠被及時糾正,不會引起故障的累積和擴散。
基于 FPGA 的局部動態(tài)可重構(gòu)技術(shù)是指在一定的控制邏輯的驅(qū)動下,不僅能實現(xiàn)系統(tǒng)的高速動態(tài)重配置,而且還能實現(xiàn)系統(tǒng)的局部邏輯電路重配置[4]?;诰植縿討B(tài)可重構(gòu)的故障恢復(fù)技術(shù)是指從模塊角度進行故障恢復(fù)。當(dāng)DMR/TMR 模塊檢測到故障后,SE_Controller 讀取相應(yīng)故障模塊的配置比特,在系統(tǒng)運行時進行故障恢復(fù),速度較快,而且不影響系統(tǒng)運行。
FPGA 動態(tài)重構(gòu)技術(shù)由Xilinx 公司首先提出和實現(xiàn),而Altera 公司于2010年7月發(fā)布的Stratix V型FPGA 也開始支持動態(tài)重構(gòu)技術(shù)。
Xilinx FPGA 有4 種動態(tài)可重構(gòu)設(shè)計流程,包括基于比特流的動態(tài)可重構(gòu)設(shè)計流程[5]、基于模塊化的動態(tài)可重構(gòu)設(shè)計流程[6,8-9]、基于差異的動態(tài)可重構(gòu)設(shè)計流程[7]和基于EAPR(Early Access Partial Reconfiguration)方法的動態(tài)可重構(gòu)設(shè)計流程[10]。
EAPR 是Xilinx 最新提出的一種動態(tài)可重構(gòu)設(shè)計方法或設(shè)計流程。通過使用動態(tài)重配置設(shè)計工具PlanAhead,可以使整個動態(tài)重配置設(shè)計流程更加簡化。
基于EAPR 的動態(tài)重配置設(shè)計流程分為以下步驟:
1)設(shè)計輸入與綜合(HDL Design Description and Synthesis)
包括頂層模塊(Top Module)、靜態(tài)子模塊(Static Module)、各個子重構(gòu)模塊PRM(Partial Reconfiguration Module)的設(shè)計與綜合。
2)添加設(shè)計約束(Set Design Constrains)
這一步驟主要是定義頂層文件的引腳約束以及一些全局的時序約束。
3)借助PlanAhead 工具完善設(shè)計(EAPR Design with PlanAhead)
4)各模塊激活實現(xiàn)(Active Modules)
5)合并實現(xiàn)(Final Assembly)
完成頂層模塊、靜態(tài)子模塊以及各子重構(gòu)模塊的裝配,生成FPGA 的初始完整配置比特流文件以及各子重構(gòu)模塊的局部配置比特流文件。
在工程實踐中SRAM 型FPGA 局部可重構(gòu)借鑒于軟件的在軌注入和程序修改,通過OBDH 數(shù)管分系統(tǒng)進行FPGA 重構(gòu)模塊配置信息的在軌注入,再通過配置電路對FPGA 的局部重構(gòu)模塊的配置數(shù)據(jù)進行更改并重新注入,從而達(dá)到屏蔽FPGA 內(nèi)部故障區(qū)域或者在軌修改FPGA 局部邏輯功能的目的,提高其容錯能力和故障的地面干預(yù)與處理能力。
在FPGA 設(shè)計中,還有其他的一些容錯設(shè)計措施,舉例如下:
1)狀態(tài)機編碼技術(shù)
對關(guān)鍵狀態(tài)機的狀態(tài)信息采用編碼技術(shù),防止?fàn)顟B(tài)機由于單粒子翻轉(zhuǎn)導(dǎo)致的狀態(tài)跑飛和鎖死現(xiàn)象,以提高可靠性。
2)FPGA 內(nèi)部RAM 模塊的EDAC 處理
對FPGA 內(nèi)部的Block RAM,采用EDAC 技術(shù)對其進行“糾一檢二”校驗,以提高Block RAM的單粒子效應(yīng)防護能力。
為了驗證Virtex-4 系列FPGA 的SelectMAP接口的回讀、糾檢錯和刷新技術(shù)以及局部可重構(gòu)技術(shù),設(shè)計了一套驗證測試系統(tǒng)。
1)Windows XP/ Windows 7/ Windows 8;
2)Xilinx ISE 13.2;
3)Xilinx PlanAhead 13.2;
4)Xilinx ChipScope 13.2。
1)Xilinx Virtex 系列 FPGA;
2)Z800 計算機。
配置刷新控制用的FPGA 以實現(xiàn)對目標(biāo)FPGA的流程控制,具體步驟如下:
step1:配置刷新控制用的FPGA 復(fù)位完成后,檢測由上位機輸出至目標(biāo)FPGA 的“配置有效標(biāo)志信號”,若該信號為1,則表示配置有效,立即啟動Virtex-4 系列FPGA 的SelectMAP 接口方式配置,進入step2;若200 ms 后,該信號仍為低電平(無效狀態(tài)),則自主啟動SelectMAP 接口方式配置,進入step2;期間保持雙向信號INIT 為輸出狀態(tài),且輸出低電平,表示FPGA 維持在等待配置狀態(tài);同時保持復(fù)位信號處于有效狀態(tài)。
step2:實現(xiàn)對SelectMAP 接口方式配置,配置期間保持復(fù)位信號有效,然后進入step3。
step3:等待FPGA 輸出Done 信號(配置完成)上升沿,若發(fā)現(xiàn)上升沿,則表示配置完成,進入step4;若計數(shù)器已達(dá)到預(yù)定上限值還未采集到Done 信號上升沿,則認(rèn)為發(fā)生配置故障,進入step8。
step4:繼續(xù)保持FPGA 的復(fù)位有效20~30 ms,然后釋放復(fù)位信號,進入step5。
step5:檢測由上位機輸出至目標(biāo)FPGA 的“重構(gòu)有效標(biāo)志信號”,若信號為1,則表示重構(gòu)有效,立即啟動SelectMAP 接口方式重構(gòu)操作,進入step6;否則判斷“刷新有效標(biāo)志信號”,若該信號為1,則代表刷新有效,立即啟動SelectMAP 接口方式回讀、糾檢錯和刷新操作,進入step8;否則保持在step5 中。
step6:進行SelectMAP 接口有效性檢測,若發(fā)生接口的單粒子功能中斷(SEFI),則進入step12,否則進入step7。
step7:實現(xiàn)對SelectMAP 接口方式重構(gòu)操作,并同時保持重構(gòu)模塊的復(fù)位信號有效,期間不對主模塊進行復(fù)位處理;重構(gòu)完成后20~30 ms 釋放重構(gòu)模塊的復(fù)位信號,之后進入step5。
step8:進行SelectMAP 接口有效性檢測,若發(fā)生接口的單粒子功能中斷,則進入step8,否則進入step9。
step9:實現(xiàn)對SelectMAP 接口方式配置數(shù)據(jù)回讀操作,并同時進行CRC16 檢驗碼的計算;回讀配置數(shù)據(jù)完成后,驗證檢驗碼,若發(fā)生糾檢錯的錯誤,則進入step10;未發(fā)生,則進入step11。
step10:實現(xiàn)對SelectMAP 接口方式配置數(shù)據(jù)的刷新操作,完成后進入step11。
step11:判斷是否到達(dá)配置數(shù)據(jù)地址的最后值,若到達(dá)則進入step5,否則配置數(shù)據(jù)地址加1 后,進入step9。
step12:建立故障標(biāo)志,向上位機輸出故障標(biāo)志后,進入step13。
step13:等待上位機發(fā)出的重配置指令,若采集到“配置有效標(biāo)志信號”輸出上升沿,清除故障標(biāo)志;且立即啟動SelectMAP 接口方式配置,進入step2;否則保持在step13 中。
外部控制器實現(xiàn)的配置、回讀、糾檢錯、刷新和局部可重構(gòu)流程如圖3所示。
圖3 FPGA 工作流程圖 Fig.3 Flow chart of FPGA
本文綜述了幾種基于SRAM 型FPGA 在空間應(yīng)用的抗單粒子翻轉(zhuǎn)的設(shè)計方法,包括FPGA 的TMR 設(shè)計、重配置、自動刷新技術(shù)、回讀和刷新技術(shù)以及局部動態(tài)可重構(gòu)技術(shù)等。通過采用以上一種或者多種容錯設(shè)計方法,可以增強FPGA 對于空間SEU 的防護能力,有利于提高星載計算機的可靠性。在某衛(wèi)星的搭載試驗項目中,針對Xilinx Virtex-4 FPGA 的抗單粒子翻轉(zhuǎn)設(shè)計,綜合采用了TMR 設(shè)計、回讀和刷新技術(shù)以及局部可重構(gòu)技術(shù),后續(xù)將通過在軌飛行試驗以驗證這些技術(shù)的SEU防護效果,為航天應(yīng)用提供第一手的試驗數(shù)據(jù)。
(References)
[1]Fuller E, Caffrey M, Salazar A, et al.Radiation testing update, SEU mitigation, and availability analysis of the Virtex FPGA for space reconfigurable computing[C]//4thAnnual Conference on Military and Aerospace Programmable Logic Devices(MAPLD).Washington D.C., 2000
[2]Praveen Kumar Samudrala, Jeremy R, Srinivas Katkoori.Selective triple modular redundancy(STMR) based single-event upset(SEU) tolerant synthesis for FPGAs[J].IEEE Transactions on Nuclear Science, 2004, 51(5)∶2957-2969
[3]Sterpone L, Violante M, Jeremy R, et al.Analysis of the robustness of the TMR architecture in SRAM-based FPGAs[J].IEEE Transactions on Nuclear Science, 2005, 52(5)∶1545-1549
[4]任麒斌.局部動態(tài)可重構(gòu)硬件框架和開發(fā)方法研究[D].杭州∶杭州電子科技大學(xué), 2009
[5]徐新民, 樂瑩, 尚麗娜.FPGA 動態(tài)部分重構(gòu)的研究及位流信息重構(gòu)的實現(xiàn)[J].科技通報, 2008, 24(2)∶235-240 Xu Xinmin, Le Ying, Shang Lina.The research on partially dynamic reconfiguration for FPGA and its implementation based on bitstream[J].Bulletin of Science and Technology, 2008, 24(2)∶235-240
[5]Xilinx Inc.Two flows for partial reconfiguration∶module based or difference based[EB/OL].[2004-09-09].http∶//www.xilinx.com/bvdocs/appnotes/xapp290.pdf.
[6]李濤, 劉培峰, 楊愚魯.動態(tài)部分重配置及其FPGA實現(xiàn)[J].計算機工程, 2006, 32(14)∶224-226 Li Tao, Liu Peifeng, Yang Yulu.Partially run-time reconfiguration and its implementation on FPGA[J].Computer Engineering, 2006, 32(14)∶224-226
[7]周盛雨, 孫輝先, 陳曉敏, 等.基于模塊化設(shè)計方法實現(xiàn)FPGA 動態(tài)部分重構(gòu)[J].微計算機信息, 2008, 24(5)∶164-166 Zhou Shengyu, Sun Huixian, Chen Xiaomin, et al.A module-based dynamic partial reconfiguration of FPGAs[J].Control &Automation, 2008, 24(5)∶164-166
[8]許俊, 晏渭川, 彭澄廉.基于模塊的動態(tài)可重構(gòu)系統(tǒng)設(shè)計[J].計算機工程與設(shè)計, 2008, 29(6)∶1367-1383 Xu Jun, Yan Weichuan, Peng Chenglian.Design of flow for dynamic reconfigurable system based on module[J].Computer Engineering and Design, 2008, 29(6)∶1367-1383
[9]Xilinx Inc.Early access partial reconfiguration user guide[EB/OL].[2006-05-06].http∶//www.xilinx.com