一种高可靠的工业级星载计算机及其引导设计

2022-07-09 06:45姜同全薛淑娟刘中伟崔战国姜连祥
计算机测量与控制 2022年6期
关键词:副本内核逻辑

姜同全,薛淑娟,张 腾,刘中伟,王 磊,崔战国,姜连祥

(山东航天电子技术研究所,山东 烟台 264670)

0 引言

为了保证产品的可靠性需求,传统的星载计算机通常选用高质量等级的元器件:中央处理器(CPU, central processing unit)则选用抗辐照性能高的器件,程序存储器则选用具有防单粒子的反熔丝器件,数据存储器则选用具有EDAC功能的器件[1]。但是,高等级元器件的选用不但增加了产品的研制成本还会影响产品的研制周期。近年来,商业航天市场领域取得了飞速的发展,而低成本和短周期的微纳卫星平台则备受众多商业卫星公司的青睐。

凭借采购周期短、成本低和集成度高等优点,商用现货(COTS, commercial-off-the-shelf)器件越来越多地被应用在商业微纳卫星的平台上[2-3]。但由于抗空间环境的能力较弱,COTS器件在轨经常会出现单粒子翻转和单粒子锁定等问题,从而一定程度上降低了产品的可靠性。为了解决低成本和高可靠之间的需求矛盾,文献[4]采用双机冗余、代码备份的方法提出了一种基于工业器件的星载计算机系统,并通过建立马尔可夫链数学模型,从数学理论的角度证明了,具有冷备资源的冗余方案可获得相对高的系统可靠性。文献[5]采用基于PowerPC体系结构的SM750处理器作为控制核心,提出了一种“SM750+FPGA”架构的高性能星载计算机方案,并搭载嵌入式操作系统 AIC-OS,为星载计算机设计提供一种新思路。文献[6]针对系统级芯片(SOC, system on a chip)具有集成性高、可编程性强的特点,提出了一种片内热备份、片外冷备份和混合冗余策略的星载计算机处理系统设计方案,并通过建模的方式进行了系统可靠度验证。

在星载计算机软件设计中,对应用软件通常采用三模冗余的加载方式,并具备在轨软件重构的功能,以提高计算机应用程序对空间环境的可靠性。为了支持软件三模冗余加载和在轨软件重构等功能,星载计算机的软件架构通常采用“引导+应用”的方式[7]:具体而言,在星载计算机加电,并完成硬件系统复位之后,由引导软件将应用软件的三模冗余副本进行三取二比对,并在完成相关配置后由引导软件对应用软件进行加载启动[8]。通常地,由于星载计算机所用的处理器在固化启动方式上的限制,引导程序只能在可编程只读存储器(PROM, programmable read-only memory)里存储单份,因此具有单点故障的风险。针对SPARC V8架构处理器(AT697),文献[9]将错误检测与纠正(EDAC, error detection and correction)和三模冗余两种方法结合起来,并将引导(BOOT)区域和主程序区域进行三模冗余处理,提出一种容错启动系统设计方法;在启动阶段,此方法利用AT697的EDAC功能对BOOT 区域进行检查和纠错;但此方法仅限于特定类型的处理器,而且其并未考虑BOOT三模冗余失效的情况。

采用工业级的处理器芯片SmartFusion2,本文提出了一种低成本的星载计算机最小系统架构,通过挂载异构形式的存储器芯片,既降低了星载计算机的研制成本,又进一步地提高了系统可靠性和安全性。通过结合基于SmartFusion2的计算机系统架构,本文提出一种星载计算机的多TMR副本的片外启动方法,不但实现了Cortex M3处理器内核的片外启动的方式,还通过将引导软件的多个副本存储在分散的不同区域,且每个软件副本均进行三模冗余,以进一步地提高整个星载计算机系统的可靠性。

1 基于SmartFusion2的星载计算机最小系统

