吳 楠,陳 強,官友廉,張萬玉
(1.中國電子科技集團公司第五十四研究所,河北 石家莊 050081;2.陸軍裝備部裝備項目管理中心,北京 100071)
目前,反熔絲型[1]FPGA由于其良好的抗輻射能力在航天電子設備中應用廣泛,美國、歐洲和中國在空間應用中使用的FPGA都以反熔絲型為主。與反熔絲型FPGA相比,SRAM型[2]FPGA具有更高的性能、更多的邏輯資源和更低的開發(fā)成本,可重復編程的特性使它能夠對航天電子設備進行在軌更新和維護,在航天領域具有廣泛的應用前景[3]。Xilinx公司Virtex系列FPGA是一種在航天電子設備中常用的SRAM型FPGA。
SRAM型FPGA在空間應用時容易受到空間高能粒子的影響產生單粒子翻轉,使FPGA配置存儲器數(shù)據發(fā)生錯誤[4]。FPGA刷新技術是一種有效減緩FPGA配置存儲器發(fā)生單粒子翻轉錯誤的措施,從刷新控制方式上可分為外控刷新和自主刷新2種刷新方式[5]。文獻[6-8]提出了一種外控刷新方法,采用高可靠可編程器件為刷新控制單元,實現(xiàn)FPGA配置存儲器的重配置。文獻[9]提出了一種自主刷新方案,利用FPGA中的PowerPC硬核構建片上刷新控制系統(tǒng),利用其外設HWICAP實現(xiàn)對ICAP的讀寫控制。該方案系統(tǒng)復雜度高,占用FPGA資源多。本文提出了一種基于ICAP和FRAME_ECC電路的Virtex系列FPGA自主刷新方法,該方法不需要使用PowerPC硬核,結構簡單,占用系統(tǒng)資源少,試驗結果表明此方法能夠有效檢測并糾正FPGA配置存儲器發(fā)生的數(shù)據位翻轉錯誤。
FPGA外控刷新原理如圖1所示。
圖1 FPGA外控刷新原理
Virtex FPGA為需要被刷新的FPGA,其工作在SelectMAP配置模式的從模式下,M2,M1,M0 都為110。刷新控制器件用于實現(xiàn)對Virtex FPGA的初始全部配置、配置數(shù)據回讀、配置數(shù)據重配置即刷新等功能,該器件多選用高可靠的FPGA或抗輻照加固的專用集成電路,用于提高刷新控制電路的可靠性[10]。PROM用于存儲Virtex FPGA的初始配置和刷新數(shù)據。
FPGA自主刷新原理如圖2所示。
圖2 FPGA自主刷新原理
Virtex FPGA 為需要被刷新的FPGA,同時其刷新控制電路也集成在片內,F(xiàn)PGA工作在SelectMAP配置模式的主模式下,M2,M1,M0 都為011。PROM中存儲Virtex FPGA的初始配置數(shù)據。FPGA工作時,配置存儲器加載完成后,F(xiàn)PGA對配置存儲器的回讀和刷新功能由片內刷新控制單元控制ICAP接口完成[11],刷新控制單元和外控刷新架構中的刷新控制器件功能相似,在硬件架構上減少了一片抗輻照加固FPGA,節(jié)約了系統(tǒng)開發(fā)成本。FPGA片內刷新控制單元電路需做三模冗余[12],提高其空間應用時抗單粒子效應的能力。
以Xilinx公司Virtex-7系列XC7VX485T型FPGA為例研究FPGA自主刷新技術。FPGA自主刷新系統(tǒng)組成框圖如圖3所示。
圖3 FPGA自主刷新系統(tǒng)組成框圖
FPGA自主刷新系統(tǒng)主要由刷新控制單元、ICAP讀寫控制單元、ICAP接口單元、幀數(shù)據存儲單元、位交換單元、幀糾錯碼單元、糾錯碼譯碼單元和幀數(shù)據糾錯單元等組成。
刷新控制單元主要實現(xiàn)對刷新系統(tǒng)其他各模塊的使能及讀寫控制;ICAP讀寫控制單元通過對ICAP接口的讀寫控制實現(xiàn)對FPGA配置存儲器的訪問;ICAP接口單元是配置存儲器的訪問接口[13];幀數(shù)據存儲單元用來存儲1幀回讀的配置數(shù)據,用來對回讀數(shù)據進行檢錯和糾錯;位交換單元用于實現(xiàn)對ICAP接口輸入、輸出數(shù)據的按位交換功能;幀糾錯碼單元通過漢明碼編碼來檢測配置幀數(shù)據是否發(fā)生錯誤,并輸出校驗值;糾錯碼譯碼單元對幀糾錯碼電路輸出的校驗值進行譯碼,給出1位數(shù)據錯誤情況下的錯誤位位置;幀數(shù)據糾錯單元對幀數(shù)據存儲單元中1幀配置數(shù)據指定字中的錯誤位取反,實現(xiàn)對1位錯誤配置數(shù)據的糾正功能。
FPGA自主刷新系統(tǒng)工作流程如圖4所示。
自主刷新系統(tǒng)啟動后,由ICAP讀寫控制單元通過ICAP接口讀取1幀配置數(shù)據,將回讀到的數(shù)據經位交換后存入到幀數(shù)據存儲單元(BRAM),在回讀數(shù)據的最后一個周期,F(xiàn)RAME_ECC電路計算出回讀數(shù)據的ECC值,并與存儲在該幀中的原始ECC值對比,給出校驗值。通過糾錯碼譯碼單元對校驗值進行譯碼,如果校驗值表明該幀數(shù)據沒有錯誤,則完成本次檢錯;若校驗值表明該幀數(shù)據存在1位錯誤,則通過校驗值譯碼后的信息確定該幀數(shù)據中的錯誤字和錯誤位,通過幀數(shù)據糾錯單元將BRAM中指定字中的錯誤位取反,實現(xiàn)1位數(shù)據錯誤的糾正功能,再將糾錯后的配置字數(shù)據寫回到BRAM,最后經過數(shù)據位交換單元將BRAM中糾正后的數(shù)據通過ICAP接口寫回到配置存儲器,從而實現(xiàn)對1幀配置數(shù)據的糾錯刷新功能,之后進行配置存儲器中其他幀的檢錯刷新;若校驗值表明該幀數(shù)據存在2位及以上錯誤,自主刷新系統(tǒng)不具備糾錯能力,則輸出不可修復錯誤信號,同時系統(tǒng)啟動其他糾錯措施如系統(tǒng)重新上電等。
圖4 FPGA自主刷新系統(tǒng)工作流程
ICAP提供了一種從FPGA內部訪問配置存儲器的通道,在Virtex-7系列FPGA中,可以例化ICAPE2原語實現(xiàn)該接口[14]。ICAP接口示意如圖5所示。
圖5 ICAP接口示意
ICAP端口說明如表1所示。
表1 ICAPE2端口說明
端口名方向位寬描述CLKInput1時鐘CSI_BInput1片選I[31:0]Input32配置數(shù)據輸入RDWR_BInput1讀寫選擇O[31:0]Output32配置數(shù)據輸出
ICAP時鐘端口CLK支持最高100 MHz的時鐘。ICAP數(shù)據輸入端口I和數(shù)據輸出端口O均為32位,可以實現(xiàn)對配置存儲器的高速讀寫操作。除了輸入、輸出和時鐘信號,ICAP還包括片選信號CSI_B(低電平有效)和讀寫選擇信號RDWR_B(低電平寫有效,高電平讀有效)。
ICAP接口的讀寫時序如圖6所示。
圖6 ICAP接口的讀寫時序
通過ICAP訪問配置存儲器時,在片選信號有效前需要先給出讀寫選擇信號,即在片選信號有效時采樣讀寫選擇信號,并開始寫入或讀出第一個有效數(shù)據。Virtex-7系列FPGA一幀配置數(shù)據字數(shù)為101,對于一個讀或寫操作周期,共回讀或寫入101個32位字數(shù)據。
根據 ICAP接口協(xié)議[15],ICAP的輸入和輸出數(shù)據需要進行位交換操作,16位數(shù)據的位交換示意如圖7所示。
圖7 16位數(shù)據位交換示意
16位數(shù)據的位交換方式為每8位數(shù)據高低位數(shù)據互換。32位數(shù)據的位交換方式與16位數(shù)據位交換方式相同。
Virtex-7系列FPGA內嵌入了一種用于配置存儲器檢錯和糾錯的幀糾錯碼電路,該電路利用13位的漢明碼校驗,可以檢測并糾正一幀回讀數(shù)據中1位錯誤,也可以檢測一幀回讀數(shù)據中2位錯誤,同時輸出錯誤狀態(tài)指示信號。Virtex-7系列FPGA中,可以例化FRAME_ECCE2原語,實現(xiàn)對FPGA配置存儲器數(shù)據的檢錯和糾錯。FRAME_ECC電路接口示意如圖8所示。
圖8 FRAME_ECC電路接口示意
FRAME_ECC電路端口說明如表2所示。
表2 FRAME_ECC電路端口說明
端口名方向位寬描述SYNDROMEVALIDOutput1校驗值有效SYNDROMEOutput13ECC校驗值ECCERROROutput1ECC錯誤指示CRCERROROutput1CRC錯誤指示
當SYNDROMEVALID信號為高電平時,SYNDROME信號反映了當前回讀數(shù)據的錯誤信息。如果校驗值信號的每一位都為0,表示沒有錯誤發(fā)生;如果最高位為1,其他位不全為0,表示發(fā)生了1位錯誤;如果最高位為0,其他位不全為0,表示發(fā)生了2位錯誤;如果最高位為1,其他位全為0,表示發(fā)生了校驗錯誤;當發(fā)生超過2位錯誤時,該值是不確定的。其中,當發(fā)生1位錯誤時,ECCERROR為1,同時SYNDROME的低12位會給出校驗結果,指示錯誤發(fā)生的位置;當發(fā)生超過1位錯誤時,CRCERROR為1,表示系統(tǒng)發(fā)生不可修復的錯誤,需要啟動其他措施修復數(shù)據錯誤。
Virtex-7系列FPGA中SYNDROME[11:5]與錯誤字位置的映射如表3所示。
表3 SYNDROME[11:5]與錯誤字位置的映射
X值25≤ X ≤ 3132≤ X ≤ 64X ≥65錯誤字位置X-25X-26X-27
注:表中X= SYNDROME[11:5]。
通過表3中SYNDROME[11:5]數(shù)值與錯誤字的映射關系來確定每幀回讀配置數(shù)據中錯誤字的位置,SYNDROME[4:0]為該錯誤字中錯誤位的位置。由SYNDROME數(shù)值定位每幀回讀配置數(shù)據的錯誤位,實現(xiàn)對配置存儲器數(shù)據的檢錯,通過對錯誤位的位翻轉實現(xiàn)對配置存儲器數(shù)據的糾錯。
通過故障注入[16]方式驗證FPGA自主刷新技術的檢錯糾錯效果。SRAM型FPGA的故障注入通常指對FPGA配置存儲器故障注入,其實現(xiàn)方式是將配置存儲器中的指定位翻轉,來模擬空間輻射引發(fā)的單粒子翻轉效果[17]。實現(xiàn)故障注入的過程與刷新的過程相似,通過ICAP訪問配置存儲器,首先回讀配置幀,再對回讀數(shù)據的指定位取反,最后將該幀數(shù)據寫回到配置存儲器,即實現(xiàn)配置存儲器的1位翻轉錯誤注入[18]。
以幀地址0x00000F9F的配置幀數(shù)據為例進行指定字指定位(第68字,第26位)的1 bit注錯。從ICAP接口回讀到的第68字數(shù)據為0x32E00064,位交換后對應bit文件中數(shù)據0x4C070026,注錯時對0x4C070026的第26位取反,數(shù)據變?yōu)?x48070026,位交換后寫入到ICAP的數(shù)據為0x12E00064,實現(xiàn)對該幀指定字指定位的1 bit注錯操作。
啟動FPGA自主刷新功能,F(xiàn)PGA自主刷新技術1bit檢錯糾錯試驗驗證結果如圖9所示。
圖9 FPGA自主刷新技術1 bit檢錯糾錯試驗驗證結果
當回讀到0x00000F9F幀地址對應的注錯幀數(shù)據時,1 bit錯誤指示信號eccerror_o=1,表明檢測到該幀配置數(shù)據中存在1 bit錯誤。同時在校驗值有效信號syndromevalid的上升沿采樣Frame_ECC電路模塊輸出的校驗值,校驗值syndrome_o為0x1BFA,對校驗值譯碼可定位錯誤數(shù)據位置(第68字,第26位)。根據校驗值譯碼結果,回讀數(shù)據0x12E00064,糾錯后寫入數(shù)據0x32E00064,與注錯前原始數(shù)據相同,實現(xiàn)對一幀回讀配置數(shù)據中1 bit錯誤的檢測及糾正。
以幀地址0x00000F9F的配置幀數(shù)據為例,進行定字指定位(第68字,第26位;第62字,第26位)的2 bit注錯。
2 bit注錯的每1 bit注錯步驟與前面1 bit注錯步驟相同,在第1 bit注錯(第68字,第26位)后不啟動刷新,繼續(xù)執(zhí)行第2 bit注錯(第62字,第26位:0x20000040注錯后為0x00000040)。
啟動FPGA自主刷新功能,F(xiàn)PGA自主刷新技術2 bit檢錯試驗驗證結果如圖10所示。
圖10 FPGA自主刷新技術2 bit檢錯試驗驗證結果
當回讀到0x00000F9F幀地址對應的幀數(shù)據時,62字數(shù)據0x00000040,第68字數(shù)據0x12E00064。在校驗值有效信號syndromevalid的上升沿采樣Frame_ECC模塊輸出的校驗值,校驗值syndrome_o為0x00C0,對校驗值進行譯碼,syndrome_o[12]=0且syndrome_o[11:0]≠0,表明該幀數(shù)據具有2 bit錯誤,同時2 bit錯誤指示信號unrepaired_error_o=1,實現(xiàn)對一幀回讀配置數(shù)據中2 bit錯誤的檢測。
SRAM型Virtex系列FPGA由于其邏輯資料豐富及可重復編程的特型在航天電子設備中應用廣泛。以Virtex-7系列FPGA為例,基于ICAP和FRAME_ECC電路對FPGA自主刷新技術進行研究,減緩單粒子翻轉對FPGA的影響。通過故障注入方式模擬FPGA單粒子翻轉錯誤,并通過試驗驗證FPGA自主刷新技術的檢錯糾錯效果。試驗結果表明,F(xiàn)PGA自主刷新技術可以實現(xiàn)對每幀回讀配置存儲器數(shù)據中1比特位翻轉錯誤的糾正和2比特位翻轉錯誤的檢測,有利于提高FPGA空間應用時的抗單粒子翻轉能力。