孫鵬躍,劉旭輝,毛二坤,黃仰博,張書政,樓生強
(國防科技大學 電子科學學院, 湖南 長沙 410073)
靜態隨機存取存儲器(static random access memory,SRAM)型現場可編程的門陣列(field programmable gate array,FPGA)具有信息密度大、性能高、開發成本低以及可重新編程的特性,在空間領域具有越來越多的應用價值,但隨著SRAM型FPGA集成度的提高,對其在復雜的太空輻照環境工作的可靠性提出了更高的要求[1-3]。空間單粒子效應主要可以分為三類:配置存儲器翻轉、用戶邏輯翻轉以及控制單元翻轉[4-6]。配置存儲器翻轉占所有空間單粒子翻轉事件的90%以上,對載荷配置項的可靠性影響極大,一直以來是載荷抗輻照可靠性設計的重點,形成了一系列成熟、有效的抗輻照設計方法[7-9]。相比配置存儲器,控制單元發生單粒子翻轉的概率極低,一般為百年級以上[10-11],且難以通過單片FPGA實現加固,故目前載荷抗輻照設計一般不考慮控制單元的加固。而對于用戶邏輯部分而言,其發生單粒子翻轉的概率較高[12-13],且與用戶設計密切相關,難以形成體系化的抗輻照加固方法,目前已逐漸成為空間載荷抗輻照設計的瓶頸,特別是其中的塊隨機存儲器(block random access memory,BRAM),難以通過傳統的刷新操作消除空間單粒子翻轉的積累,是目前造成SRAM型FPGA空間單粒子異常的主要原因之一[14]。為此,主要研究SRAM型FPGA中BRAM資源的抗單粒子翻轉加固方法。
文獻[15]提出一種基于三模冗余的BRAM加固方法,但是該方法隨著存儲器數量的增多以及讀取速度的提高,對存儲的控制時序的要求也隨之提高,不適用于對面積和功耗要求較高的場合。在此基礎上,文獻[16]提出了一種部分三模冗余的加固方法,僅對關鍵功能模塊進行三模冗余,在一定程度上節省了面積的開銷。文獻[17]提出了一種基于格雷碼的BRAM加固方法,可以有效降低位翻轉發生的概率,但其自身可能存在可靠性問題,編碼和解碼電路都有可能發生單粒子翻轉的錯誤,導致最后的數據錯誤。
對于星載FPGA配置項而言,資源使用情況一般都嚴格受限,在進行抗空間輻照加固設計時,往往需要在可靠性和資源消耗之間折中[18]。并且,FPGA設計所消耗的資源越少,其在軌抗輻照可靠性必然會越高。因此,如何針對不同載荷配置項設計特點,設計一種在資源消耗和可靠性之間折中的BRAM抗輻照加固方法,對于提升載荷配置項抗輻照性能具有重要意義。本文在分析傳統BRAM抗輻照加固方法不足的基礎上,提出了一種基于分時刷新和位置約束的衛星載荷BRAM抗輻照加固方法:一方面通過監控內部算法時隙,實現BRAM的分時刷新;另一方面通過位置約束固定BRAM三模冗余后3塊BRAM的位置,大幅降低三模后BRAM被同時打翻兩模的概率。所述方法能夠在增加極少可配置邏輯塊(configurable logic block,CLB)資源的基礎上,有效提升BRAM的抗輻照可靠性。
SRAM型FPGA中含有豐富的BRAM存儲資源,是星載FPGA配置項中最常用的知識產權(intellectual property,IP)核,廣泛應用于數據緩存和參數存儲等,可以實現單口存儲器、雙口存儲器以及先入先出隊列(first input first output,FIFO)等功能。BRAM是星載FPGA用戶邏輯中單粒子發生概率最高的,占2.9%[19]。但由于BRAM中存儲的數據一直處于動態應用中,難以實現類似配置數據的定時刷新設計,因此,BRAM中累積的單粒子翻轉難以消除。
對于數據緩存類BRAM而言,盡管BRAM數據為中間結果,一定時間后會被算法自動修復,但BRAM數據錯誤期間已經對算法后續數據流產生了影響。而對于參數存儲類BRAM而言,用戶要求BRAM中數據保持不變,但在空間輻照條件下,即使對參數存儲BRAM進行了三模冗余,也無法解決單粒子累積造成的數據錯誤。因此,在星載配置項BRAM加固中,必須設計相應的單粒子累積消除方法,以保證數據的正確性。
傳統的單粒子累積效應消除方法主要有刷新和糾錯編碼兩類。對于刷新而言,常用架構如圖1所示。