伴随着对综合电子技术集成度要求的提高,越来越多的星载计算机采用具有片上SOC资源的控制处理器,既可以节省单独的CPU芯片及其外围电路,而且还可依靠芯片上丰富的场可编程门阵列(FPGA, field programmable gate array)逻辑资源对外提供更灵活的接口功能扩展[10]。如图1所示,本文提出了一种基于工业级COTS器件的低成本星载计算机最小系统设计架构,其选用的SmartFusion2系列M2S090T型FPGA芯片,其内部集成了一个166 MHz的Cortex M3硬处理器内核,逻辑资源丰富,功耗低而且体积小。具体地,在片内存储资源方面,M2S090T型FPGA芯片具有512 K的内部ENVM程序存储器(embedded NVM),支持错误检查与纠正(ECC, error correcting code),可用于存放固化程序,64 K的内部ESRAM数据存储器[11-12](embedded SRAM),支持EDAC,可用于存储程序变量。在片内接口控制器方面,M2S090T型FPGA芯片内部集成了1路CAN控制器,2路多模式异步串口控制器(MMUART, multi-mode universal asynchronous/synchronous receiver/transmitter),以及2路串行外设接口(SPI, serial peripheral interface)控制器和2路集成电路总线(I2C, inter-integrated circuit)控制器等。更重要的是,此款工业级的FPGA芯片目前已经具有大量飞行验证经历。

图1 基于SmartFusion2的星载计算机框架图

除了ENVM和ESRAM等片上存储资源外,本文提出的星载计算机最小系统还在片外并行地挂载两片非易失闪存(NorFlash)芯片S29GL512P、并行地挂接两片MRAM芯片MR25H512均作为程序存储器,并行地挂载两片具有支持EDAC功能的静态随机存取存储器(SRAM, static random-access memory)芯片IS61WV51216EDBLL作为数据存储器。其中,NorFlash芯片S29GL512P(支持16位数据和32位读写操作)共128 M可用于存储引导程序和应用程序,并分别按照三模冗余方式进行存储;磁性随机存储器(MRAM, magnetoresistive random access memory)芯片MR25H512(支持8位、16位和32位读写操作)共1 M,在物理特性上具有抗单粒子的特点,可对引导程序和应用程序的副本按照单份方式进行存储,以节省MRAM的使用空间;片上ENVM芯片(支持8位、16位和32位读写操作)具备ECC错误检查与纠正功能,也可对引导程序和应用程序的副本分别按照单份的方式进行存储;片外SRAM芯片IS61WV51216EDBLL具有硬件EDAC功能,可对存储数据的单比特翻转进行自动纠正,一方面可以作为数据存储器,用于全局变量和局部变量的分配,另一方面还可作为应用程序的运行空间(应用程序可由引导程序从程序存储器搬移到SRAM);片上ESRAM支持EDAC功能,可作为数据存储器,用于全局变量和局部变量的分配。

M2S090T型FPGA芯片上的Cortex M3内核是通过内部集成的AHB总线[13-14],实现对片上ENVM、ESRAM、CAN控制器等模块的读写访问;其中,Fabric interface controller(FIC0)是片上SOC系统内部的一个扩展模块,挂接在AHB(advanced high performance bus)总线上,实现Cortex M3内核与FPGA逻辑之间的AHB总线时序转换,作为Cortex M3内核对外进行读写访问的唯一接口。基于SmartFusion2的星载计算机最小系统框架如图1所示,Cortex M3内核和FPGA逻辑分别作为两大相对独立的功能模块,在FPGA资源内实现了一个“AHB时序转换模块”,作为AHB总线时序协议和Local总线时序协议之间的转换桥梁,实现Cortex M3内核与FPGA内部寄存器和片外存储器之间的数据访问。另外,采用FPGA自带的CCC锁相环模块实现由FPGA板上晶振到CPU时钟和FPGA工作时钟频率变换,Cortex M3内核和FPGA逻辑分别属于两个时钟域,在进行FPGA逻辑设计使需充分考虑跨时钟域时序处理,并在综合布局布线中添加对应的时钟约束。在片上Cortex M3处理器内有一个CPU锁相环模块(MCCC,MSS clock conditioning circuitry ),通过对CPU时钟进行分频产生挂接在AHB总线上的各类控制器的工作时钟。

2 多TMR副本的片外启动方法

2.1 SmartFusion2的片外启动方法

2.1.1 Cortex M3复位启动序列

