沈 凡,王 東,蒲恩強(qiáng),方 倪,徐德利,王 輝,龔 祺
(華中師范大學(xué)物理科學(xué)與技術(shù)學(xué)院,湖北武漢 430079)
由于FPGA 具有強(qiáng)大的并行計(jì)算能力、靈活性、開發(fā)周期短等優(yōu)點(diǎn)被廣泛應(yīng)用于各種電子設(shè)備中[1]。現(xiàn)代FPGA 廣泛應(yīng)用的可編程技術(shù)主要有SRAM、FLASH/E2PROM、反熔絲等。基于SRAM 的可編程技術(shù)因?yàn)榫哂锌芍貜?fù)編程、可應(yīng)用于標(biāo)準(zhǔn)的CMOS 工藝等優(yōu)點(diǎn)在市場上占有主導(dǎo)地位[2-5]。
近些年,F(xiàn)PGA 的研究者提出一種新型的可綜合FPGA 架構(gòu),即采用硬件描述語言基于數(shù)字標(biāo)準(zhǔn)單元庫對FPGA 進(jìn)行建模,并采用EDA 工具進(jìn)行自動綜合和版圖生成,最后完成FPGA 芯片的設(shè)計(jì)。基于標(biāo)準(zhǔn)單元庫工藝的FPGA 與傳統(tǒng)FPGA 一樣,也是由邏輯塊、輸入輸出單元、布線資源等組成,這些組成部分都可以由數(shù)字單元庫中的多路選擇器、D 觸發(fā)器等進(jìn)行建模,其中編程工藝也可以由觸發(fā)器進(jìn)行建模,建模方式一般采用Verilog、Chisel 等高級硬件描述語言。這種FPGA 主要用于SOC 中的可編程嵌入式核,芯片在制造和封裝后對該可編程核進(jìn)行現(xiàn)場編程,以實(shí)現(xiàn)一定的數(shù)字邏輯,從而具有可變的特性[6-8]。
在空間和高能物理實(shí)驗(yàn)等輻射環(huán)境中,高能粒子引起等離子體,當(dāng)?shù)入x子體附近存在電勢差時(shí),會引起電荷的轉(zhuǎn)移,當(dāng)電荷轉(zhuǎn)移足夠大時(shí),將引起單元邏輯狀態(tài)的改變,即單粒子翻轉(zhuǎn)(SEU)?;贑MOS工藝的SRAM、觸發(fā)器、鎖存器、等時(shí)序邏輯器件也都會發(fā)生這種SEU 故障[9]。
FPGA 內(nèi)部的配置單元SRAM 或者觸發(fā)器發(fā)生單粒子翻轉(zhuǎn)后可能會導(dǎo)致邏輯電路的功能結(jié)構(gòu)發(fā)生變化,從而嚴(yán)重影響了FPGA 在輻射環(huán)境下的可靠性[10]。因此,在輻射環(huán)境下工作的FPGA 必須采取一定的防護(hù)措施,以降低SEU 對電路的影響,提高系統(tǒng)的可靠性。目前,電路級別SEU 加固技術(shù)主要有三模冗余技術(shù)[11]、糾錯(cuò)編碼技術(shù)[12]、配置刷新技術(shù)等[13]。但是目前還沒有專門針對可綜合FPGA 架構(gòu)進(jìn)行的SEU 加固設(shè)計(jì)。目前,已有的三模冗余技術(shù)一般都是晶體管級別的電路級建模,而沒有寄存器傳輸級建模,無法做到可綜合。糾錯(cuò)編碼技術(shù)主要針對總線接口中的數(shù)據(jù)流進(jìn)行糾錯(cuò),不適用于對FPGA 器件本身加固。配置刷新技術(shù)需要對FPGA 中的配置信息進(jìn)行不斷更新,電路的實(shí)現(xiàn)復(fù)雜,而且刷新時(shí)FPGA功能暫時(shí)中斷。為了對可綜合FPGA 進(jìn)行SEU 容錯(cuò)設(shè)計(jì),該設(shè)計(jì)采用寄存器傳輸級電路的設(shè)計(jì)方法對可綜合FPGA 中的配置單元觸發(fā)器進(jìn)行了三模冗余加固,同時(shí)加入了糾錯(cuò)和檢錯(cuò)的功能,最后對所設(shè)計(jì)的電路進(jìn)行了功能仿真驗(yàn)證和單粒子效應(yīng)仿真。
在標(biāo)準(zhǔn)單元庫工藝的FPGA 中,可編程技術(shù)主要是通過例化觸發(fā)器來實(shí)現(xiàn)的,因此文中主要針對觸發(fā)器進(jìn)行容錯(cuò)設(shè)計(jì)。用于配置存儲電路中的觸發(fā)器可以采用級聯(lián)的方式構(gòu)成移位寄存器,這種結(jié)構(gòu)可以減少配置電路的復(fù)雜度,進(jìn)而獲得面積和性能上的優(yōu)勢。
如圖1 所示是移位寄存器中容錯(cuò)電路的結(jié)構(gòu)。移位寄存器中每個(gè)觸發(fā)器都進(jìn)行了容錯(cuò)設(shè)計(jì),容錯(cuò)電路包括三模冗余電路、多數(shù)表決器電路、檢錯(cuò)電路、糾錯(cuò)電路等,這些電路模塊均可以通過數(shù)字標(biāo)準(zhǔn)單元庫中的門電路進(jìn)行搭建。三模冗余結(jié)構(gòu)由同樣的三份觸發(fā)器構(gòu)成,作為多數(shù)表決器的輸入,多數(shù)表決器根據(jù)3 個(gè)觸發(fā)器的輸出進(jìn)行判決,得到最終輸出的觸發(fā)器的值。檢錯(cuò)電路可以判斷3 個(gè)觸發(fā)器中是否有翻轉(zhuǎn),糾錯(cuò)電路可以根據(jù)錯(cuò)誤信息對觸發(fā)器進(jìn)行立即糾正和更新。
圖1 容錯(cuò)電路總體框圖
三模冗余(TMR)是抗單粒子翻轉(zhuǎn)常用的電路加固技術(shù)。TMR 對硬件進(jìn)行冗余設(shè)計(jì)時(shí),把關(guān)鍵電路復(fù)制成3 份,通過對三路輸出結(jié)果進(jìn)行表決來屏蔽任何一路的SEU 錯(cuò)誤。圖2 是三模冗余電路的結(jié)構(gòu)框圖,主要由復(fù)制的三份電路和一個(gè)多數(shù)表決器組成[14]。
圖2 三模冗余電路結(jié)構(gòu)框圖
在基于標(biāo)準(zhǔn)單元庫工藝的FPGA 中,配置存儲器是由硬件描述語言對觸發(fā)器進(jìn)行例化而得來的。FPGA 中的邏輯塊、布線資源、輸入輸出塊等都是通過配置存儲器來改變功能的,因此配置存儲器的數(shù)量非常大。
如圖3 所示,觸發(fā)器內(nèi)部有兩個(gè)和SRAM 結(jié)構(gòu)相似的互鎖結(jié)構(gòu),當(dāng)粒子轟擊觸發(fā)器主從級互鎖結(jié)構(gòu)中的敏感節(jié)點(diǎn)時(shí),可能會使存儲邏輯值發(fā)生翻轉(zhuǎn),從而使觸發(fā)器的輸出結(jié)果產(chǎn)生錯(cuò)誤導(dǎo)致電路功能失效[15]。
圖3 觸發(fā)器電路結(jié)構(gòu)
為了增強(qiáng)基于標(biāo)準(zhǔn)單元庫工藝的FPGA 的SEU容錯(cuò)能力,文中對配置存儲單元所使用的觸發(fā)器進(jìn)行三模冗余設(shè)計(jì),其電路圖如圖4 所示。
圖4 三模冗余電路圖
在該電路中,原來的寄存器被復(fù)制成了3 份,并且三路寄存器的輸出連接在一個(gè)多數(shù)表決器的輸入上。多數(shù)表決器是一個(gè)三輸入一輸出的表決器,由3個(gè)并聯(lián)的二輸入與門和一個(gè)三輸入或門級聯(lián)而成。一旦有一路寄存器受到SEU 的影響發(fā)生了邏輯翻轉(zhuǎn),其后面的多數(shù)表決器就會根據(jù)另外兩路正確的輸出結(jié)果最終輸出正確的結(jié)果。
三模冗余是把電路復(fù)制3 份,然后通過一個(gè)多數(shù)表決器來屏蔽錯(cuò)誤,因此只能屏蔽一路發(fā)生錯(cuò)誤而另外兩路正常的情況。如果SEU 積累到一定的程度導(dǎo)致三路邏輯電路中有兩個(gè)及以上的電路發(fā)生錯(cuò)誤,三模冗余電路的錯(cuò)誤屏蔽功能將會失效[16]。
為了解決這個(gè)問題,文中結(jié)合標(biāo)準(zhǔn)單元庫工藝FPGA 配置寄存器的特點(diǎn),設(shè)計(jì)了一個(gè)SEU 錯(cuò)誤的檢錯(cuò)和糾錯(cuò)電路。
圖5 是檢錯(cuò)電路,當(dāng)三路寄存器的輸出結(jié)果一樣時(shí),檢錯(cuò)結(jié)果輸出“1”,表示三模冗余電路中三路寄存器沒有發(fā)生SEU 錯(cuò)誤;當(dāng)三路寄存器中有一路輸出結(jié)果與另外兩路不一樣,檢錯(cuò)電路輸出“0”,表示三模冗余電路中有一路發(fā)生了SEU 錯(cuò)誤。
圖5 檢錯(cuò)電路
基于標(biāo)準(zhǔn)庫單元庫工藝的FPGA 有一個(gè)特點(diǎn),它的配置存儲器是由觸發(fā)器例化而得來的,因此,每一個(gè)存儲數(shù)據(jù)都有一個(gè)復(fù)位端和一個(gè)置位端,通過這兩個(gè)端口可以在必要時(shí)對寄存器的值進(jìn)行復(fù)位/置位操作,以恢復(fù)‘0’和‘1’的存儲值。如圖6 所示,檢錯(cuò)電路輸出的結(jié)果errorn 作為觸發(fā)器的復(fù)位/置位使能信號,當(dāng)檢測到SEU 錯(cuò)誤時(shí),errorn 信號拉低,如果三模冗余電路輸出結(jié)果Q_o 為‘0’,則對觸發(fā)器進(jìn)行復(fù)位操作,把觸發(fā)器的值由錯(cuò)誤的‘1’恢復(fù)到‘0’;如果Q_o 為‘1’,則對觸發(fā)器進(jìn)行置位操作,把觸發(fā)器的值由錯(cuò)誤的‘0’恢復(fù)到‘1’。
圖6 糾錯(cuò)電路
經(jīng)過糾錯(cuò)電路對觸發(fā)器進(jìn)行置位后,由SEU 導(dǎo)致翻轉(zhuǎn)錯(cuò)誤的觸發(fā)器就能夠恢復(fù)到正確的值,進(jìn)而避免因SEU 的累積使三模冗余電路失效。而且,當(dāng)SEU 檢測電路檢測到故障后會立即對寄存器進(jìn)行置位操作,這個(gè)響應(yīng)時(shí)間取決于檢測電路和糾錯(cuò)電路的門延遲,一般不超過1 ns,因此糾錯(cuò)速度非常快。
FPGA 抗SEU 設(shè)計(jì)的有效性主要有輻射實(shí)驗(yàn)和故障注入兩種驗(yàn)證措施。其中輻射實(shí)驗(yàn)成本高、實(shí)驗(yàn)周期長,同時(shí)目前國內(nèi)能夠做單粒子翻轉(zhuǎn)實(shí)驗(yàn)的實(shí)驗(yàn)室不多,而且輻射實(shí)驗(yàn)對發(fā)現(xiàn)的問題難以定位故障點(diǎn)。另一種驗(yàn)證措施是故障注入方式,該方式通過在電路中注入SEU 來模擬或者仿真實(shí)際應(yīng)用中電路發(fā)生SEU 的情況,具有成本低、速度快、定位精確等優(yōu)點(diǎn),是評估SEU 加固措施有效性的重要手段[9]。
用Verilog HDL 對電路進(jìn)行建模,并對電路產(chǎn)生激勵(lì),利用VCS 軟件進(jìn)行仿真,得到電路的輸入輸出波形圖,如圖7 所示。電路對寄存器進(jìn)行配置后,使寄存器存儲的值為‘0’,可以看到,三路寄存器輸出值和多數(shù)表決器的輸出全部為‘0’;在7 200 ps 時(shí)刻對三路寄存器中的一路Q_t_1 注入SEU 使這個(gè)寄存器的輸出值為‘1’,而另外兩路寄存器Q_t_2、Q_t_3保持原始值‘0’,可以看到,多數(shù)表決器的輸出值仍然保持正確的‘0’,而故障檢測電路的輸出errorn 出現(xiàn)了一個(gè)短暫的‘0’,使寄存器產(chǎn)生復(fù)位操作,復(fù)位后的值恢復(fù)到了正確的狀態(tài)‘0’。在13 400 ps 時(shí)刻作類似的操作,也得到了正確的結(jié)果。從以上功能仿真結(jié)果來看,電路實(shí)現(xiàn)了三模冗余的SEU 容錯(cuò)設(shè)計(jì),并且具有SEU 檢測和糾錯(cuò)的能力。
圖7 單比特錯(cuò)誤功能仿真
當(dāng)同時(shí)對兩路寄存器注入SEU 錯(cuò)誤時(shí),電路的檢錯(cuò)和糾錯(cuò)功能就失效了,如圖8 所示。在7 200 ps時(shí)刻對Q_t_2、Q_t_3 注入SEU 使寄存器輸出為‘0’,之后故障檢測器輸出為‘0’,但是此時(shí)多數(shù)表決器的值也變成了‘0’,電路發(fā)生了錯(cuò)誤,直到下一個(gè)時(shí)鐘上升沿時(shí)寄存器被重新寫入正確的值。這個(gè)驗(yàn)證結(jié)果與理論相符合。
圖8 多比特錯(cuò)誤功能仿真
單粒子效應(yīng)的電路級仿真可以采用雙指數(shù)電流源對單粒子入射造成的瞬態(tài)響應(yīng)進(jìn)行模擬[17-18]。
該模型的經(jīng)驗(yàn)公式如下:
式中,α為電荷收集的時(shí)間常數(shù),β為建立例子軌跡的時(shí)間常數(shù),I0為峰值電流。改變電流脈沖的峰值可得到不同LET 的單粒子脈沖,圖9 為該模型的脈沖波形。
圖9 雙指數(shù)電流源脈沖波形
在電路仿真過程中,把雙指數(shù)電流源注入到電路敏感節(jié)點(diǎn)即可模擬單粒子入射造成的瞬態(tài)響應(yīng)。文中在三模冗余電路的第一個(gè)觸發(fā)器的第二個(gè)鎖存器環(huán)中接入雙指數(shù)電流源,得到如圖10 所示的響應(yīng)??梢钥吹?,敏感節(jié)點(diǎn)受到單粒子轟擊后發(fā)生了翻轉(zhuǎn),導(dǎo)致第一個(gè)觸發(fā)器的輸出端Q 發(fā)生了翻轉(zhuǎn),但是同時(shí),檢錯(cuò)電路檢測出錯(cuò)誤,并經(jīng)過糾錯(cuò)電路把setn 置低,使觸發(fā)器產(chǎn)生置位操作,最終使觸發(fā)器的錯(cuò)誤翻轉(zhuǎn)被糾正。整個(gè)過程電路的輸出結(jié)果Q_o 沒有受到影響。由以上可以表明,該電路具有抗SEU 的能力。
圖10 電路敏感節(jié)點(diǎn)受到單粒子轟擊后的響應(yīng)
文中介紹了一種可綜合FPGA 的SEU 容錯(cuò)方法,采用三模冗余和檢錯(cuò)、糾錯(cuò)電路相結(jié)合的方法對配置單元觸發(fā)器進(jìn)行了容錯(cuò)設(shè)計(jì)。糾錯(cuò)電路充分利用數(shù)字標(biāo)準(zhǔn)單元庫中觸發(fā)器已有的置位、復(fù)位端,只增加少量的邏輯電路就可實(shí)現(xiàn)糾錯(cuò)的功能。該電路結(jié)構(gòu)不僅有傳統(tǒng)三模冗余電路抗SEU 的優(yōu)點(diǎn),還具有自動檢錯(cuò)、糾錯(cuò)電路,該電路采用寄存器傳輸級硬件,是可綜合的,因此可以用于可綜合FPGA 的SEU加固。仿真結(jié)果表明,該電路設(shè)計(jì)合理,達(dá)到了預(yù)期的容錯(cuò)目的,在可綜合FPGA 的SEU 容錯(cuò)設(shè)計(jì)中具有重要的參考意義。