錢小東 宣浩 韓晉 喬興旺
(1.中國電子科技集團公司第三十八研究所 安徽省合肥市 230088)(2.孔徑陣列與空間探測安徽省重點實驗室 安徽省合肥市 230088)
基于CMOS 工藝的SRAM 型FPGA 以其功能密度高、體積小、功耗低、半定制可靈活配置、速度快、可重復(fù)編程和容量大等優(yōu)點,被大量應(yīng)用于衛(wèi)星電子產(chǎn)品中[1]。但是受地球輻射帶和宇宙射線等惡劣空間環(huán)境的影響,衛(wèi)星系統(tǒng)中的電子元器件受單粒子事件和總劑量等空間輻射影響,會出現(xiàn)工作異常,甚至?xí)?dǎo)致整個系統(tǒng)的崩潰。隨著電子系統(tǒng)復(fù)雜度越來越高,對FPGA 等超大規(guī)模集成電路的依賴性越來越強,電路容量增大,工作電壓的降低使得在空間輻射環(huán)境下的可靠性大幅降低。因此對FPGA 進行抗單粒子容錯設(shè)計是各國航天界的研究重點和熱點。
針對SRAM 型FPGA,在實際空間應(yīng)用中實施并能顯著提高FPGA 可靠性的技術(shù)可分為設(shè)計緩解技術(shù)和重配置技術(shù)。設(shè)計緩解技術(shù)是指利用冗余(硬件冗余、信息冗余)技術(shù)對設(shè)計進行故障屏蔽,比如硬件主備份、三模冗余(TMR)或者檢錯糾錯碼(DEAC)等技術(shù),但是冗余設(shè)計勢必需要增加額外資源,因此會帶來系統(tǒng)的性能、大小、重量、功能和可靠性的影響。除此以外,對SRAM 型FPGA 的配置存儲器進行自動刷新、回讀和重配置是一種有效的抗SEU 的方法[2]。自動刷新能夠周期性地消除SEU 對FPGA 配置位帶來的影響。回讀和重配置則是在FPGA 運行過程中通過回讀檢驗配置數(shù)據(jù)的正確性,僅在發(fā)現(xiàn)錯誤時進行重新配置,因此能夠減少配置次數(shù),更加高效地對故障進行恢復(fù)。
傳統(tǒng)的針對國內(nèi)星載應(yīng)用較多的SRAM 型FPGA,特別是Xilinx Virtex4 或者Virtex5 實現(xiàn)的回讀刷新糾錯技術(shù)、重構(gòu)技術(shù)等,主要在FPGA 配置接口添加外圍電路,包括使用反熔絲FPGA 作為控制芯片、抗輻照PROM 作為碼流存儲芯片,例如使用A54SX32A芯片實現(xiàn)的對SRAM 型FPGA 配置數(shù)據(jù)進行ms 級的周期刷新[3]。但是此種方式需要針對應(yīng)用SRAM 型FPGA 的配置方式、配置幀格式,刷新配置流程等熟悉掌握,軟硬件設(shè)計較為復(fù)雜。因此本文使用國產(chǎn)智能刷新控制芯片實現(xiàn)SRAM 型FPGA 的刷新配置、在軌重構(gòu)等功能,且軟硬件設(shè)計難度大幅降低,同時可靠性極大提高。
作為一款專用集成電路,北京微電子技術(shù)研究所研制的通用智能刷新控制電路BM501‐003ECBRH 可以支持Xilinx 公司多種耐輻射型以及北京微電子技術(shù)研究所兼容類型的SRAM 型FPGA 空間應(yīng)用提供上電配置、實時刷新、在軌重構(gòu)、單粒子功能中斷監(jiān)測的應(yīng)用解決方案,保證FPGA 在軌使用的可靠性和安全性,大幅度降低刷新系統(tǒng)設(shè)計的難度和復(fù)雜度。基于BM501‐003ECBRH 的高可靠性星載FPGA 平臺設(shè)計方案如圖1所示。