在传统的ARM 架构中,0x0000,0000地址是一条跳转指令,并由0x0000,0000地址开始执行第一条指令。但在Cortex M3架构中,0x0000,0000地址用于存储主堆栈指针(MSP, main_stack_pointer)初始值,中断向量表[15]紧接其后,其中中断向量表的第一个条目指向复位完成后第一条进行执行的指令[16]。Cortex M3复位序列示意如图2所示,在复位信号撤销之后,Cortex M3处理器所执行的第一个操作就是:首先从0x0000,0000地址获取MSP的初始值,然后再从0x0000,0004地址获取PC的初始值(其数据最低位必须是1)。其中,程序计数器(PC, program counter)初始值就是复位向量的地址,并从此地址进行取指。

图2 Cortex M3复位序列示意图

2.1.2 Cortex M3中断向量表

Cortex M3中断向量表的分布如表1所示,在应用程序执行过程发生某类异常或者中断后,Cortex M3根据中断向量表确定其服务例程或者中断服务程序的入口地址。其中,Cortex M3中断表默认起始地址是0x0000,0000,但为了支持动态重分发中断,Cortex M3允许从其它地址进行异常和中断向量的定位,即中断向量表重定位。具体地,通过修改Cortex M3的“中断向量表偏移量寄存器”(0xE000,ED08地址),可实现中断向量表的重定位,其中,中断向量表偏移量寄存器(VTOR, vector table offset register)的具体定义如表2所示。在支持软件重构的“引导程序+应用程序”的实现方式下,中断向量表重定位最常用的实现方式是:在数据存储区(SRAM或者ESRAM)分配部分连续空间用于存储中断向量表。在程序引导期间完成各中断向量入口地址的赋值,并在引导完成后,通过修改VTOR寄存器,启用内存空间中的新向量表,实现中断向量表的重定位和动态调整。

表2 中断向量表偏移量寄存器含义

2.1.3 SmartFusion2启动地址重映射

在M2S090T型FPGA中,SmartFusion2默认是将片上ENVM(起始地址0x6000,0000)重映射为0x0000,0000地址,因此在片上系统完成复位操作后,Cortex M3内核默认从片上ENVM启动,即从ENVM上加载程序并启动运行。除此之外,SmartFusion2还支持将片上ESRAM(起始地址0x2000,0000)和闪存(MDDR, Mobile DDR SDRM)(起始地址0xA000,0000)重映射为0x0000,0000地址,并可指定一定大小的偏移地址。SmartFusion2启动地址重映射配置如图3所示,在Microsemi厂商自带的FPGA集成开发环境Libero SOC中,通过修改Cortex M3内核的“AHB Bus Matrix模块”中的“Remapped Region to location 0x0000000 of Cortex-M3 ID Code space”即可实现SmartFusion2默认启动地址的重映射。另外,“eNVM Remap Base Address(Cortex-M3)”用于指定中断向量表的偏移地址,最大支持256K的偏移地址大小。

图3 SmartFusion2启动地址重映射配置图

2.1.4 SmartFusion2的片外启动方法

充分利用Cortex M3内核的复位启动序列、中断向量表可重定位和SmartFusion2支持启动地址重映射的特性,本文设计了一种可灵活扩展的片外启动方法(片外存储器的程序进行加载和启动),具体的设计要点如下:

1)在FPGA逻辑开发过程中,按照图3所示,在Libero SOC集成开发环境中通过更改FPGA的“Remapped Region to location 0x00000000 of Cortex-M3 ID Code space”配置,将ESRAM重映射为0x0000,0000地址。

2)系统加电运行后,由FPGA逻辑对Cortex M3内核提供足够时间的持续复位,在Cortex M3内核复位信号撤销之前,由FPGA逻辑实现的“FPGA引导启动模块”将片外存储器上引导程序的中断向量表搬移到片上ESRAM的0x2000,0000为首地址的一段地址空间内。

3)在本文的设计中,由于ESRAM被重映射为启动地址,在FPGA逻辑的复位信号撤销之后,Cortex M3内核会从ESRAM首地址(即0x2000,0000地址)获取MSP初始值,并从0x2000,0004地址获取PC指针的初始值,由于ESRAM上的中断向量表指向的是片外存储器上的引导程序,因此Cortex M3内核将从指向片外的复位向量地址取指。这样,依靠其自身特有的复位启动序列,Cortex M3内核便自动地跳转到片外程序存储器的空间运行。

