夏 俊,張嘉偉,孫 晨,朱昶文,江亞州
(1.上海衛星工程研究所,上海 201109;2.上海航天電子技術研究所,上海 201109)
航天器在軌運行期間,會遭遇多種惡劣的空間天然輻射環境的影響,這些輻射包括宇宙射線、空間高能粒子(高能電子和質子)等[1]。由空間高能粒子導致的單粒子翻轉(SEU,single-event upsets)對航天器在軌穩定、可靠的運行造成嚴重的威脅,發生嚴重錯誤時甚至會導致航天器軟件執行錯誤引起姿態失控等重大故障,因此,單粒子翻轉問題一直以來都是航天領域不可忽視的問題。采用宇航級等高等級元器件,可有效降低航天器電子系統受單粒子翻轉影響的概率。但一方面,抗單粒子翻轉高等級加固器件的價格非常昂貴,且品種有限,同時由于政治和軍事原因還受到國外禁運;另一方面,航天器性能要求越來越高,功能要求越來越復雜,部分高等級器件受限于邏輯資源等無法適用。因此,越來越多的工業級大規模現場可編程門陣列(FPGA,field programmable gate array)開始逐步應用于航天領域。信號處理核心工作器件XC7V690T-2FFG1761I為工業級靜態隨機存取存儲器(SRAM,static random-access memory)型FPGA芯片,已逐步開始應用于各類航天器中,但由于其抗輻照能力較弱,在軌運行期間存在單粒子翻轉的風險。為保障航天器在軌安全運行,需專門開展針對XC7V690T的抗單粒子系統架構設計。
國內外相關研究機構對單粒子防護設計方法進行了一些研究,文獻[2]和文獻[3]提出常見的刷新方法主要有內部刷新和外部刷新。其中內部刷新是利用FPGA的內部配置訪問接口(ICAP,Internal Configuration Access Port)對配置數據進行回讀刷新,內部刷新最大的優點在于不用配置單獨的外部刷新芯片,刷新效率更高。另外,外部刷新的主要方法有回讀刷新和定時刷新。回讀刷新是采用外部刷新芯片對配置數據進行回讀與檢測,外部刷新的硬件架構較為復雜且刷新效率略低。定時刷新是指按照預先設計的時間長度對配置數據進行刷新,定時刷新的效率較低。文獻[4]提出了一種基于軟錯誤緩解(SEM,Soft Error Mitigation)的抗單粒子翻轉方法,該方法刷新效率較高,同時也降低了SEM核自身發生單粒子翻轉的概率。文獻[5]提出了一種FPGA在軌重構的方法及工程實施方案,通過實時刷新結合三模冗余(TMR,Triple Modular Redundancy)設計可以有效降低FPGA發生單粒子翻轉的概率。文獻[6]提出了一種通過在軌自主重構的方法,有效減少單粒子翻轉的次數。
綜上,針對在硬件加固設計及軟件加固設計基礎上,為了提高工業級SRAM型FPGA芯片XC7V690T在軌抗單粒子翻轉能力及配置文件注數修改的靈活性,對某航天器通信機基于XC7V690T的抗單粒子系統架構(主要包括硬件架構、軟件架構的設計與實現)以及在軌驗證情況分別進行介紹。
航天器電子系統單粒子翻轉防護設計的目標主要有以下兩方面:1)要確保在發生單粒子翻轉時不影響航天器的主要業務,確保航天器業務的連續性;2)要確保在發生單粒子翻轉時不影響航天器的安全,確保航天器姿態、能源、測控信道等穩定可靠。為系統推進單粒子翻轉防護工作,主要是要強化系統、單機、器件等全層級的單粒子翻轉防護設計措施,提升航天器的單粒子翻轉防護設計水平,降低單粒子翻轉對航天器在軌運行的影響。下面主要對航天器目前采用的一些單粒子翻轉防護設計進行系統性的介紹。
1)元器件選用:
采用宇航級等高等級元器件,可有效降低航天器電子系統受單粒子翻轉影響的概率。
在單粒子翻轉方面,沒有經過抗SEU加固的器件,通常具有較低的線性能量傳遞(LET,linear energy transfer)閾值和較高的在軌翻轉率,而經過了SEU加固的器件可具有較高的LET閾值和較低的在軌翻轉率[7]。
2)錯誤檢測與糾正:
錯誤檢測與糾正(EDAC,error detection and correction)是抗單粒子翻轉的有效技術之一[8-10],在航天領域已廣泛應用于隨機存取存儲器(RAM,random-access memory)、帶電可擦可編程只讀存儲器(EEPROM,electrically erasable programmable read-only memory)的抗單粒子翻轉防護設計。對于以上常用的RAM、EEPROM等存儲器,同時在不同區域發生多bit翻轉的概率非常低,因此可以利用EDAC的方法來對1 bit翻轉錯誤進行自動檢測與糾正。采用EDAC的方法的主要目的是容忍單粒子翻轉的發生,通過采用錯誤檢測并予以糾錯的方式避免單粒子翻轉錯誤對系統性能造成更大的影響。可用于EDAC方法的糾錯碼比較多,常用的糾錯碼主要有漢明碼、卷積碼以及R-S(Reed-Solomon)碼等,不同的糾錯碼方式各具特點,需要針對實際應用場景選擇適合的編碼方式。
3)冗余設計:
冗余設計也是抗單粒子翻轉的有效技術之一[11],在航天領域已得到廣泛應用的冗余設計主要是三模冗余設計,三模冗余設計的主要目的是通過將原有的功能模塊擴展為3個一模一樣的模塊,通過一個三取二表決器對3個功能模塊的輸出結果進行表決,以解決即使其中某一模塊因為單粒子翻轉功能受到影響,也不影響三取二的最終結果,提高了航天器電子系統的可靠性與安全性。通過對整個功能模塊進行三模冗余的設計對航天器電子系統抗單粒子翻轉性能有很大的提升,但是邏輯資源會增加3倍,對資源的開銷會比較大,因此在FPGA邏輯資源不是很充足的情況下要實現所有功能模塊全部三模冗余在工程上是很難實現的。除了功能模塊的三模冗余,其他的三模冗余方式還有關鍵參數三模冗余、關鍵寄存器三模冗余等。對關鍵參數和關鍵寄存器的三模冗余,主要環節是要準確識別出哪些關鍵參數及關鍵寄存器在航天器軟件運行過程中被單粒子打翻或被非正常篡改時會觸發較為嚴重的問題,涉及到航天任務中所使用的各系統軟件的性能、可靠性和安全性等方面。對于這些影響到航天器正常運行的關鍵參數與寄存器,往往需要進行三模冗余的設計,而對關鍵參數和關鍵寄存器進行三模冗余設計的資源消耗要比模塊級三模冗余要低得多,工程可實現性更高。
4)刷新:
刷新(Scrubbing)方法主要有內部刷新和外部刷新。其中內部刷新是利用FPGA的內部配置訪問接口對配置數據進行回讀刷新。外部刷新主要的方法有回讀刷新和定時刷新。回讀刷新是采用外部刷新芯片對配置數據進行回讀與檢測,該方法中,SRAM型FPGA的配置文件一般存放在于可編程只讀存儲器(PROM,programmable read-only memory)中,PROM中的配置文件具有一次固化即無法修改的特性,因此其抗單粒子翻轉的能力非常高[12],利用獨立的反熔絲FPGA按一定的頻率對配置文件進行回讀,并與存放于PROM中的配置文件進行實時比對,如果發現校驗數據比對不成功,則自主進行程序的重新加載。該方法也是現階段航天領域抗單粒子翻轉比較主流的一種設計方法[13-19]。定時刷新則是按照預先設計的時間長度對配置數據進行定期刷新。
5)重構:
重構方法主要是指在軌運行過程中因程序中的安全性可靠性設計欠缺,通過地面遙控上注全新的配置文件,并取代原始版本的過程,通過重構的方式,可以靈活的解決在軌的一些不可預料的問題,提高軟件運行的可靠性,有效降低空間單粒子對航天器電子系統的影響,目前越來越多的航天器開始采用在軌重構的方法來進行軟件的升級,提升軟件的健壯性[20]。
6)指令復位或重啟:
目前絕大多數在軌長加電航天器電子系統均設計有指令復位或重啟功能,在軌遇到單粒子翻轉事件導致電子系統功能異常時,可以通過地面遙控指令進行復位或重啟。針對重要的長加電產品,航天器星載計算機軟件一般會設計自主異常監視功能,若出現異常可通過星載計算機自主指令復位或重啟,用以解決長加電產品在軌單粒子翻轉問題,提升系統自主恢復的能力。
除了以上目前主流的采用的抗單粒子翻轉防護設計方法外,還有以下一些方法可用于單粒子翻轉防護設計。
1)模擬器件單粒子翻轉防護:
單粒子翻轉不僅僅出現在邏輯器件中,對于具有雙穩態器件的模擬電路,也存在發生單粒子翻轉的可能,如電壓比較器。在電壓比較器的應用中,比較器的輸入端電壓差設計成盡可能大,可有效地防止電壓比較器產生單粒子翻轉。
2)看門狗(WDT,watchdog)復位:
看門狗復位也是目前航天器電子系統用于避免因單粒子翻轉造成電子產品程序運行異常的一種常用方法。當電子產品因單粒子翻轉導致程序跑飛時,無法按照預定的時間周期進行喂狗操作,看門狗芯片發出復位信號使得軟件能夠恢復初始狀態重新執行,避免因單粒子翻轉造成的軟件跑飛而影響整個任務。
3)利用累加和檢查存儲器內容的正確性:
對固化后的星上程序進行累加和計算,將其作為自測試的判斷基準,存儲在特定區域內。運行過程中定期進行累加和計算,根據任務情況決定取全累加和或分段累加和,并與所存儲的基準值比對,若不等,則由系統進行容錯切換管理。這種常用的容錯手段,也是對單粒子翻轉是否引起程序異常的有效判斷方法。
此外,還可以采用自診斷程序、多重編碼、指令重復執行、分支流程作兩次以上有效性判別、建立健康和安全模式、地面遙控注入等方式提高系統抗單粒子能力。
某航天器通信機采用側向層疊結構形式,共分為4個模塊,由后至前依次為電源模塊、射頻模塊、刷新模塊及信號處理模塊。電源模塊接收航天器平臺提供的一次電源,轉換輸出單機內其他模塊正常工作所需要的各路電源。刷新模塊包含了上電程序配置、健康監控和在軌重構的功能。射頻模塊接收天線經雙工器發送過來的上行信號,通過混頻、濾波、放大等轉換成中頻模擬信號,送給信號處理模塊。射頻模塊還接收信號處理模塊發送過來的中頻模擬信號,經正交上變頻、放大、濾波后轉換成下行射頻信號,經雙工器后再通過天線發射出去。
通信機信號處理及刷新模塊設計框圖如圖1所示,采用了Xilinx公司的SRAM型FPGA XC7V690T平臺,主要具備以下功能:

圖1 模塊設計框圖
1)接收射頻模塊發送過來的中頻模擬信號,通過模數轉換芯片采集后轉換成12 bit位寬的數字信號,傳送給XC7V690T芯片進行信號處理;
2)將信號數據碼流經XC7V690T芯片進行處理后,通過數模轉換芯片進行轉換形成中頻模擬信號,發送給射頻模塊;
3)針對XC7V690T芯片的加載、刷新及重構功能。
針對該硬件架構,主要給出模塊層和器件層的加固設計方案,針對XC7V690T FPGA的加固設計主要由三部分組成:電源監控電路和控制電路、XC7V690T FPGA內部調用的SEM核和充當監控和維護核心的AX500 FPGA。AX500 FPGA除了需要監控XC7V690T FPGA配置和SEM工作狀態,還要負責監測和控制XC7V690T的供電情況,在識別故障后通過刷新和重上電等手段進行故障恢復。
該硬件架構由XC7V690T芯片、反熔絲FPGA AX500芯片和4片512 Mb容量的FLASH存儲器組成。其中:
1)XC7V690T芯片為需進行加固設計的FPGA 器件;
2)FLASH 用來存儲XC7V690T芯片的配置文件;
3)AX500芯片的主要功能為讀取FLASH中的配置信息、上電加載和重載XC7V690T芯片、監控SEM IP核的狀態。AX500芯片與XC7V690T芯片接口中的SPI-1為專用配置管腳,用來加載或重載FPGA。
系統軟件架構框圖如圖2所示。AX500芯片在上電時讀取FLASH中的配置信息,通過SPI接口加載目標XC7V690T芯片,加載完成后,監測XC7V690T芯片的SEM IP核返回的狀態信號,若檢測到配置數據錯誤、SEM IP核自身發生錯誤或發生不可糾正的錯誤,則視需求讀取FLASH中的配置信息對目標XC7V690T芯片進行重載操作。