圖1:基于動態(tài)重構(gòu)管理集成電路的FPGA 平臺系統(tǒng)設(shè)計
由圖1 可知,BM501 位于FPGA 與存儲碼流的PROM 或者Flash 之間,起到數(shù)據(jù)交換的橋梁作用。BM501 對外主要有Nor Flash 接口、PROM 接口、與FPGA 的SelectMAP 接口以及硬件配置端口。針對本設(shè)計方案中選用的BQR5VSX95T 型FPGA,F(xiàn)lash選用一片復(fù)旦微電子的64Mb Nor Flash JFM29LV641RH 作為重構(gòu)的碼流存儲器,同時支持使用兩片串聯(lián)的XCF32P PROM 作為調(diào)試配置存儲,并且為了調(diào)試方便,采用主串模式配置電路將FPGA 的JTAG 調(diào)試口接出。后期可使用XQR17V16/B17V16RH 作為正樣配置存儲器替代Flash 型PROM XCF32P。系統(tǒng)時鐘Sysclk 最高頻率為20MHz,所有功能都由該時鐘驅(qū)動,使用晶振持續(xù)提供工作時鐘確保刷新周期的完整性。外圍電源監(jiān)測芯片上電產(chǎn)生低電平復(fù)位信號給BM501,復(fù)位后即進入上電配置狀態(tài)。
FPGA 上電/復(fù)位后工作于從SelectMAP 模式,BM501 根據(jù)SEL_BIT 管腳狀態(tài)選擇從PROM(SEL_BIT 管腳下拉接低電平)或者Flash(SEL_BIT 管腳上拉接高電平)讀取配置碼流對FPGA 進行上電/復(fù)位配置,一旦檢測到DONE 信號拉高,說明上電配置成功,隨后進行工作模式獲取以及任務(wù)調(diào)度,工作模式默認由外部FPGA 動態(tài)配置使能信號(DYNA_PROG,接1,動態(tài)重配使能)、FPGA 刷新模式控制信號(MODE_SCRUB,接0,定時刷新使能)、FPGA 刷新使能信號(EN_SCRUB,接1,刷新使能)、刷新/回讀間隔設(shè)置信號(INTERVEL,接000,刷新間隔設(shè)置為最低時間間隔,214.7s)等信號管腳設(shè)定,改變管腳狀態(tài)或者由UART 輸入指令可以更新內(nèi)部寄存器狀態(tài),并根據(jù)內(nèi)部寄存器狀態(tài)確定相應(yīng)的工作模式,對FPGA 執(zhí)行器件識別、GoldenCRC 獲取、指令配置、定時刷新、定時回讀等工作任務(wù)。
初始設(shè)計時將SEL_BIT 管腳下拉接地,上電配置期間BM501讀取PROM 中固化的碼流數(shù)據(jù)配置FPGA 配置空間,一旦配置成功,會根據(jù)外圍電路設(shè)置執(zhí)行定時刷新、回讀等操作。如果需要更改工作模式,則通過UART 讀取內(nèi)部寄存器確定當前狀態(tài)并寫相應(yīng)內(nèi)部寄存器執(zhí)行相應(yīng)任務(wù),比如更改刷新間隔,或者從Flash 中讀取碼流文件對FPGA 進行重配置。
配置/刷新/回讀的狀態(tài)實時更新在內(nèi)部寄存器中。SEFI 檢測中對 DONE 信號的監(jiān)測貫穿在整個流程中,DONE 變低時根據(jù)當前設(shè)置的碼流信息源立即執(zhí)行 FPGA 配置;對FAR 寄存器、STATUS 寄存器的監(jiān)控在每次回讀/刷新之前進行,SEFI 監(jiān)測結(jié)果同步更新在內(nèi)部寄存器中。
通過UART 接口命令,用戶可以讀取內(nèi)部寄存器、設(shè)置工作模式、對FLASH 進行操作控制、發(fā)送指令配置FPGA。UART 接口采用9 位的傳輸模式,包含1bit 起始位、8bit 數(shù)據(jù)位和1bit 結(jié)束位,每一字節(jié)的數(shù)傳按照以下格式自左向右傳輸,具體如表1所示。