4)在本文的设计中,由于ESRAM被映射到0x0000,0000地址,而且中断向量表已经被FPGA逻辑的“FPGA引导启动模块”搬移到ESRAM空间,在Cortex M3内核成功启动程序运行并发生异常或者中断后,Cortex M3内核会从ESRAM的中断向量表获取指向片外程序存储器的中断服务程序入口地址,因此本文的设计方法无需再额外进行中断向量表重定向设置。

2.2 多TMR副本的启动方法

考虑到空间环境的单粒子效应影响,本文设计对引导程序进行三模冗余处理,以提高系统引导的可靠性:三份程序分别存储在不同存储区域,每次复位时由FPGA进行三取二比对,并将其搬移到片外SRAM运行。另外,为了防止程序存储器局部故障,本文设计在分散的地址空间上分别放置多个引导程序的副本,而且每个副本都进行三模冗余处理。进一步地,为了防止程序存储器整体故障,本文设计还在不同存储介质上分别放置多TMR副本。

具体地,在本文提出的基于SmartFusion2的星载计算机最小处理系统中,引导程序的副本存储分布如图4所示:1)外部NorFlash芯片存储3个引导的程序副本,而且每个副本都进行三模冗余(TMR, triple modular redundancy)处理[17-18];2)考虑到其自身固有的防单粒子物理特性和存储空间大小的限制,外部MRAM芯片只存储单份引导程序副本,且不做三模冗余(TMR)处理;3)考虑到其具备ECC错误检查与纠正功能和存储空间大小限制,片上ENVM只存储单份引导程序副本,且不做三模冗余(TMR)处理。

图4 多TMR副本的启动方法示意图

综合2.1节内容,针对基于SmartFusion2的星载计算机最小处理器系统,本文提出的一种多TMR副本的片外启动方法基本流程如下所示:

1)系统加电并完成复位之后,由FPGA逻辑暂时控制喂狗输出,并尝试从片外NorFlash芯片的首组TMR副本进行三取二比对和引导程序加载启动。如果引导程序加载启动成功,则由Cortex M3内核进行喂狗控制,并继续完成应用程序的加载和启动,否则FPGA逻辑继续尝试从片外NorFlash芯片的下一组TMR副本进行加载启动。

2)如果从片外NorFlash芯片的三组TMR副本均加载启动失败,则FPGA逻辑切换到片外MARAM芯片的单份副本启动引导程序,如果加载启动成功,则由Cortex M3内核进行喂狗控制,并继续完成对应用程序的加载和启动。

3)如果从片外MRAM芯片的单份副本加载启动失败,则FPGA逻辑再次切换到片上ENVM的单份副本启动引导程序,如果加载启动成功,则由Cortex M3内核进行喂狗控制,并继续完成对应用程序的加载和启动。

4)如果从片外NorFlash芯片、片外MRAM芯片和片上ENVM均加载启动失败,则由FPGA逻辑将系统热复位计数加一,并返回到步骤1)对下一份应用程序进行重新加载启动。进一步地,如果系统热复位计数过多,则由硬件仲裁电路执行星载计算机自断电重启或者主备份切机的措施。

3 功能仿真和试验验证

3.1 基于SmartFusion2的星载计算机

按照商业微纳卫星对综合电子的工业化、模块化和标准化要求,按照本文的架构设计方案,实现了两种通用型的星载计算机。第一种星载计算机为3U结构大小,底部焊接两个工业级CPCI连接器[19],通过底板与综合电子内的其它模块进行电气连接,外部焊接J30J类型连接器,与卫星上其它设备进行电气连接。3U类型星载计算机结构紧凑,接口资源丰富,适合于一百公斤内的微纳卫星。第二种星载计算机为1U结构大小,底部焊机两个工业级PC104连接器[20],与堆栈体内其它模块通过底部PC104接插件进行电气连接,外部焊接Molex类型连接器,与卫星上其它设备进行电气连接。1U类型星载计算机结构更紧凑,但资源相对有限,更适合于十公斤左右的立方星。目前,3U类型和1U类型的星载计算机均用于多个商业卫星型号上,而且在轨运行稳定。

3.2 FPGA引导启动模块的功能仿真

