王 鵬,劉正清,田 毅
(中國(guó)民航大學(xué) 安全科學(xué)與工程學(xué)院,天津 300300)
基于靜態(tài)隨機(jī)存儲(chǔ)器(Static Random Access Memory,SRAM)型的現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)由于其集成度高、可重配置等優(yōu)點(diǎn),近年來在機(jī)載電子設(shè)備的設(shè)計(jì)中占據(jù)了越來越多的位置[1]。通常民航飛機(jī)的巡航高度在8 229.6~13 106.4 m(7 000~43 000 ft),隨著FPGA工藝尺寸的降低,大氣中中子更容易對(duì)器件產(chǎn)生影響,會(huì)造成存儲(chǔ)器容易發(fā)生單粒子翻轉(zhuǎn)(Single Event Upset,SEU),嚴(yán)重時(shí)會(huì)造成硬件電路的損壞或功能異常。
目前對(duì)于SRAM型FPGA上SEU的容錯(cuò)方法主要包括冗余技術(shù)和配置刷新。冗余技術(shù)是將需要保護(hù)的電路進(jìn)行冗余備份以達(dá)到屏蔽SEU的效果。使用冗余技術(shù)來進(jìn)行容錯(cuò)雖然可以屏蔽SEU,但是隨著器件工作時(shí)間的增加,故障的累積依然會(huì)影響到電路的功能。配置刷新即將受SEU影響的配置位重新寫入正確值來實(shí)現(xiàn)SEU的修復(fù),但是不同的刷新策略和訪問配置存儲(chǔ)的方式使得配置刷新的效果和效率會(huì)有所不同。文獻(xiàn)[2]使用了基于內(nèi)部配置訪問端口(Internal Configuration Access Port,ICAP)訪問配置存儲(chǔ)的回讀刷新來對(duì)SEU進(jìn)行防護(hù)。
Xilinx 7系列器件中最小的可尋址段為配置存儲(chǔ)幀,每個(gè)配置存儲(chǔ)幀由101個(gè)32位字組成。本文基于配置存儲(chǔ)幀提出一種對(duì)電路中的有效配置位加固以防護(hù)SEU的方法。該方法在糾錯(cuò)之前先將配置位中與電路設(shè)計(jì)有關(guān)的位提取出來,并在糾錯(cuò)時(shí)只重配置發(fā)生SEU的幀數(shù)據(jù),以提升防護(hù)措施的效率。
單粒子翻轉(zhuǎn)指的是高能粒子撞擊微電子器件中的敏感位置,產(chǎn)生大量的電子或空穴對(duì),導(dǎo)致器件中的存儲(chǔ)單元狀態(tài)發(fā)生變化。
對(duì)于SRAM型FPGA,以互補(bǔ)金屬氧化物半導(dǎo)體(Complementary Metal Oxide Semiconductor,CMOS)工藝制造的SRAM結(jié)構(gòu)存儲(chǔ)單元對(duì)SEU帶來的干擾極為敏感。CMOS晶體管的單粒子翻轉(zhuǎn)產(chǎn)生原理如圖1所示,當(dāng)高能粒子穿過晶體管的半導(dǎo)體晶格,粒子損失的能量將被傳遞到晶體管的原子粒子。沿著高能輻射粒子的傳射路徑將會(huì)形成大量的電子-空穴對(duì),使晶體管中形成耗盡區(qū)。電子-空穴對(duì)被電場(chǎng)分離,形成瞬時(shí)電流,使數(shù)字電路的邏輯狀態(tài)發(fā)生改變,表現(xiàn)為一個(gè)SRAM位的存儲(chǔ)狀態(tài)發(fā)生變化(由“1”變成“0”或由“0”變成“1”)。
圖1 單粒子翻轉(zhuǎn)的原理[3]
SRAM型FPGA是可編程的半導(dǎo)體器件,由可編程互相連接的可配置邏輯塊(Configurable Logic Block,CLB)組成。其中CLB由查找表(Look-Up-Table,LUT)和觸發(fā)器(Flip-Flop,F(xiàn)F)組成,LUT則是依靠SRAM實(shí)現(xiàn)的[4]。當(dāng)器件中發(fā)生SEU時(shí),會(huì)造成一個(gè)或多個(gè)位翻轉(zhuǎn),被SEU影響的存儲(chǔ)位有可能在器件的配置存儲(chǔ)(決定設(shè)計(jì)的行為)中或設(shè)計(jì)存儲(chǔ)模塊(決定設(shè)計(jì)的狀態(tài))中。
Xilinx公司對(duì)SRAM型FPGA的輻射效應(yīng)測(cè)試表明,對(duì)于單粒子效應(yīng)來說,輻射導(dǎo)致的最常見情況是單粒子翻轉(zhuǎn)[5]。根據(jù)美國(guó)洛斯·阿拉莫斯中子科學(xué)中心(Los Alamos Neutron Science Center)的數(shù)據(jù),獲得了表1中FPGA各存儲(chǔ)在SEU中所占比重。
表1 FPGA各部分存儲(chǔ)在SEU截面中比重[6]
從比例來看,配置存儲(chǔ)所占的比重最大[7]。從而可以得出,在可恢復(fù)的單粒子效應(yīng)中,SEU對(duì)電路的影響最為嚴(yán)重;在配置存儲(chǔ)中發(fā)生的SEU是FPGA故障的大部分原因。
許多機(jī)構(gòu)對(duì)FPGA上的SEU進(jìn)行了研究,針對(duì)配置存儲(chǔ)的容錯(cuò)方法大致分為冗余技術(shù)和配置刷新兩種。
冗余技術(shù)是以犧牲空間的代價(jià)換取系統(tǒng)對(duì)SEU的容錯(cuò)能力。常見的冗余技術(shù)為三模冗余(Triple Modular Redundancy,TMR)。這種技術(shù)將需要保護(hù)的設(shè)計(jì)電路復(fù)制兩次,當(dāng)電路模塊的某一路(例如模塊1)發(fā)生單粒子翻轉(zhuǎn)時(shí),模塊2和模塊3仍然可以將正確的值輸出,然后這三路的數(shù)據(jù)都經(jīng)由多數(shù)表決器表決,即可屏蔽掉單路故障,提高系統(tǒng)在航空應(yīng)用中的可用性。
配置刷新技術(shù)即在FPGA工作時(shí)將受SEU影響的位重新寫入正確值來實(shí)現(xiàn)SEU的修復(fù)[8]。配置刷新可以分為定時(shí)刷新和回讀刷新兩種。定時(shí)刷新是指按照一定的時(shí)間周期來對(duì)FPGA的配置文件進(jìn)行重新寫入操作,當(dāng)在選擇不影響用戶正常使用的時(shí)間點(diǎn)進(jìn)行重加載可以有效避免SEU的累計(jì)對(duì)器件或系統(tǒng)產(chǎn)生影響。使用定時(shí)刷新可以不增加硬件開銷,提升了經(jīng)濟(jì)型和靈活性。回讀刷新是指回讀對(duì)比配置區(qū)循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check,CRC)結(jié)果,與電路初始運(yùn)行時(shí)存儲(chǔ)的CRC校驗(yàn)結(jié)果進(jìn)行對(duì)比,如果結(jié)果不一致,則對(duì)出錯(cuò)的位置進(jìn)行刷新。使用回讀刷新需要額外存儲(chǔ)CRC的校驗(yàn)結(jié)果。
針對(duì)Xilinx FPGA,回讀FPGA配置的方式有兩種,分別是邊界掃描(Joint Test Action Group,JTAG)模式和SelectMap模式。這兩種模式的不同主要在于JTAG模式是采用串行來讀取數(shù)據(jù)的,而SelectMap模式則是采用并行模式。這兩種方式各有優(yōu)劣:使用串行的JTAG讀取配置文件的時(shí)間較長(zhǎng),但是所使用的FPGA引腳就比較少,僅有4個(gè);使用SelectMap模式并行讀取數(shù)據(jù)相較于JTAG更快,但需要將FPGA的一些通用引腳作為SelcetMap的專用引腳。Xilinx V2~V5系列器件多采用SelectMap配置,Xilinx7系列的器件大多使用ICAP進(jìn)行配置刷新。與SelectMap配置不同的是,ICAP可以從內(nèi)部直接對(duì)配置存儲(chǔ)器進(jìn)行讀寫操作,訪問速度比使用SelectMap外部訪問更快。表2給出了各種配置刷新方式及優(yōu)缺點(diǎn)。
表2 配置刷新及優(yōu)缺點(diǎn)
Xilinx為7系列FPGA提供了通過ICAP進(jìn)行緩解軟錯(cuò)誤的IP核,可進(jìn)行自動(dòng)配置、預(yù)驗(yàn)證等工作。通過整合多個(gè)IP核對(duì)整個(gè)用戶電路進(jìn)行掃描并監(jiān)視,實(shí)現(xiàn)對(duì)于翻轉(zhuǎn)位的修復(fù),從而削弱SEU對(duì)系統(tǒng)的影響。
傳統(tǒng)的對(duì)電路保護(hù)是針對(duì)全局或部分配置進(jìn)行保護(hù),修復(fù)或減緩SEU帶來的影響有可能會(huì)導(dǎo)致服務(wù)中斷、降速等。在實(shí)際電路設(shè)計(jì)和配置電路時(shí),大約有八成配置位的翻轉(zhuǎn)與否并不影響電路的功能[9]。如果將與設(shè)計(jì)有關(guān)的位提取出來,在系統(tǒng)檢測(cè)到發(fā)生SEU時(shí)就可知道發(fā)生翻轉(zhuǎn)的位是否和電路設(shè)計(jì)有關(guān),之后選擇是否修復(fù)。通過只修復(fù)與設(shè)計(jì)有關(guān)的有效配置位(Essential Bits),將減少保護(hù)電路的資源使用,提升對(duì)電路防護(hù)的效率。
基于保護(hù)關(guān)鍵有效配置位的思路,我們提出針對(duì)7系列FPGA的設(shè)計(jì)加固方案:首先將與設(shè)計(jì)有關(guān)的有效配置位過濾出來,然后使糾錯(cuò)電路讀取電路中的有效配置位,并在工作的時(shí)候可以對(duì)有效配置位進(jìn)行識(shí)別。方案框圖如圖2所示。
圖2 總體方案框圖
首先將完整的比特流文件加載到FPGA器件,需要先在RTL級(jí)設(shè)計(jì)中劃分出想要重點(diǎn)保護(hù)的區(qū)域組(Area Group),并將這些區(qū)域?qū)懭虢Y(jié)構(gòu)保持約束以保持在綜合階段不會(huì)打亂結(jié)構(gòu)。圖3即為結(jié)構(gòu)保持的示意圖,將I5和I4兩部分寫入結(jié)構(gòu)保持約束中,經(jīng)過綜合后的網(wǎng)表文件會(huì)將剩余的模塊進(jìn)行合成而不破壞這兩部分的結(jié)構(gòu)(這兩部分還可以在I2中展開)。
圖3 電路設(shè)計(jì)中的結(jié)構(gòu)保持
將處理過的電路設(shè)計(jì)綜合并生成用戶約束文件(User Constraints File,UCF)來保護(hù)人為設(shè)定的區(qū)域。
有效位文件類型主要涉及到兩個(gè)文件,即包含用戶電路中配置單元的內(nèi)容文件和掩模文件。掩模文件中“1”的位對(duì)應(yīng)到內(nèi)容文件中的相應(yīng)位置就是有效配置位。
將處理過的電路設(shè)計(jì)綜合并生成用戶約束文件(User Constraints File,UCF)來保護(hù)人為設(shè)定的區(qū)域。如圖4所示,當(dāng)通過結(jié)構(gòu)保持得到UCF文件之后,將UCF和電路描述(包含內(nèi)部邏輯和互聯(lián))(Native Circuit Description,NCD)作為輸入使用BitGen工具進(jìn)行過濾,BitGen會(huì)將綜合過的電路描述和約束文件進(jìn)行比對(duì),生成用戶定義的有效位數(shù)據(jù)(Essential Bits Data,EBD)文件(同時(shí)還會(huì)生成用于編程串行外設(shè)接口器件的原始二進(jìn)制文件和十六進(jìn)制數(shù)據(jù)文件等)。經(jīng)過BitGen生成的幀的局部重配置電路能理解的EBD文件包括.ebc文件和.ebd文件,其中.ebc文件包含了FPGA的配置數(shù)據(jù),.ebd文件則是.ebc文件的掩模,即生成的.ebd文件中非零位的位置對(duì)應(yīng)的.ebc文件中的相同位置為有效配置位。
圖4 生成有效配置位工作示意圖
提取出的EBD文件會(huì)作為軟錯(cuò)誤緩解(Soft Error Mitigation,SEM)IP的故障庫(kù),當(dāng)糾錯(cuò)電路檢測(cè)到電路中發(fā)生故障時(shí),可以和有效配置位進(jìn)行比較來選擇是否進(jìn)行糾正。圖5為本文設(shè)計(jì)中的糾錯(cuò)電路工作流程,當(dāng)糾錯(cuò)電路監(jiān)視中檢測(cè)到了可糾正的故障后會(huì)進(jìn)行一次位類型檢查,來決定是否進(jìn)行糾正,分類和糾正結(jié)果會(huì)輸出一個(gè)任務(wù)報(bào)告。
圖5 糾錯(cuò)電路工作流程
以一個(gè)4位計(jì)數(shù)電路為對(duì)象,按照設(shè)計(jì)方案開展實(shí)驗(yàn),測(cè)試電路各模塊及連接如圖6所示,配置邏輯中的電路描述和區(qū)域組中提取出的用戶約束文件輸入BitGen,生成的EBD文件輸入SEM。
圖6 模塊及連接示意圖
實(shí)驗(yàn)以Xilinx公司的Artix-7 XC7A200T FPGA芯片為測(cè)試對(duì)象,使用AC701評(píng)估套件為測(cè)試對(duì)象載體,如圖7所示。
圖7 AC701評(píng)估套件
加固設(shè)計(jì)前后使用的資源量如表3所示。
表3 加固前后使用的資源
為做對(duì)比,本文也實(shí)現(xiàn)了使用三模冗余來對(duì)待測(cè)電路進(jìn)行加固。從表3中可以看出,使用本文的加固方法與傳統(tǒng)的三模冗余加固方法相比要節(jié)省71%的額外硬件資源消耗。
圖8為BitGen生成的EBD文件中一部分,可以看到圖中第5行第13位和第12行第8位為有效位,圖中剩余位皆為非有效位。由于7系列器件中每個(gè)配置存儲(chǔ)幀均為101個(gè)字,EBD中每一行代表一個(gè)字,所以可以把EBD文件當(dāng)作一個(gè)以101行為一組的組別看待。
圖8 BitGen生成的EBD文件部分
通過BitGen輸出的EBD文件和原設(shè)計(jì)中的比特?cái)?shù)量進(jìn)行對(duì)比,電路的有效配置位為1 037個(gè),非有效配置位為1 412個(gè),有效配置位占所有配置位的42.34%。
圖9為Vivado Tcl的運(yùn)行結(jié)果,顯示SEM IP已成功讀取了EBD文件,識(shí)別了配置存儲(chǔ)中的有效配置位。
圖9 Vivado Tcl運(yùn)行結(jié)果
圖10和圖11為SEM IP過USR-TCP232-Test串口調(diào)試工具進(jìn)行有效配置位和非有效配置位注入的運(yùn)行結(jié)果。圖中的結(jié)果顯示,當(dāng)注入有效配置位的SEU時(shí),糾錯(cuò)電路檢測(cè)到了發(fā)生故障的位置(幀地址、幀中的哪一個(gè)字、字中的哪一個(gè)位)并進(jìn)行了校正;當(dāng)注入了非有效配置位的SEU時(shí),糾錯(cuò)電路檢測(cè)到了故障,但并沒有進(jìn)行校正操作。
圖10 有效配置位注入結(jié)果
圖11 非有效配置位注入結(jié)果
SEM IP對(duì)配置位進(jìn)行保護(hù)的故障糾正延時(shí)與FPGA資源大小和電路工作的頻率有關(guān),它是故障類型和故障相對(duì)于硅回讀過程位置的函數(shù)。在本文所選的器件中,故障糾正延時(shí)為915 μs。實(shí)際的延時(shí)可通過以下公式計(jì)算:
經(jīng)計(jì)算,可以得到糾正延時(shí)為1 386 μs。由此可知,通過提取有效配置位的方法來保護(hù)電路可以增加的效率為57.66%。按照國(guó)際電工委員會(huì)給出的海拔12 192 m(40 000 ft)的SEU概率6×10-10upset/b·h,則每小時(shí)待測(cè)電路中非有效配置位發(fā)生SEU數(shù)量為6×10-10×1412=8.47×10-7次,如果當(dāng)SEM IP檢測(cè)到非有效配置位的故障時(shí)選擇直接忽略,將每小時(shí)節(jié)省1.18 ms對(duì)SEU的恢復(fù)時(shí)間[10]。
針對(duì)SRAM型FPGA中的抗單粒子翻轉(zhuǎn)防護(hù)問題,本文提出先行提取有效配置位,然后加入探測(cè)與糾正電路,當(dāng)有效配置位發(fā)生翻轉(zhuǎn)時(shí)進(jìn)行糾正。實(shí)驗(yàn)結(jié)果表明,使用這種方法可以對(duì)FPGA中的有效配置位提供保護(hù)。相比于保護(hù)全部位的方法,該方法可以有效提升糾錯(cuò)電路的效率。為了應(yīng)對(duì)苛刻空間環(huán)境,后續(xù)將結(jié)合三模冗余、系統(tǒng)架構(gòu)緩解等技術(shù)研究多層次加固技術(shù)。