表1:UART 接口字節(jié)傳輸格式
在進行多字節(jié)傳輸時,先發(fā)送最高字節(jié)數(shù)據(jù),然后發(fā)送次高字節(jié)數(shù)據(jù),最后發(fā)送最低字節(jié)數(shù)據(jù),各字節(jié)低位在前,高位在后。通過設(shè)置UART_BR_SEL 管腳決定UART 的傳輸波特率,也可以通過向內(nèi)部寄存器寫入自定義的波特率重載值完成UART 接口波特率的切換。
當FPGA 的碼流源選擇為Flash 時,在每次刷新/回讀操作之前,BM501 都會對Flash 中的數(shù)據(jù)進行輪巡校驗,每組編碼后的數(shù)據(jù)若存在1bit/2bit 錯誤則會自動糾正將正確的數(shù)據(jù)寫入Flash,若存在3bit 及以上錯誤將在內(nèi)部寄存器中指示出錯的扇區(qū)并終止后續(xù)的刷新操作。除了糾正Flash 中碼流的錯誤,利用有限的星上硬件資源,發(fā)揮可重構(gòu)技術(shù)的技術(shù)優(yōu)勢可以實現(xiàn)目前星載,特別是小衛(wèi)星多任務(wù)可并行、應(yīng)用功能可重構(gòu)、系統(tǒng)高集成度的發(fā)展趨勢[4]。
通過其他處理器與BM501 建立的UART 通信,只需按照BM501 UART 接口數(shù)據(jù)鏈路層傳輸協(xié)議就可以實現(xiàn)對Flash 的擦除、編程、復(fù)位等操作,從而實現(xiàn)在軌重構(gòu)的功能。執(zhí)行FLASH 操作建議先將芯片設(shè)置為空閑工作模式。圖2 為碼流燒寫軟件流程圖。

圖2:FPGA 重構(gòu)操作流程
數(shù)據(jù)鏈路層的幀包含命令幀和應(yīng)答幀,應(yīng)答幀分為2 種,一種是代表校驗結(jié)果與超時信號的應(yīng)答幀,另外一種是有效數(shù)據(jù)應(yīng)答幀,在讀取BM501 內(nèi)部寄存器和讀Flash 時會返回有效應(yīng)答幀。以暫停刷新功能為例,向BM501 內(nèi)部寄存器2 發(fā)送“寫寄存器”操作,會立即返回0xD2D2。命令格式如表2所示。

表2:寫寄存器
其中UART ID 為UART 接口ID 地址信號,通過UART_ID[4:0]外部管腳配置本節(jié)點UART 接口地址;長度域自命令域開始的字節(jié)數(shù);命令域0x05 表示寫寄存器命令;地址域低6 位為寫寄存器的起始地址,此時為寄存器2;數(shù)據(jù)域為UART 鏈路層有效數(shù)據(jù),最大長度不超過1024 字節(jié),且約定采用偶數(shù)字節(jié)的長度;校驗域采用異或和的校驗方式,校驗范圍從幀頭到數(shù)據(jù)域部分。
把一個原始FPGA 碼流或經(jīng)BCH 編碼之后的碼流燒寫到Flash中,需要發(fā)送若干個重構(gòu)數(shù)據(jù)幀,每幀發(fā)送之后讀寄存器0 的[7:4]標志位判斷該幀數(shù)據(jù)是否編程成功(0xa 表示編程完成,0x9 表示發(fā)生編程超時)。若編程成功則可以繼續(xù)發(fā)下一幀,編程未完成時,讀寄存器串口無響應(yīng)。
碼流發(fā)送完成之后,如果需要對Flash 中燒寫的碼流進行校驗,發(fā)送FLASH 存儲碼流的起始地址和結(jié)束地址。若采用BCH 編碼方式預(yù)先對碼流進行編碼,為實現(xiàn)EDAC功能,還需將每個扇區(qū)的Golden CRC 寫入FLASH。可選擇全局 Golden CRC 命令對碼流進行整體校驗,在以上數(shù)據(jù)和命令發(fā)送完畢之后再發(fā)送一個全局Golden CRC 命令即可。
本文基于國產(chǎn)智能刷新控制芯片設(shè)計實現(xiàn)了一種空間高可靠性FPGA 應(yīng)用平臺方案,借助于智能刷新電路的“智能性”、“易用性”使用較少的外圍電路和簡單的管腳配置,結(jié)合軟件流程設(shè)計就可以實現(xiàn)較為復(fù)雜和全面的SRAM 型FPGA 智能刷新、糾錯、重構(gòu)等高級功能,進而可以有效解決SRAM 型FPGA 在空間應(yīng)用中面臨的單粒子翻轉(zhuǎn)挑戰(zhàn),同時大幅降低刷新重構(gòu)軟硬件復(fù)雜度,提高系統(tǒng)可靠性,滿足航天領(lǐng)域的應(yīng)用需求。