基于8051 IP核的单粒子翻转故障注入与仿真方法
2023-10-20刘锦辉刘珉强谭雯丹
梁 博,刘锦辉†,熊 涔,刘珉强,陈 煜,谭雯丹
(1. 西安电子科技大学 计算机科学与技术学院,西安 710071; 2. 中国工程物理研究院 电子工程研究所,四川绵阳 621054)
微处理器是卫星电子系统和设备的核心器件,可应用于数管计算机、姿轨控计算机及有效载荷数据处理等设备。应用于电路开发板的嵌入式实时计算机系统中的微处理器,能满足多种航天应用的功能及性能指标要求,只需加上存储器及与应用相关的外围电路,就可构成完整的单板计算机系统。
微处理器工作在空间环境时,受高能粒子和带电粒子的影响可能改变电路节点的正常电压和电流,进而导致系统出错。这种现象称为单粒子效应(single event effect, SEE)。资料表明,在导致航天器异常或故障的空间环境效应中,各种辐射效应占88%,其中,总剂量效应占5.4%,表面充电效应占20.1%,深层充电效应占24.7%(难以辨别的充电效应占9.4%),SEE占28.4%[1-3]。到目前为止,SEE是诱发航天器异常或故障最多的辐射效应。SEE的主要表现有6种,包括:单粒子翻转(single event upset, SEU),存储单元逻辑状态改变;单粒子多位翻转(multiple bit upset,MBU),存储单元多个位的状态改变;单粒子瞬变(single event transient, SET),组合逻辑中出现的瞬时脉冲;单粒子功能中断(single event functional interrupt,SEFI),控制部件出错;单粒子锁定(single event latch-up, SEL),由单粒子引起的锁定效应;单粒子栅击穿(single event gate rupture, SEGR),高能粒子击穿晶体管栅极。其中,SEU,MBU,SET,SEFI是可恢复的故障,称为软错误;SEL和SEGR是导致器件不可恢复的故障,称为硬错误。
微处理器中各种存储单元,包括数据存储器、指令存储器及寄存器等,占芯片面积的40%~70%,更易受SEU的干扰。资料表明,在微处理器发生的各种故障中,绝大部分是由存储单元发生故障引起的[4]。对于微处理器中的SET,如组合电路中出现SET干扰,电路中的信号会出现毛刺,毛刺会沿着电路路径传播到电路输出端,只有这个瞬时脉冲传播到时序电路,且被时序电路捕获,导致时序电路产生瞬态脉冲,才会对电路的最终运行结果产生影响。因此本文只针对SEU开展故障注入与仿真。
为在航天器及卫星设计阶段对系统进行抗辐射评估,模拟仿真手段是目前最有效且经济的方法。在诸多模拟仿真手段中故障注入方法是最常用和最有效的方法。
目前,许多学者对SEE故障注入技术进行了研究。文献[5]实现了一种SEE仿真方法,将电流源脉冲注入SPICE网表,进行电路级仿真,并在RISC-V处理器上验证。结果表明,该方法能准确观测到SEE故障。文献[6]为FPGA设计了一个故障注入和故障定位系统,利用基于资源的精确故障注入过程来寻找敏感单元,图形化显示敏感资源的分布情况,便于辐射加固。文献[7]研究了ARM微处理器的SEFI,测试了一种在程序和数据存储器中使用故障注入的方法,并通过计算结果与实验结果的比较来修正模型。文献[8]提出了一种改进的SET模型,基于SET电流模型,利用Verilog-A软件建立了SET脉冲故障模型,并通过SRAM单元验证了脉冲故障注入模型的实用性和合理性。文献[9]构造了一个具有随机注入机制的故障电流源,用脚本语言实现了粒子入射时间、入射电路节点、电流峰值和宽度的随机化,并通过实验和仿真拟合验证了故障注入方法的有效性。文献[10]提出了一种微处理器程序代码的程序注入算法,在PIC17微处理器上测试了SEFI截面,并将模拟结果与实验结果进行了比较。文献[11]提出了一种基于运行时软件的故障注入方法,并在商用混合信号可编程片上系统(system on chip,SoC)的控制寄存器和SRAM中进行了位翻转模拟,评估了SoC的容错性。文献[12]提出了一种可配置的位置感知故障注入技术,在软件层面模拟不同类型的单粒子故障,并在X86架构上实现了一个应用原型。
综合目前的所有单粒子故障注入技术,大都采用电流源模型,在电路底层开展脉冲故障注入,这种方法对于VLSI来说仿真时间长、资源消耗大。本文提出一种基于微处理器IP核的高层SEU故障注入与仿真方法,利用故障注入工具直接将SEU故障注入到微处理器ROM程序区,观察系统的输出并统计,通过在实际微处理器上开展实验,验证了故障注入和仿真方法的可靠性。
1 故障注入与仿真方法
针对传统单粒子故障注入方法存在的仿真耗时、资源消耗大及不适用于VLSI等缺点,本文提出一种基于微处理器IP核的高层单粒子故障注入与仿真方法,并对微处理器IP核设计框架进行概述。
1.1 故障注入与仿真方法介绍
空间中的任何电子系统都有特定的功能,在空间辐照下会出现不同程度的错误。这些错误都是系统内部某个器件的敏感节点发生错误后逐层传播到系统层面造成的。由于底层器件的SEE反映到系统层面就是系统输出与预期输出不一致,在对某个电路系统进行单粒子故障注入前,需确定系统的功能与输出。然后,在集成开发环境中编写功能代码,生成Hex文件。由于本文使用的IP核ROM区读取的是二进制数据,还需转换为特定的dua文件。最后,从仿真和实验两方面开展故障注入与仿真运行,并对比分析。图1为故障注入与仿真方法总体流程。
图1 故障注入与仿真方法总体流程Fig.1 General flow of fault injection and simulation method
仿真时,针对dua文件进行故障注入工作,由于SEE引起的最终结果是状态位的变化,因此直接将翻转信息注入到ROM区文件中,然后将故障注入后的程序文件和其他IP核组成文件加载到Modelsim仿真器中,观察仿真的输出,并记录数据。
为覆盖ROM区所有位翻转后系统的状态信息,将ROM区数据dua文件的每一位及连续两位进行翻转,并仿真记录相应的系统输出,建立仿真输出表。
实验验证时,选择一款与IP核兼容的微处理器进行故障注入并运行程序。由于实物微处理器的ROM区读取的是Hex文件,因此在故障注入时将Hex文件中的数据转换为二级制数,对每一位及连续两位进行翻转,并加电运行,统计结果输出,建立实验输出表。通过实验结果与仿真结果对比,可评估此故障注入方法的可靠性。
最后,根据仿真输出和实验输出对比验证,分析ROM区一位翻转和连续两位翻转后系统的出错率。
1.2 8051 IP核
本文以Oregano Systems 提供的开源MC8051 IP核为基础,开展基于8051 IP核的SEU故障注入与仿真。
MC8051 IP核采用完全同步设计,指令集和标准8051 IP核微控制器完全兼容,内部带128×8 bit RAM,最多可扩展至64k×8 bit的ROM和64k×8 bit的RAM[13]。MC8051 IP核结构框架如图2所示。图2给出了MC8051 IP核的顶层结构及与3个存储器之间的连接关系,同时显示了顶层的输入输出I/O口。MC8051 IP核中的存储模块有内部RAM、扩展RAM和ROM。其中,内部RAM和ROM是必要的,内部RAM固定为128×8 bit,ROM最大可选64k×8 bit。
图2 MC8051 IP核结构框架Fig.2 Architectural framework of the MC8051 IP core
2 8051 IP核 SEU故障注入与仿真
根据图1所示的故障注入与仿真方法,以8051 IP核为基础,分别开展单粒子一位翻转和连续两位翻转的故障注入与仿真,并统计结果。
2.1 功能确定
在进行故障注入与仿真前,需对8051 IP核的具体功能进行定义,便于对生成的二进制代码文件进行故障注入。表1为定义8051 IP核具体功能的代码及hex文件。
在能说明仿真方法的基础上,为简化工作量,定义8051 IP核的具体功能为:使P0输出11(00010001),P1输出22(00100010),P2输出33(00110011),P3输出44(01000100)。通过编译工具将定义8051 IP核具体功能的代码进行编译,并生成可烧录到实物8051 IP核的hex文件,如表1所列。
表1 定义8051 IP核具体功能代码及hex文件Tab.1 Function code of 8051 IP core and hex file
实验中,使用烧录工具和软件对实验8051 IP核的ROM区烧录表1中hex文件。而8051 IP核的ROM区使用函数读取二进制数据文件,文件格式为dua文件。dua文件的内容是hex文件中的数据部分,即表1中下划线标记部分转换成二进制而来,即程序对应的机器码,也是仿真时将要存入ROM中的数据。转换后,dua文件的每一行存储一个字节(8 bit)的数。
2.2 故障注入
大多数传统的单粒子故障注入方式都基于底层物理进行,通过在电路中加入电流源等方式引起敏感节点的状态位变化。但这种方式对百万门量级以上的VLSI来说仿真难度和时间消耗非常大。
SEU的最终结果是状态位的变化,因此,本文从高层行为级仿真模型开始故障注入,将SEU的故障直接注入到ROM区的程序机器码中,仿真运行后,观察系统的整体输出,统计SEU对系统功能的影响。
SEU故障注入工具如图3所示,包括文件选择、故障类型选择和注入方式选择等功能,还可显示原始数据和故障数据,便于对比是否注入成功。故障注入流程如图4所示。
图3 SEU故障注入工具Fig.3 SEU fault injection tool
图4 SEU故障注入流程Fig.4 Injection process for SEU
首先,选择原始文件,即hex经过转换后的dua文件;然后,选择故障注入后的文件存储位置及名称;接着,选择故障注入类型,包含单粒子一位翻转和连续两位翻转,并选择注入方式,包括随机注入和定点注入,在选择定点注入时还需输入定点注入的位置,开始注入;最后,界面将显示故障的位置及原始数据和故障数据,检查故障注入是否成功,若不成功,则重新选择文件开始新的注入。
2.3 单粒子一位翻转仿真
首先开展单粒子一位翻转仿真,在故障注入时选择单粒子一位翻转,对ROM区的每一个位逐位翻转,依次根据故障注入后得到的文件,使用批处理指令加载到仿真器中,进行SEU仿真,统计ROM区每一位翻转后系统的输出,得到单粒子一位翻转仿真结果统计,如图5所示。
由图5可见,ROM区一位翻转后,P0端口有68.10%的情况会输出正确结果,有26.29%的情况会输出FF,表示翻转引起了指令码错误;其他情况下发生数据码出错,会输出00,91等数据。其他输出端口的情况和P0口类似。
2.4 单粒子连续两位翻转仿真
开展单粒子连续两位翻转仿真,在故障注入时选择单粒子连续两位翻转,对ROM区的所有连续两位进行翻转,依次根据故障注入后得到的文件,使用批处理指令加载到仿真器中,进行SEU仿真,统计ROM区每连续两位翻转后系统的输出,得到单粒子连续两位翻转仿真结果统计,如图6所示。
图5 单粒子一位翻转仿真结果统计Fig.5 Simulation result statistics of single event one-bit upset
图6 单粒子连续两位翻转仿真结果统计Fig.6 Simulation result statistics of single event consecutive two-bit upset
由图6可见,ROM区连续两位翻转后P0端口有65.09%的情况会输出正确结果,有30.17%的情况会输出FF,表示翻转引起了指令码错误;其他情况下发生数据码出错,会输出EF,00等数据。其他输出端口的情况和P0口类似。理论上,单粒子连续两位翻转造成的系统错误要比单粒子一位翻转造成的系统错误情况占比大。以P0端口为例,对比图5和图6可见,单粒子连续两位翻转后的系统出错率比单粒子一位翻转占比多,与理论分析结论一致。其他端口的结论也是如此。
3 仿真与实验对比
为验证本文提出的单粒子故障注入与仿真方法的可靠性,在商用8051微处理器上开展故障注入,并运行程序统计结果。
本文使用与MC8051 IP核指令兼容且框架类似的商用微处理器STC89C82,在STC89C82上烧录单粒子故障注入后的程序文件,统计系统的输出结果,与仿真结果对比,实验用商用微处理器核心板如图7所示。
3.1 单粒子一位翻转实验与仿真对比
首先,与仿真相同,使用表1所列的系统功能,对hex文件开展单粒子一位故障注入,利用批处理程序将hex文件数据区的每一个字节转为二进制,逐位翻转每一位,并烧录到微处理器中,运行程序并统计结果,得到单粒子一位翻转实验结果统计,如图8所示。
图8 单粒子一位翻转实验结果统计Fig.8 Experimental result statistics of single event one-bit upset
由图8可见,ROM区一位翻转后P0端口有67.24%的情况会输出正确结果,有28.02%的情况会输出FF,同仿真结果的68.10%正确输出和26.29%输出FF偏差很小。其他端口的仿真与实验偏差分析同理。
3.2 单粒子连续两位翻转实验与仿真对比
接着在实物微处理器上开展单粒子连续两位翻转故障注入,并烧录到微处理器中,运行程序并统计结果,得到单粒子连续两位翻转实验结果统计,如图9所示。
图9 单粒子连续两位翻转实验结果统计Fig.9 Experimental result statistics of single event consecutive two-bit upset
由图9可见,ROM区连续两位翻转后P0端口有63.36%的情况会输出正确结果,有31.90%的情况会输出FF,同仿真结果的65.09%正确输出和30.17%输出FF偏差很小。其他端口的仿真与实验偏差分析同理。
根据图5、图6、图8和图9所示的结果统计,得到8051 IP核SEU仿真与实验系统出错率对比,如表2所列,对比各种情况下仿真和实验导致的系统出错率(系统出错表示不能输出正确结果)。由表2可知,在单粒子一位翻转和连续两位翻转情况下,仿真和实验测试情况下系统出错率很接近,在可接受的范围内。
表2 8051 IP核SEU仿真与实验系统出错率对比Tab.2 Comparison of system error rate for 8051 IP core single event upset between simulation and experiment
4 结论
本文提出了一种基于8051 IP核的SEU故障注入和仿真方法。对8051的具体功能代码进行了注入和仿真,并通过在商用微处理器STC89C52上的验证,证明了在高层直接注入基于8051 IP核的SEU故障是可行的。该方法可用于航天器设计阶段系统抗单粒子翻转事件的评估。
致谢
感谢中国工程物理研究院电子工程研究所和强脉冲辐射环境模拟与效应全国重点实验室给予的指导和帮助。