姜同全,薛淑娟,張 騰,劉中偉,王 磊,崔戰(zhàn)國,姜連祥
(山東航天電子技術(shù)研究所,山東 煙臺 264670)
為了保證產(chǎn)品的可靠性需求,傳統(tǒng)的星載計算機通常選用高質(zhì)量等級的元器件:中央處理器(CPU, central processing unit)則選用抗輻照性能高的器件,程序存儲器則選用具有防單粒子的反熔絲器件,數(shù)據(jù)存儲器則選用具有EDAC功能的器件[1]。但是,高等級元器件的選用不但增加了產(chǎn)品的研制成本還會影響產(chǎn)品的研制周期。近年來,商業(yè)航天市場領(lǐng)域取得了飛速的發(fā)展,而低成本和短周期的微納衛(wèi)星平臺則備受眾多商業(yè)衛(wèi)星公司的青睞。
憑借采購周期短、成本低和集成度高等優(yōu)點,商用現(xiàn)貨(COTS, commercial-off-the-shelf)器件越來越多地被應用在商業(yè)微納衛(wèi)星的平臺上[2-3]。但由于抗空間環(huán)境的能力較弱,COTS器件在軌經(jīng)常會出現(xiàn)單粒子翻轉(zhuǎn)和單粒子鎖定等問題,從而一定程度上降低了產(chǎn)品的可靠性。為了解決低成本和高可靠之間的需求矛盾,文獻[4]采用雙機冗余、代碼備份的方法提出了一種基于工業(yè)器件的星載計算機系統(tǒng),并通過建立馬爾可夫鏈數(shù)學模型,從數(shù)學理論的角度證明了,具有冷備資源的冗余方案可獲得相對高的系統(tǒng)可靠性。文獻[5]采用基于PowerPC體系結(jié)構(gòu)的SM750處理器作為控制核心,提出了一種“SM750+FPGA”架構(gòu)的高性能星載計算機方案,并搭載嵌入式操作系統(tǒng) AIC-OS,為星載計算機設計提供一種新思路。文獻[6]針對系統(tǒng)級芯片(SOC, system on a chip)具有集成性高、可編程性強的特點,提出了一種片內(nèi)熱備份、片外冷備份和混合冗余策略的星載計算機處理系統(tǒng)設計方案,并通過建模的方式進行了系統(tǒng)可靠度驗證。
在星載計算機軟件設計中,對應用軟件通常采用三模冗余的加載方式,并具備在軌軟件重構(gòu)的功能,以提高計算機應用程序?qū)臻g環(huán)境的可靠性。為了支持軟件三模冗余加載和在軌軟件重構(gòu)等功能,星載計算機的軟件架構(gòu)通常采用“引導+應用”的方式[7]:具體而言,在星載計算機加電,并完成硬件系統(tǒng)復位之后,由引導軟件將應用軟件的三模冗余副本進行三取二比對,并在完成相關(guān)配置后由引導軟件對應用軟件進行加載啟動[8]。通常地,由于星載計算機所用的處理器在固化啟動方式上的限制,引導程序只能在可編程只讀存儲器(PROM, programmable read-only memory)里存儲單份,因此具有單點故障的風險。針對SPARC V8架構(gòu)處理器(AT697),文獻[9]將錯誤檢測與糾正(EDAC, error detection and correction)和三模冗余兩種方法結(jié)合起來,并將引導(BOOT)區(qū)域和主程序區(qū)域進行三模冗余處理,提出一種容錯啟動系統(tǒng)設計方法;在啟動階段,此方法利用AT697的EDAC功能對BOOT 區(qū)域進行檢查和糾錯;但此方法僅限于特定類型的處理器,而且其并未考慮BOOT三模冗余失效的情況。
采用工業(yè)級的處理器芯片SmartFusion2,本文提出了一種低成本的星載計算機最小系統(tǒng)架構(gòu),通過掛載異構(gòu)形式的存儲器芯片,既降低了星載計算機的研制成本,又進一步地提高了系統(tǒng)可靠性和安全性。通過結(jié)合基于SmartFusion2的計算機系統(tǒng)架構(gòu),本文提出一種星載計算機的多TMR副本的片外啟動方法,不但實現(xiàn)了Cortex M3處理器內(nèi)核的片外啟動的方式,還通過將引導軟件的多個副本存儲在分散的不同區(qū)域,且每個軟件副本均進行三模冗余,以進一步地提高整個星載計算機系統(tǒng)的可靠性。
伴隨著對綜合電子技術(shù)集成度要求的提高,越來越多的星載計算機采用具有片上SOC資源的控制處理器,既可以節(jié)省單獨的CPU芯片及其外圍電路,而且還可依靠芯片上豐富的場可編程門陣列(FPGA, field programmable gate array)邏輯資源對外提供更靈活的接口功能擴展[10]。如圖1所示,本文提出了一種基于工業(yè)級COTS器件的低成本星載計算機最小系統(tǒng)設計架構(gòu),其選用的SmartFusion2系列M2S090T型FPGA芯片,其內(nèi)部集成了一個166 MHz的Cortex M3硬處理器內(nèi)核,邏輯資源豐富,功耗低而且體積小。具體地,在片內(nèi)存儲資源方面,M2S090T型FPGA芯片具有512 K的內(nèi)部ENVM程序存儲器(embedded NVM),支持錯誤檢查與糾正(ECC, error correcting code),可用于存放固化程序,64 K的內(nèi)部ESRAM數(shù)據(jù)存儲器[11-12](embedded SRAM),支持EDAC,可用于存儲程序變量。在片內(nèi)接口控制器方面,M2S090T型FPGA芯片內(nèi)部集成了1路CAN控制器,2路多模式異步串口控制器(MMUART, multi-mode universal asynchronous/synchronous receiver/transmitter),以及2路串行外設接口(SPI, serial peripheral interface)控制器和2路集成電路總線(I2C, inter-integrated circuit)控制器等。更重要的是,此款工業(yè)級的FPGA芯片目前已經(jīng)具有大量飛行驗證經(jīng)歷。
圖1 基于SmartFusion2的星載計算機框架圖
除了ENVM和ESRAM等片上存儲資源外,本文提出的星載計算機最小系統(tǒng)還在片外并行地掛載兩片非易失閃存(NorFlash)芯片S29GL512P、并行地掛接兩片MRAM芯片MR25H512均作為程序存儲器,并行地掛載兩片具有支持EDAC功能的靜態(tài)隨機存取存儲器(SRAM, static random-access memory)芯片IS61WV51216EDBLL作為數(shù)據(jù)存儲器。其中,NorFlash芯片S29GL512P(支持16位數(shù)據(jù)和32位讀寫操作)共128 M可用于存儲引導程序和應用程序,并分別按照三模冗余方式進行存儲;磁性隨機存儲器(MRAM, magnetoresistive random access memory)芯片MR25H512(支持8位、16位和32位讀寫操作)共1 M,在物理特性上具有抗單粒子的特點,可對引導程序和應用程序的副本按照單份方式進行存儲,以節(jié)省MRAM的使用空間;片上ENVM芯片(支持8位、16位和32位讀寫操作)具備ECC錯誤檢查與糾正功能,也可對引導程序和應用程序的副本分別按照單份的方式進行存儲;片外SRAM芯片IS61WV51216EDBLL具有硬件EDAC功能,可對存儲數(shù)據(jù)的單比特翻轉(zhuǎn)進行自動糾正,一方面可以作為數(shù)據(jù)存儲器,用于全局變量和局部變量的分配,另一方面還可作為應用程序的運行空間(應用程序可由引導程序從程序存儲器搬移到SRAM);片上ESRAM支持EDAC功能,可作為數(shù)據(jù)存儲器,用于全局變量和局部變量的分配。
M2S090T型FPGA芯片上的Cortex M3內(nèi)核是通過內(nèi)部集成的AHB總線[13-14],實現(xiàn)對片上ENVM、ESRAM、CAN控制器等模塊的讀寫訪問;其中,F(xiàn)abric interface controller(FIC0)是片上SOC系統(tǒng)內(nèi)部的一個擴展模塊,掛接在AHB(advanced high performance bus)總線上,實現(xiàn)Cortex M3內(nèi)核與FPGA邏輯之間的AHB總線時序轉(zhuǎn)換,作為Cortex M3內(nèi)核對外進行讀寫訪問的唯一接口?;赟martFusion2的星載計算機最小系統(tǒng)框架如圖1所示,Cortex M3內(nèi)核和FPGA邏輯分別作為兩大相對獨立的功能模塊,在FPGA資源內(nèi)實現(xiàn)了一個“AHB時序轉(zhuǎn)換模塊”,作為AHB總線時序協(xié)議和Local總線時序協(xié)議之間的轉(zhuǎn)換橋梁,實現(xiàn)Cortex M3內(nèi)核與FPGA內(nèi)部寄存器和片外存儲器之間的數(shù)據(jù)訪問。另外,采用FPGA自帶的CCC鎖相環(huán)模塊實現(xiàn)由FPGA板上晶振到CPU時鐘和FPGA工作時鐘頻率變換,Cortex M3內(nèi)核和FPGA邏輯分別屬于兩個時鐘域,在進行FPGA邏輯設計使需充分考慮跨時鐘域時序處理,并在綜合布局布線中添加對應的時鐘約束。在片上Cortex M3處理器內(nèi)有一個CPU鎖相環(huán)模塊(MCCC,MSS clock conditioning circuitry ),通過對CPU時鐘進行分頻產(chǎn)生掛接在AHB總線上的各類控制器的工作時鐘。
2.1.1 Cortex M3復位啟動序列
在傳統(tǒng)的ARM 架構(gòu)中,0x0000,0000地址是一條跳轉(zhuǎn)指令,并由0x0000,0000地址開始執(zhí)行第一條指令。但在Cortex M3架構(gòu)中,0x0000,0000地址用于存儲主堆棧指針(MSP, main_stack_pointer)初始值,中斷向量表[15]緊接其后,其中中斷向量表的第一個條目指向復位完成后第一條進行執(zhí)行的指令[16]。Cortex M3復位序列示意如圖2所示,在復位信號撤銷之后,Cortex M3處理器所執(zhí)行的第一個操作就是:首先從0x0000,0000地址獲取MSP的初始值,然后再從0x0000,0004地址獲取PC的初始值(其數(shù)據(jù)最低位必須是1)。其中,程序計數(shù)器(PC, program counter)初始值就是復位向量的地址,并從此地址進行取指。
圖2 Cortex M3復位序列示意圖
2.1.2 Cortex M3中斷向量表
Cortex M3中斷向量表的分布如表1所示,在應用程序執(zhí)行過程發(fā)生某類異?;蛘咧袛嗪螅珻ortex M3根據(jù)中斷向量表確定其服務例程或者中斷服務程序的入口地址。其中,Cortex M3中斷表默認起始地址是0x0000,0000,但為了支持動態(tài)重分發(fā)中斷,Cortex M3允許從其它地址進行異常和中斷向量的定位,即中斷向量表重定位。具體地,通過修改Cortex M3的“中斷向量表偏移量寄存器”(0xE000,ED08地址),可實現(xiàn)中斷向量表的重定位,其中,中斷向量表偏移量寄存器(VTOR, vector table offset register)的具體定義如表2所示。在支持軟件重構(gòu)的“引導程序+應用程序”的實現(xiàn)方式下,中斷向量表重定位最常用的實現(xiàn)方式是:在數(shù)據(jù)存儲區(qū)(SRAM或者ESRAM)分配部分連續(xù)空間用于存儲中斷向量表。在程序引導期間完成各中斷向量入口地址的賦值,并在引導完成后,通過修改VTOR寄存器,啟用內(nèi)存空間中的新向量表,實現(xiàn)中斷向量表的重定位和動態(tài)調(diào)整。
表2 中斷向量表偏移量寄存器含義
2.1.3 SmartFusion2啟動地址重映射
在M2S090T型FPGA中,SmartFusion2默認是將片上ENVM(起始地址0x6000,0000)重映射為0x0000,0000地址,因此在片上系統(tǒng)完成復位操作后,Cortex M3內(nèi)核默認從片上ENVM啟動,即從ENVM上加載程序并啟動運行。除此之外,SmartFusion2還支持將片上ESRAM(起始地址0x2000,0000)和閃存(MDDR, Mobile DDR SDRM)(起始地址0xA000,0000)重映射為0x0000,0000地址,并可指定一定大小的偏移地址。SmartFusion2啟動地址重映射配置如圖3所示,在Microsemi廠商自帶的FPGA集成開發(fā)環(huán)境Libero SOC中,通過修改Cortex M3內(nèi)核的“AHB Bus Matrix模塊”中的“Remapped Region to location 0x0000000 of Cortex-M3 ID Code space”即可實現(xiàn)SmartFusion2默認啟動地址的重映射。另外,“eNVM Remap Base Address(Cortex-M3)”用于指定中斷向量表的偏移地址,最大支持256K的偏移地址大小。
圖3 SmartFusion2啟動地址重映射配置圖
2.1.4 SmartFusion2的片外啟動方法
充分利用Cortex M3內(nèi)核的復位啟動序列、中斷向量表可重定位和SmartFusion2支持啟動地址重映射的特性,本文設計了一種可靈活擴展的片外啟動方法(片外存儲器的程序進行加載和啟動),具體的設計要點如下:
1)在FPGA邏輯開發(fā)過程中,按照圖3所示,在Libero SOC集成開發(fā)環(huán)境中通過更改FPGA的“Remapped Region to location 0x00000000 of Cortex-M3 ID Code space”配置,將ESRAM重映射為0x0000,0000地址。
2)系統(tǒng)加電運行后,由FPGA邏輯對Cortex M3內(nèi)核提供足夠時間的持續(xù)復位,在Cortex M3內(nèi)核復位信號撤銷之前,由FPGA邏輯實現(xiàn)的“FPGA引導啟動模塊”將片外存儲器上引導程序的中斷向量表搬移到片上ESRAM的0x2000,0000為首地址的一段地址空間內(nèi)。
3)在本文的設計中,由于ESRAM被重映射為啟動地址,在FPGA邏輯的復位信號撤銷之后,Cortex M3內(nèi)核會從ESRAM首地址(即0x2000,0000地址)獲取MSP初始值,并從0x2000,0004地址獲取PC指針的初始值,由于ESRAM上的中斷向量表指向的是片外存儲器上的引導程序,因此Cortex M3內(nèi)核將從指向片外的復位向量地址取指。這樣,依靠其自身特有的復位啟動序列,Cortex M3內(nèi)核便自動地跳轉(zhuǎn)到片外程序存儲器的空間運行。
4)在本文的設計中,由于ESRAM被映射到0x0000,0000地址,而且中斷向量表已經(jīng)被FPGA邏輯的“FPGA引導啟動模塊”搬移到ESRAM空間,在Cortex M3內(nèi)核成功啟動程序運行并發(fā)生異?;蛘咧袛嗪?,Cortex M3內(nèi)核會從ESRAM的中斷向量表獲取指向片外程序存儲器的中斷服務程序入口地址,因此本文的設計方法無需再額外進行中斷向量表重定向設置。
考慮到空間環(huán)境的單粒子效應影響,本文設計對引導程序進行三模冗余處理,以提高系統(tǒng)引導的可靠性:三份程序分別存儲在不同存儲區(qū)域,每次復位時由FPGA進行三取二比對,并將其搬移到片外SRAM運行。另外,為了防止程序存儲器局部故障,本文設計在分散的地址空間上分別放置多個引導程序的副本,而且每個副本都進行三模冗余處理。進一步地,為了防止程序存儲器整體故障,本文設計還在不同存儲介質(zhì)上分別放置多TMR副本。
具體地,在本文提出的基于SmartFusion2的星載計算機最小處理系統(tǒng)中,引導程序的副本存儲分布如圖4所示:1)外部NorFlash芯片存儲3個引導的程序副本,而且每個副本都進行三模冗余(TMR, triple modular redundancy)處理[17-18];2)考慮到其自身固有的防單粒子物理特性和存儲空間大小的限制,外部MRAM芯片只存儲單份引導程序副本,且不做三模冗余(TMR)處理;3)考慮到其具備ECC錯誤檢查與糾正功能和存儲空間大小限制,片上ENVM只存儲單份引導程序副本,且不做三模冗余(TMR)處理。
圖4 多TMR副本的啟動方法示意圖
綜合2.1節(jié)內(nèi)容,針對基于SmartFusion2的星載計算機最小處理器系統(tǒng),本文提出的一種多TMR副本的片外啟動方法基本流程如下所示:
1)系統(tǒng)加電并完成復位之后,由FPGA邏輯暫時控制喂狗輸出,并嘗試從片外NorFlash芯片的首組TMR副本進行三取二比對和引導程序加載啟動。如果引導程序加載啟動成功,則由Cortex M3內(nèi)核進行喂狗控制,并繼續(xù)完成應用程序的加載和啟動,否則FPGA邏輯繼續(xù)嘗試從片外NorFlash芯片的下一組TMR副本進行加載啟動。
2)如果從片外NorFlash芯片的三組TMR副本均加載啟動失敗,則FPGA邏輯切換到片外MARAM芯片的單份副本啟動引導程序,如果加載啟動成功,則由Cortex M3內(nèi)核進行喂狗控制,并繼續(xù)完成對應用程序的加載和啟動。
3)如果從片外MRAM芯片的單份副本加載啟動失敗,則FPGA邏輯再次切換到片上ENVM的單份副本啟動引導程序,如果加載啟動成功,則由Cortex M3內(nèi)核進行喂狗控制,并繼續(xù)完成對應用程序的加載和啟動。
4)如果從片外NorFlash芯片、片外MRAM芯片和片上ENVM均加載啟動失敗,則由FPGA邏輯將系統(tǒng)熱復位計數(shù)加一,并返回到步驟1)對下一份應用程序進行重新加載啟動。進一步地,如果系統(tǒng)熱復位計數(shù)過多,則由硬件仲裁電路執(zhí)行星載計算機自斷電重啟或者主備份切機的措施。
按照商業(yè)微納衛(wèi)星對綜合電子的工業(yè)化、模塊化和標準化要求,按照本文的架構(gòu)設計方案,實現(xiàn)了兩種通用型的星載計算機。第一種星載計算機為3U結(jié)構(gòu)大小,底部焊接兩個工業(yè)級CPCI連接器[19],通過底板與綜合電子內(nèi)的其它模塊進行電氣連接,外部焊接J30J類型連接器,與衛(wèi)星上其它設備進行電氣連接。3U類型星載計算機結(jié)構(gòu)緊湊,接口資源豐富,適合于一百公斤內(nèi)的微納衛(wèi)星。第二種星載計算機為1U結(jié)構(gòu)大小,底部焊機兩個工業(yè)級PC104連接器[20],與堆棧體內(nèi)其它模塊通過底部PC104接插件進行電氣連接,外部焊接Molex類型連接器,與衛(wèi)星上其它設備進行電氣連接。1U類型星載計算機結(jié)構(gòu)更緊湊,但資源相對有限,更適合于十公斤左右的立方星。目前,3U類型和1U類型的星載計算機均用于多個商業(yè)衛(wèi)星型號上,而且在軌運行穩(wěn)定。
在FPGA邏輯中實現(xiàn)“引導啟動模塊”,用于負責將異構(gòu)程序存儲器中的引導程序副本進行三取二比對,并將處理結(jié)果搬移至SRAM芯片的運行區(qū),同時依據(jù)引導和加載運行的結(jié)果,對引導程序副本進行管理和選擇。在Libero SOC集成開發(fā)環(huán)境中,利用Modelsim仿真工具V10.5c,對FPGA邏輯的“引導啟動模塊”的功能和時序進行仿真。仿真結(jié)果如圖5所示,fpga_boot信號組反映引導程序副本的切換,code_flash_mram信號組反映片外NorFlash、片外MRAM和片外sram的讀寫控制時序,code_envm反映片上ENVM的讀寫控制時序,仿真結(jié)果波形與FPGA引導啟動模塊的功能設計完全相符。
圖5 FPGA引導啟動模塊的功能仿真圖
在fpga_boot信號組中,fpga_rst_boot表示FPGA邏輯的復位信號,信號mss_rst_boot和m3_rst_boot信號表示FPGA邏輯在“引導啟動模塊”進行程序加載過程中,對Cortex M3內(nèi)核的復位信號。boot_ok_i表示FPGA邏輯對引導程序是否加載成功的判別,在本次測試的仿真激勵中,此信號被強制設置為加載無效,以便充分模擬“引導啟動模塊”對所有異構(gòu)存儲區(qū)域的程序副本加載啟動過程。bootcopy_selec_o信號則反映出“引導啟動模塊”的副本選擇過程:其值為0表示從NorFlash引導副本1進行加載運行;其值為1表示從NorFlash引導副本2進行加載運行;其值為2表示從NorFlash引導副本3進行加載運行;其值為3表示從 MRAM引導副本進行加載運行;其值為4表示從ENVM引導副本進行加載運行。
在code_flash_mram信號組中,flash_cs_o表示片外NorFlash的片選信號,mram_cs_o表示片外MRAM的片選信號,sram_cs_o表示片外SRAM的片選信號,sram_rd_o表示讀使能信號,sram_we_o表示寫使能信號,sram_addr_o表示地址總線信號,sram_data表示數(shù)據(jù)總線信號,sram_byte_o表示高低字節(jié)使能信號。其中,sram_rd_o、sram_we_o、sram_addr_o、sram_data、sram_byte_o是片外NorFlash、片外MRAM和片外SRAM的復用信號。對于片外NorFlash和片外MRAM主要是讀取操作,用于對引導程序副本進行三取二比對處理,對片外SRAM主要是寫入操作,用于引導程序的加載。
在code_envm信號組中,組內(nèi)所有信號表示由FPGA邏輯“引導啟動模塊”從片上ENVM的讀取引導程序副本的操作,仿真波形完成滿足AHB總線控制時序要求。
按照第1節(jié)中的設計方案,本文采用工業(yè)級SmartFusion2系統(tǒng)的FPGA芯片M2S090T設計和實現(xiàn)了星載計算機單板。按照第2.2節(jié)的內(nèi)容對片外NorFlash、片外MRAM和片上ENVM的引導程序副本進行分配。為了便于測試,除必需的應用程序搬移和跳轉(zhuǎn)功能外,本文測試用的引導程序還具備測試指令,用于破壞指定存儲區(qū)域的程序副本。測試過程的具體測試用例如表3,通過地測串口打印的引導程序加載啟動測試結(jié)果如圖6所示,測試結(jié)果表明:在引導副本啟動失敗后,本文系統(tǒng)能夠自動切換到下一個引導副本進行啟動。
表3 測試用例說明表
圖6 多TMR副本的啟動方法驗證結(jié)果圖
具體的測試過程為:1)首先通過地面測試系統(tǒng),將片外NorFlash芯片的3個引導程序副本1、片外MRAM芯片引導程序副本和片上ENVM引導程序副本進行固化;2)對星載計算機進行正常加電,測試FPGA邏輯對片外NorFlash引導程序副本1的加載運行情況;3)通過地測通道發(fā)送“破壞NorFlash引導程序副本1”測試指令,并對星載計算機重新加電,測試FPGA邏輯對片外NorFlash引導程序副本2的加載運行情況;4)通過地測通道發(fā)送“破壞NorFlash引導程序副本2”測試指令,并對星載計算機重新加電,測試FPGA邏輯對片外NorFlash引導程序副本3的加載運行情況;5)通過地測通道發(fā)送“破壞NorFlash引導程序副本3”測試指令,并對星載計算機重新加電,測試FPGA邏輯對片外MRAM引導程序副本的加載運行情況;6)通過地測通道發(fā)送“破壞MRAM引導程序副本”測試指令,并對星載計算機重新加電,測試FPGA邏輯對片上ENVM引導程序副本的加載運行情況。
為了滿足低成本微納衛(wèi)星對高可靠性的要求,本文采用工業(yè)級處理器SmartFusion2設計了一種低成本高可靠的星載計算機最小處理系統(tǒng)。針對SmartFusion2星載計算機架構(gòu),本文提出了一種多TMR副本的片外啟動方法,既實現(xiàn)了Cortex M3內(nèi)核的片外啟動,還將引導軟件的副本進行三模冗余處理,并分別存儲在異構(gòu)存儲芯片,進一步提高了系統(tǒng)引導可靠性。