圖2 軟件架構框圖
AX500反熔絲FPGA監控XC7V690T的配置狀態,通過監控XC7V690T的DONE信號,若一定時間(外部須有時間跳線選擇)內反熔絲FPGA未收到DONE信號,表示XC7V690T未配置成功。此時,AX500反熔絲FPGA拉低PROG信號對XC7V690T重新配置(熱啟動)。若熱啟動次數超過8次后仍未成功配置XC7V690T,表示無法進行板內重載,AX500反熔絲FPGA通過遙測鏈路將模塊故障信息下傳地面。熱啟動重載流程圖如圖3所示。

圖3 熱啟動流程圖
在熱啟動無法成功配置時,需要通過發送指令進行干預。該情況下,收到地面遙控指令,可以啟動斷電操作,通過斷電重載進行恢復。若冷啟動8次仍未成功配置XC7V690T,AX500反熔絲FPGA將其斷電,并通過遙測鏈路將模塊故障信息下傳地面。冷啟動加載流程圖如圖4所示。

圖4 冷啟動流程圖
XC7V690T與AX500配置監控接口具體信號如表1所示。

表1 XC7V690T與AX500配置監控接口
XC7V690T內部調用SEM IP核實現對配置RAM資源的自主監控和維護。SEM核利用片內的ICAP接口訪問配置RAM資源,并通過自帶的差錯控制編碼(ECC,error correcting code)和循環冗余校驗碼(CRC,cyclic redundancy check)校驗資源識別發生翻轉的配置RAM位,并能進行自動修復。
該功能可以配置成3種模式。
1)修復模式:以ECC算法為基礎,可以糾正所有的單比特軟錯誤;
2)增強修復模式:以ECC和CRC算法為基礎,能修復任意的單比特和相鄰雙比特的翻轉軟錯誤;
3)替換模式:能夠修復任意多個比特錯誤。
SEM通過片內ICAP接口訪問配置RAM,而傳統的回讀刷新通過片外SelectMAP接口訪問配置RAM,兩種接口的時序效率相差不大,但是外部回讀需要通過PCB走線,還要考慮反熔絲FPGA的頻率限制,所以主頻通常遠低于FPGA內部ICAP頻率,因而需要更多時間,這使得SEM的故障識別時間遠低于外部的回讀刷新。
同時,由于XC7V690T FPGA沒有公開配置幀的結構,無法進行精確的局部刷新,而全局刷新耗時長,并且其中絕大多數的刷新操作沒有實際意義,加固效率較低。SEM技術則能夠通過局部刷新的手段,實現非常高效的故障恢復。
根據具體應用情況,SEM IP選擇增強修復模式的糾錯策略。XC7V690T與AX500 SEM監控接口具體信號如表2所示。