圖1 刷新糾錯方法基本架構Fig.1 Basic architecture of refreshing error correction method
糾錯編碼方法不單獨占用BRAM端口,不會造成BRAM資源的浪費,但糾錯編碼方法并沒有從根本上糾正BRAM中數據的單粒子翻轉,只是在使用BRAM數據時能夠檢測2 bit錯誤并糾正1 bit錯誤。但隨著時間的積累,當BRAM中數據發生多比特錯誤時,糾錯編碼方法將失效。
為了從根本上解決BRAM單粒子翻轉的積累問題,必須采用三模冗余加刷新的策略。而針對傳統外部處理器刷新方法消耗資源,且容易發生BRAM讀寫沖突的問題,本文提出了基于分時自刷新的星載配置項BRAM加固方法,具體架構如圖2所示。BRAM及自刷新控制邏輯三模冗余設計后共有3條路徑(TR0、TR1、TR2),圖2中僅對TR0路徑進行了細化,每條路徑又包括了自刷新支路和算法讀寫支路,其中算法讀寫支路實現內部算法的BRAM訪問,自刷新支路實現BRAM數據的自刷新控制。分時自刷新設計的主要思想是通過算法監控模塊識別內部算法訪問BRAM的空閑時段,自刷新控制模塊根據當前刷新地址,將BRAM數據回讀,并經三模表決糾錯,再將糾錯后的數據回寫BRAM,并累加地址繼續刷新。一旦算法監控模塊檢測到內部算法忙,則立即停止刷新,并記錄當前刷新地址,待下次內部算法訪存空閑時繼續刷新。

圖2 基于分時刷新的BRAM加固方法基本架構Fig.2 Basic architecture of BRAM hardening method based on time-sharing refreshing
可以看到,上述架構不需要外部處理器干預即可完成BRAM的自刷新功能。內部算法監控模塊可確保BRAM自刷新在整個算法訪存空閑狀態下執行,因此,其不需要單獨占用一個BRAM端口,也不會造成BRAM訪問沖突。通過上述架構設計,衛星載荷FPGA能夠自主完成BRAM自刷新加固,不會造成BRAM沖突和資源浪費,僅需要增加少量的CLB資源即可實現。
算法監控模塊一般需要根據不同FPGA配置項功能進行設計,實現比較簡單。而對于自刷新控制模塊而言,可將其設計成通用化的共用基礎模塊(common building blocks,CBB),適用于不同的載荷FPGA配置項,提升開發效率。自刷新控制模塊主要通過有限狀態機(finite state machine,FSM)實現,其狀態定義如下:
S0:空閑狀態。復位后處于該狀態,若BRAM處于內部算法訪問忙狀態,則FSM一直處于空閑狀態,否則,進入S1狀態。
S1:BRAM數據讀取狀態。當檢測到BRAM訪問空閑時,進入自刷新數據讀取狀態,當BRAM數據讀取完成后,進入S2狀態。
S2:BRAM數據寫入狀態,在該狀態將三塊BRAM的讀取數據通過表決器進行表決,以修正單粒子翻轉錯誤,再將表決后的數據進行回寫,消除BRAM中的累積錯誤,寫入完成后進入S3狀態。
S3:單次刷新完成狀態。進入該狀態說明完成了BRAM單地址數據刷新,并控制刷新地址累加,并返回S0狀態,繼續下一地址刷新。
具體狀態轉移過程如圖3所示。

