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