表2 XC7V690T與AX500 SEM監控接口
然而,SEM本身仍然有可能會因為單粒子翻轉而發生故障,雖然發生這種情況的概率要遠遠低于FPGA本身發生單粒子翻轉的概率,但仍然有必要針對這種情況設計故障恢復預案。通過反熔絲FPGA直接監控SEM的狀態信息,可以判斷SEM功能是否正常工作,并在發生故障時通過重載(熱啟動)進行恢復。
反熔絲FPGA需要啟動重載操作的異常內容包括:
1)SEM核未能成功完成初始化;
2)SEM核在工作狀態時發生異常;
3)SEM核監測到不可恢復并且是必要比特錯誤;
4)SEM核監測到連續三次相同地址的必要錯誤。
當出現上述情況時,反熔絲FPGA嘗試對XC7V690T進行重載(熱啟動)恢復,并且將異常計數+1。如果累積符合8次都未能恢復該異常,則反熔絲FPGA停止重載恢復,并通過遙測鏈路下傳相關故障信息。
XC7V690T SEM監控流程圖如圖5所示。

圖5 XC7V690T SEM監控流程圖
采用3片FLASH存儲配置程序,用于配置文件三取二校驗功能。為了進一步提升可靠性,新增1片FLASH用于在軌重構。第4片FLASH用于在軌重構(第1~3片FLASH在軌期間不可進行寫操作),重構數據流通信接口為異步RS422接口。
XC7V690T輸出至反熔絲FLASH的訪問接口SPI,用于訪問bit配置文件。而反熔絲FLASH則需要維護4片SPI型FLASH。當XC7V690T需要訪問自己的配置FLASH時,反熔絲FPGA會通過SPI接口發來的請求,反熔絲FPGA解析SPI指令和地址,并根據當前的配置模式,選擇對4片SPI FLASH進行操作。
在軌重構工作流程設計如下:
1)地面發送遙控指令,請求重構,并告知重構區域(FLASH內存空間內的首地址及長度)。
2)單機收到指令后對目標FLASH中的對應區域進行擦除操作,擦除完成后發送遙測數據告知擦除完成,若超過指定時間后擦除仍未完成,則判定擦除失敗,FLASH中該部分區域失效。
3)單機通過異步RS422接口接收重構數據流,每接收一幀(幀長與FLASH芯片的頁長度相符)數據,寫入FLASH中,并根據接收到的CRC值對FLASH中的該幀數據進行校驗,如校驗通過,則發送校驗通過信號,請求接收下一幀數據,反之,則反饋校驗失敗信號。數據發送方收到失敗信號后重新發送該幀數據,如連續收到三次失敗信號,則跳出本次重構流程。
4)當單機收到整個程序的校驗指令和校驗CRC值時,表示完整數據流已傳輸完畢,單機啟動整個程序的CRC校驗,校驗失敗則表示本次重構失敗,反之,則復位FPGA芯片,通過重構后的FLASH芯片重新加載程序,如遙測參數正常,方可判定為本次重構有效,單機通過遙測接口反饋該次重構結果(成功/失敗)。
重構流程示意圖如圖6所示。