圖3 自刷新控制模塊狀態轉移圖Fig.3 State transition diagram of self-refreshing control module
SRAM型FPGA采用特殊設計的開關矩陣以提升面積利用率和信號傳輸質量。BRAM資源也有對應的開關矩陣和BRAM互聯配置資源,若上述資源發生單粒子翻轉,可能造成三模設計中的兩模同時發生錯誤,造成載荷功能異常。造成上述問題的根本原因是兩個BRAM位置分布超過了安全的幾何布線間隔,使得單粒子翻轉有可能影響相鄰兩塊BRAM的功能同時異常。
而在星載FPGA配置項實現過程中,用戶一般不會對布局布線過程進行控制,電子設計自動化(electronic design automation,EDA)工具為達到好的布線結果,往往將三模后的BRAM布局在鄰近位置,會造成三模后超過2塊BRAM布局位于同行或者同列的情況,進而導致單粒子翻轉造成三模后設計發生功能異常的概率大幅提升。為此,提出了基于位置約束的BRAM布局方法,鑒于星載FPGA設計資源占用率一般較高,若采用復雜的位置約束和迭代策略,很有可能造成整個設計布線失敗,本文在EDA工具對三模后設計進行布局布線時,增加簡單的BRAM位置約束腳本,將BRAM布局在指定的位置上。
通過將BRAM三模冗余后各冗余模塊的布線區域從幾何上分割開,避免任意兩個BRAM共用一個互聯矩陣和可編程互連線相鄰的情況,從根本上降低單粒子翻轉引起多模設計功能同時異常的概率。
主要從衛星載荷FPGA BRAM數據自刷新和位置約束兩個方面對BRAM抗空間輻照設計方法進行了改進,為了驗證所述加固方法的有效性,下面從地面故障注入試驗、重離子輻照試驗以及衛星載荷在軌實測情況三個層面對本文算法的性能進行驗證。
目前地面故障注入試驗主要是針對SRAM型FPGA配置數據進行故障注錯,無法對用戶邏輯部分,如BRAM存儲數據進行故障注入[20],因此,地面故障注入試驗難以驗證BRAM自刷新設計的性能,但故障注入試驗可實現對BRAM互聯部分的故障注入,進而對BRAM位置約束設計的性能進行評估。
通過故障注入試驗對BRAM位置約束的性能進行驗證。提出一種基于配置數據異常率(rate of fault configuration bits, RFCB)的FPGA配置數據故障注入評估指標,其更容易通過故障注入試驗獲取,能夠直觀反映載荷FPGA設計抗輻照設計的性能,具體定義如下:
(1)
式中:be為會引起配置項功能異常的比特數,可通過故障注入試驗測試,bT為配置數據總比特數。對于本文關注的BRAM互聯而言,bT專指BRAM互聯部分總比特數,對于XQR2V3000型FPGA而言,bT為4 224 bit。
針對BRAM位置約束故障注入采用載荷配置項故障注入測試系統,具體組成如圖4所示,主要包括參考單元、被測單元、測試單元、刷新控制器以及上位機組成,其中上位機由數字信號處理器(digital signal processing,DSP)實現,其他4個單元均由Xilinx XQR2V3000型FPGA實現。參考單元運行被測配置項的單模設計,作為標準參考數據流;被測單元運行采用本文所述的BRAM加固后的三模設計;測試單元完成被測單元和參考單元數據流的采集和比對功能;刷新控制器主要負責對被測FPGA的動態局部刷新,以及對所有FPGA的上電加載;上位機通過外部存儲器接口(external memory interface,EMIF)與其余單元通信,控制被測單元和參考單元數據流的生成,并記錄測試結果。

圖4 故障注入測試系統結構圖Fig.4 Structure of fault injection test system
通過上述故障注入平臺,通過位置約束腳本修改被測單元中三模BRAM的位置,對不同BRAM位置約束情況下BRAM互聯部分的異常比特率進行測試,具體測試結果如表1所示。

表1 不同BRAM位置約束下測試結果Tab.1 Test results under different BRAM location constraint
測試結果表明,同一功能BRAM三模后3塊BRAM位于同行或者同列時,單粒子翻轉造成功能異常的RRFCB最高;當有兩模同行或同列時,RRFCB有一定下降;當三模BRAM不同行同列時,RRFCB明顯下降,相比于三模同列情況降低了約42.6%。上述結果僅為單一BRAM位置約束后的可靠性改善,若對更多BRAM進行位置約束,則可靠性改善也將更為明顯。當然,位置約束在一定程度上降低了EDA軟件布局布線優化的自由度,甚至可能造成布局布線失敗,因此,在實際應用過程中,需要根據實際設計選擇性地對關鍵BRAM進行位置約束設計。
為驗證所述方法對星載設計面積和速度的影響,采用SM4算法對分時刷新和位置約束BRAM加固方法前、后的資源占用率和速度結果進行對比分析,以衛星載荷常用的XQR2V3000器件為例,SM4算法運算過程中的S盒(substitution box,SBOX)通過BRAM實現,為提升運算效率,采用兩個SBOX進行并行運算,面積和速度評估結果如表2所示。可以看到,針對SM4算法,增加SBOX BRAM分時刷新和位置約束加固方法后,三模設計的4輸入查找表僅增加84個(9.24%),寄存器僅增加81個(9.93%),時鐘頻率僅下降18.234 MHz(8.52%)。實際上,上述資源消耗并不會隨著原有算法復雜度的提升而大幅增加,因此,對于更為復雜的設計而言,其資源增加的比例將會更小,甚至忽略不計,但速度的下降可能隨著原有算法復雜度的提升而更為明顯。