在FPGA逻辑中实现“引导启动模块”,用于负责将异构程序存储器中的引导程序副本进行三取二比对,并将处理结果搬移至SRAM芯片的运行区,同时依据引导和加载运行的结果,对引导程序副本进行管理和选择。在Libero SOC集成开发环境中,利用Modelsim仿真工具V10.5c,对FPGA逻辑的“引导启动模块”的功能和时序进行仿真。仿真结果如图5所示,fpga_boot信号组反映引导程序副本的切换,code_flash_mram信号组反映片外NorFlash、片外MRAM和片外sram的读写控制时序,code_envm反映片上ENVM的读写控制时序,仿真结果波形与FPGA引导启动模块的功能设计完全相符。

图5 FPGA引导启动模块的功能仿真图

在fpga_boot信号组中,fpga_rst_boot表示FPGA逻辑的复位信号,信号mss_rst_boot和m3_rst_boot信号表示FPGA逻辑在“引导启动模块”进行程序加载过程中,对Cortex M3内核的复位信号。boot_ok_i表示FPGA逻辑对引导程序是否加载成功的判别,在本次测试的仿真激励中,此信号被强制设置为加载无效,以便充分模拟“引导启动模块”对所有异构存储区域的程序副本加载启动过程。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表示数据总线信号,sram_byte_o表示高低字节使能信号。其中,sram_rd_o、sram_we_o、sram_addr_o、sram_data、sram_byte_o是片外NorFlash、片外MRAM和片外SRAM的复用信号。对于片外NorFlash和片外MRAM主要是读取操作,用于对引导程序副本进行三取二比对处理,对片外SRAM主要是写入操作,用于引导程序的加载。

在code_envm信号组中,组内所有信号表示由FPGA逻辑“引导启动模块”从片上ENVM的读取引导程序副本的操作,仿真波形完成满足AHB总线控制时序要求。

3.3 SmartFusion2计算机的多TMR副本的启动验证

按照第1节中的设计方案,本文采用工业级SmartFusion2系统的FPGA芯片M2S090T设计和实现了星载计算机单板。按照第2.2节的内容对片外NorFlash、片外MRAM和片上ENVM的引导程序副本进行分配。为了便于测试,除必需的应用程序搬移和跳转功能外,本文测试用的引导程序还具备测试指令,用于破坏指定存储区域的程序副本。测试过程的具体测试用例如表3,通过地测串口打印的引导程序加载启动测试结果如图6所示,测试结果表明:在引导副本启动失败后,本文系统能够自动切换到下一个引导副本进行启动。

表3 测试用例说明表

图6 多TMR副本的启动方法验证结果图

具体的测试过程为:1)首先通过地面测试系统,将片外NorFlash芯片的3个引导程序副本1、片外MRAM芯片引导程序副本和片上ENVM引导程序副本进行固化;2)对星载计算机进行正常加电,测试FPGA逻辑对片外NorFlash引导程序副本1的加载运行情况;3)通过地测通道发送“破坏NorFlash引导程序副本1”测试指令,并对星载计算机重新加电,测试FPGA逻辑对片外NorFlash引导程序副本2的加载运行情况;4)通过地测通道发送“破坏NorFlash引导程序副本2”测试指令,并对星载计算机重新加电,测试FPGA逻辑对片外NorFlash引导程序副本3的加载运行情况;5)通过地测通道发送“破坏NorFlash引导程序副本3”测试指令,并对星载计算机重新加电,测试FPGA逻辑对片外MRAM引导程序副本的加载运行情况;6)通过地测通道发送“破坏MRAM引导程序副本”测试指令,并对星载计算机重新加电,测试FPGA逻辑对片上ENVM引导程序副本的加载运行情况。

4 结束语

为了满足低成本微纳卫星对高可靠性的要求,本文采用工业级处理器SmartFusion2设计了一种低成本高可靠的星载计算机最小处理系统。针对SmartFusion2星载计算机架构,本文提出了一种多TMR副本的片外启动方法,既实现了Cortex M3内核的片外启动,还将引导软件的副本进行三模冗余处理,并分别存储在异构存储芯片,进一步提高了系统引导可靠性。

猜你喜欢
副本内核逻辑
逻辑
人民情怀:柳青为文为人的内核(评论)
初春
我们还能有逻辑地聊天吗
微软发布新Edge浏览器预览版下载换装Chrome内核
国家知识产权局公告:专利证书改版
女生买买买时的神逻辑
女人买买买的神逻辑
新副本“战歌之城”怨灵BOSS面面观
《口袋西游—蓝龙》新副本“幽冥界”五大萌点