圖6 重構流程示意圖
采用該系統架構在某航天器通信機上完成了在軌驗證。在軌期間對該通信機進行了多次測試,如圖7所示,在軌測試期間共進行了12次開關機,通信機均加載正常,三取二報錯計數為零。

圖7 三取二報錯計數在軌測試結果
在軌測試期間,XC7V690T內部SEM IP核成功進行了一次SEM糾錯,未造成SEM異常(SEM異常計數為零),如圖8所示,未影響通信機的正常功能。

圖8 SEM糾錯次數及異常次數在軌測試結果
在軌驗證結果表明,在航天器運行過程中,采用本方案多次圓滿地完成了XC7V690T加載與刷新,單機在軌工作穩定正常。此外,重構措施在地面研制階段,進行了重構驗證,提供了方便的程序更換手段。
針對核心工業級SRAM型FPGA芯片XC7V690T抗輻照能力較弱,在軌運行期間存在單粒子翻轉的風險的問題,提出了一種基于XC7V690T的在軌抗單粒子翻轉系統架構。在軌驗證結果表明,采用工業級SRAM型FPGA芯片XC7V690T的某航天器通信機在軌測試過程中成功進行了SEM糾錯,通信機在軌工作正常,通信鏈路穩定,滿足使用要求。表明該系統架構可以有效提升XC7V690T抗單粒子翻轉能力,可以為其他SRAM型FPGA抗單粒子翻轉設計提供借鑒與參考。