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

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

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

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

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