表2 不同設計面積和速度對比分析Tab.2 Comparison of area and clock frequency for different design
為進一步評估基于分時刷新的BRAM加固設計性能,2018年11月,在蘭州中科院近代物理研究所,采用蘭州重離子加速器產生的Ta離子,線性能量傳輸(linear energy transfer,LET)值為81.35 MeV·cm2/mg,對衛星載荷進行了重離子輻照試驗。該型載荷研制階段分為A星和B星兩個階段:在A星階段由于未對存儲關鍵參數的BRAM進行針對性加固設計,僅進行了三模冗余加固,存在單粒子翻轉積累的問題,導致其在軌可靠性不太理想。在B星階段,采用了本文所述的基于分時刷新和位置約束的BRAM抗輻照加固方法。重離子輻照試驗是在該型衛星載荷B星發射前進行的可靠性評估試驗,對A星配置項和B星配置項進行了對比測試,測試過程以單粒子功能中斷達到5次,或離子總注量達到107個/cm2為輻照停止準則,上述兩個條件以先達到者為準。輻照試驗可靠性評價指標為單粒子功能中斷截面,其主要表征了單個粒子輻射到器件單位面積上發生單粒子功能中斷的事件的概率,是表征被測器件對單粒子效應敏感程度的公認指標,其定義如下:
(2)
式中,N為單粒子功能中斷次數,F為器件單位截面上入射粒子的總數。輻照試驗測試結果如表3所示。

表3 輻照試驗測試結果Tab.3 Results of irradiation tests
可以看到,相比于A星,B星單粒子功能中斷(single event functional interrupt,SEFI)截面從5.40×10-4cm2下降到9.92×10-5cm2,下降約81.63%,可靠性大幅提升。盡管輻照試驗無法直接對BRAM改進部分進行性能評估,但相比A星階段設計,B星階段可靠性設計改進主要集中在BRAM加固設計上,因此上述結果在很大程度上證明了本文所述方法的有效性。
通過目前該型載荷的在軌運行情況,進一步驗證基于分時刷新和位置約束的BRAM加固方法的性能。該型衛星載荷A星階段共計3顆衛星,由于A星階段BRAM加固設計不充分,其在軌發生了多次單粒子翻轉異常,2015年8月至2017年9月期間,3顆衛星共計出現了7次在軌異常,后續經異常歸零分析,7次在軌單粒子翻轉異常的分析結果匯總如表4所示。可以看到,在所有7次在軌單粒子異常中,BRAM參數單粒子累計異常占42.9%,是造成該型工程在軌異常的主要原因。在B星階段,采用了基于分時刷新和位置約束的BRAM抗輻照加固方法,目前25顆B星在軌運行未發生一次單粒子翻轉異常,這充分證明了本文所述加固方法的有效性。

表4 在軌單粒子翻轉異常的分析結果匯總Tab.4 Summary of analysis results of single event upset on navigation satellites
盡管目前針對SRAM型FPGA配置文件抗空間輻照可靠性設計已形成一系列成熟技術,但針對用戶邏輯部分,特別是BRAM的可靠性設計,相關研究還比較缺乏。傳統針對BRAM的刷新設計雖然能夠消除單粒子翻轉的積累,但存在資源消耗大,且存在BRAM訪問沖突造成在軌功能異常的風險。本文提出了基于分時刷新和位置約束的BRAM抗空間輻照可靠性設計方法,通過監測內部算法流程,通過時分復用的方式實現FPGA對BRAM的自刷新設計,并通過BRAM的位置約束有效降低單粒子翻轉造成多模BRAM同時異常的概率。通過故障注入試驗、重離子輻照試驗以及在軌實際運行情況三個層面,對本文所述方法的性能進行了充分驗證。然而,所述BRAM自刷新方法與用戶設計密切相關,通用性不夠強,需要根據FPGA內部算法進行針對性設計。另外,位置約束方法在FPGA資源比較緊張的情況下,可能會引起EDA軟件布局布線性能下降,甚至失敗,后續還需要研究位置約束設計策略,進一步提升增加位置約束后的布局布線性能。