一种FPGA寄存器级单粒子翻转故障模拟方法和系统转让专利

申请号 : CN201910344068.4

文献号 : CN110188012B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张天序刘康陈立群颜露新钟胜张磊

申请人 : 华中科技大学

摘要 :

本发明公开了一种FPGA寄存器级单粒子翻转故障模拟方法和系统,属于电子设备可靠性分析技术领域。包括:S1.被测电路在FPGA中被实例化为电路CUT_0,所述被测电路包含大量寄存器;S2.生成故障注入序列,所述故障注入序列包括至少一个目标寄存器组;S3.向CUT_0电路输入激励,并在故障注入序列的指导下,用目标寄存器组控制CUT_0电路中对应寄存器的输出翻转。本发明直接对FPGA功能电路中的寄存器操作,模拟各种寄存器组合受单粒子轰击被打翻的现象,定位准确,产生了大量有价值的仿真数据。本发明将被测电路实例化为CUT_0和CUT_1,CUT_0输出结果受SEU影响,CUT_1输出结果正常,比较CUT_0和CUT_1的输出,比较结果对指导SEU重点防护具有极为重要的指导意义。

权利要求 :

1.一种FPGA寄存器级单粒子翻转故障模拟方法,其特征在于,该方法包括以下步骤:S1.被测电路在FPGA中被实例化为电路CUT_0,所述被测电路包含大量寄存器;

S2.通过故障注入模式,生成故障注入序列,所述故障注入序列包括至少一个目标寄存器组;

S3.向CUT_0电路输入激励,并在故障注入序列的指导下,用目标寄存器组控制CUT_0电路中对应寄存器的输出翻转;

所述通过故障注入模式生成故障注入序列,具体如下:

选择至少一种故障注入模式,所述故障注入模式是按照发生故障的寄存器数量相同和/或位置相同原则对目标寄存器组进行归类;

将被选择模式下包含的所有目标寄存器组排列,生成故障注入序列;

所述故障注入模式按照发生故障的寄存器的数量对目标寄存器组进行归类时,所述故障注入模式包括:j个寄存器故障模式,所述j个寄存器故障模式包含只有j个寄存器故障的所有目标寄存器组,j=1,2,…;

所述故障注入模式按照发生故障的寄存器的位置对目标寄存器组进行归类时,所述故障注入模式包括:第i级寄存器故障模式,所述第i级寄存器故障模式包含第i级位置的至少一个寄存器故障的所有目标寄存器组,i=1,2,…;

所述故障注入模式按照发生故障的寄存器的数量和位置对目标寄存器组进行归类时,所述故障注入模式包括:第i级j个寄存器故障模式,所述第i级j个寄存器故障模式包含第i级位置、j个寄存器故障的所有目标寄存器组,i=1,2,…,j=1,2,…。

2.如权利要求1所述的方法,其特征在于,被测电路实例化时,在每个寄存器输出端口添加一个二输入选择器,用于实现对寄存器翻转的控制。

3.如权利要求1-2任一项所述的方法,其特征在于,所述目标寄存器组中被选择翻转的寄存器不应超过4个。

4.如权利要求1-2任一项所述的方法,其特征在于,该方法还包括以下步骤:S4.被测电路在FPGA中被实例化为电路CUT_1,向CUT_1电路输入相同的激励;

S5.逐比特比较CUT_0和CUT_1的输出,得到比较结果;

S6.根据所述比较结果,评估对应寄存器受SEU故障影响对电路输出的损害程度。

5.如权利要求4所述的方法,其特征在于,步骤S6包括以下子步骤:S601.统计两者结果不一样的比特数Lerror和已比较比特数Lsim,直至Lsim达到预设比特长度;

S602.绘制所述故障注入序列中各目标寄存器组对应的Rerror—Lsim曲线,其中,Rerror=Lerror/Lsim;

S603.根据Rerror—Lsim曲线,分析不同寄存器组合出现SEU故障时对被测电路输出结果的损害。

6.一种FPGA寄存器级单粒子翻转故障模拟系统,其特征在于,该系统采用如权利要求1至5任一项所述的FPGA寄存器级单粒子翻转故障模拟方法。

7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5任一项所述的FPGA寄存器级单粒子翻转故障模拟方法。

说明书 :

一种FPGA寄存器级单粒子翻转故障模拟方法和系统

技术领域

[0001] 本发明属于电子设备可靠性分析领域,更具体地,涉及一种FPGA寄存器级单粒子翻转故障模拟方法和系统。

背景技术

[0002] FPGA(Field Programmable Gate Array,现场可编程逻辑门阵列)被广泛用于数据信息处理和传输的片上实现,是航天应用领域中极为重要的数据处理载体。但FPGA是单粒子敏感型器件,在轨使用时处于空间辐照环境,空间高能粒子会对器件产生一系列影响,包括总剂量效应(Total IonizingDose Effects,TID)和单粒子效应(Single Event Effects,SEE)等,而SEE中的单粒子翻转(Single Event Upset,SEU)对FPGA的影响尤为明显。SEU即空间高能粒子轰击FPGA片上配置存储区电路或功能电路而导致的逻辑状态翻转。配置存储区的SEU故障会导致功能电路结构的改变,在不进行电路刷新的情况下具有永久性;功能电路的SEU故障会导致运算结果的错误,运算错误具有扩散性和持续性。由此可知,SEU故障会造成器件内部电路异常,导致电路无法正常工作,严重影响到空间应用系统中数据处理和传输的可靠性、安全性。
[0003] SEU在空间应用中没有足够的实测数据可供参考,通过模拟的方式获得大量数据对指导FPGA电路的容错设计具有极大的应用价值和实际意义。故障注入是一种加速系统失效的仿真技术,首先模拟FPGA电路在空间辐照环境中可能发生的各种故障形式,再把这些模拟的软硬件故障人为地注入到FPGA电路中,然后观察FPGA电路的运行情况,确定系统的错误检测覆盖率、分析故障传播情况。
[0004] 近年来,国内外对于故障注入技术的关注度越来越高,郑晓云等人提出采用修改FPGA配置区数据位的方式来模拟故障,实现对SEU敏感位的检测和统计。此后的研究多关注于配置区数据位的选择方法和故障注入平台的自动处理,这是最为典型的SEU故障注入方法研究方向;李林等人提出基于部分重构的SRAM型FPGA单粒子翻转模拟,于婷婷等人提出基于码流的软件控制FPGA故障注入系统。然而,现有技术均针对的是配置存储区的SEU故障,采取的手段是修改配置文件,不能直接面向功能电路中的寄存器,并模拟其受高能粒子轰击而翻转的现象。

发明内容

[0005] 针对现有技术的缺陷,本发明的目的在于解决现有技术不能模拟功能电路的寄存器级SEU故障的技术问题。
[0006] 为实现上述目的,第一方面,本发明实施例提供了一种FPGA寄存器级单粒子翻转故障模拟方法,该方法包括以下步骤:
[0007] S1.被测电路在FPGA中被实例化为电路CUT_0,所述被测电路包含大量寄存器;
[0008] S2.生成故障注入序列,所述故障注入序列包括至少一个目标寄存器组;
[0009] S3.向CUT_0电路输入激励,并在故障注入序列的指导下,用目标寄存器组控制CUT_0电路中对应寄存器的输出翻转。
[0010] 具体地,被测电路实例化时,在每个寄存器输出端口添加一个二输入选择器,用于实现对寄存器翻转的控制。
[0011] 具体地,通过故障注入模式,生成故障注入序列。
[0012] 具体地,所述通过故障注入模式生成故障注入序列,具体如下:
[0013] 选择至少一种故障注入模式,所述故障注入模式是按照发生故障的寄存器数量相同和/或位置相同原则对目标寄存器组进行归类;
[0014] 将被选择模式下包含的所有目标寄存器组排列,生成故障注入序列。
[0015] 具体地,所述故障注入模式按照发生故障的寄存器的数量对目标寄存器组进行归类时,所述故障模式包括:j个寄存器故障模式,所述j个寄存器故障模式包含只有j个寄存器故障的所有目标寄存器组,j=1,2,…;
[0016] 所述故障注入模式按照发生故障的寄存器的位置对目标寄存器组进行归类时,所述故障模式包括:第i级寄存器故障模式,所述第i级寄存器故障模式包含第i级位置的至少一个寄存器故障的所有目标寄存器组,i=1,2,…;
[0017] 所述故障注入模式按照发生故障的寄存器的数量和位置对目标寄存器组进行归类时,所述故障模式包括:第i级j个寄存器故障模式,所述第i级j个寄存器故障模式包含第i级位置、j个寄存器故障的所有目标寄存器组,i=1,2,…,j=1,2,…。
[0018] 具体地,所述目标寄存器组中被选择翻转的寄存器不应超过4个。
[0019] 具体地,该方法还包括以下步骤:
[0020] S4.被测电路在FPGA中被实例化为电路CUT_1,向CUT_1电路输入相同的激励;
[0021] S5.逐比特比较CUT_0和CUT_1的输出,得到比较结果;
[0022] S6.根据所述比较结果,评估对应寄存器受SEU故障影响对电路输出的损害程度。
[0023] 具体地,步骤S6包括以下子步骤:
[0024] S601.统计两者结果不一样的比特数Lerror和已比较比特数Lsim,直至Lsim达到预设比特长度;
[0025] S602.绘制所述故障注入序列中各目标寄存器组对应的Rerror—Lsim曲线,其中,Rerrpr=Lerror/Lsim;
[0026] S603.根据Rerror—Lsim曲线,分析不同寄存器组合出现SEU故障时对被测电路输出结果的损害。
[0027] 第二方面,本发明实施例提供了一种FPGA寄存器级单粒子翻转故障模拟系统,该系统采用上述第一方面所述的FPGA寄存器级单粒子翻转故障模拟方法。
[0028] 第三方面,本发明实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面所述的FPGA寄存器级单粒子翻转故障模拟方法。
[0029] 总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
[0030] 1.与现有技术中修改配置文件的方式相比,本发明直接对FPGA功能电路中的寄存器操作,通过故障注入序列控制寄存器翻转,模拟各种寄存器组合受单粒子轰击被打翻的现象,定位准确,产生了大量有价值的仿真数据。
[0031] 2.本发明将被测电路实例化为CUT_0和CUT_1,CUT_0输出结果受SEU影响,CUT_1输出结果正常,比较CUT_0和CUT_1的结果,丰富了时间尺度上的数据样本,比较结果对指导SEU重点防护具有极为重要的指导意义。

附图说明

[0032] 图1为本发明实施例提供的一种FPGA寄存器级单粒子翻转故障模拟方法流程图;
[0033] 图2为本发明实施例提供的被测电路具体电路结构图;
[0034] 图3为本发明实施例提供的寄存器翻转的具体控制示意图;
[0035] 图4为本发明实施例提供的CUT_0/CUT_1具体电路结构图。

具体实施方式

[0036] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0037] 如图1所示,一种FPGA寄存器级单粒子翻转故障模拟方法,该方法包括以下步骤:
[0038] S1.被测电路在FPGA中被实例化为电路CUT_0,所述被测电路包含大量寄存器;
[0039] S2.生成故障注入序列,所述故障注入序列包括至少一个目标寄存器组;
[0040] S3.向CUT_0电路输入激励,并在故障注入序列的指导下,用目标寄存器组控制CUT_0电路中对应寄存器的输出翻转。
[0041] 步骤S1.被测电路在FPGA中被实例化为电路CUT_0,所述被测电路包含大量寄存器。
[0042] 作为SEU故障的载体,包含寄存器的被测电路(Circuit Under Test,CUT)由用户定制。CUT的输入激励由用户结合CUT制定,可以选择PC平台或开发板平台。
[0043] 被测电路被例化为实例,接收输入激励,CUT_0作为故障注入的对象。被测电路实例化前,在每个寄存器输出端口添加一个二输入选择器,选择器的D0端连接寄存器的Q端,D1端连接寄存器的 端。在SEU故障注入模块与CUT_0通信的总线中,都有一个比特位与选择器的选择端口select相连。若比特位为高电平,则选择器选择寄存器的 端输出,否则选择Q端输出,以此实现对寄存器翻转的控制。每次模拟过程中仅翻转目标寄存器组对应的若干个寄存器,把总线中这些寄存器对应的比特位置为高电平,其它比特位置为低电平。由此即可控制翻转对应寄存器的输出,模拟电路中寄存器受高能粒子轰击而翻转的现象。
[0044] 步骤S2.生成故障注入序列,所述故障注入序列包括至少一个目标寄存器组。
[0045] 可通过故障注入模式或者人为指定方式,生成故障注入序列。
[0046] 被测电路中寄存器数量众多,每次模拟可选择其中的一个或多个,选择出的寄存器组合称之为目标寄存器组。故障注入模式是按照数量相同或位置相同原则对目标寄存器组进行的归类。通过故障注入模式生成故障注入序列,具体如下:选择至少一种故障注入模式,将被选择模式下包含的所有目标寄存器组排列,生成故障注入序列。
[0047] 所述故障注入模式按照发生故障的寄存器的数量对目标寄存器组进行归类时,所述故障模式包括:j个寄存器故障模式,所述j个寄存器故障模式包含只有j个寄存器故障的所有目标寄存器组,j=1,2,…。
[0048] 所述故障注入模式按照发生故障的寄存器的位置对目标寄存器组进行归类时,所述故障模式包括:第i级寄存器故障模式,所述第i级寄存器故障模式包含第i级位置的至少一个寄存器故障的所有目标寄存器组,i=1,2,…。
[0049] 所述故障注入模式按照发生故障的寄存器的数量和位置对目标寄存器组进行归类时,所述故障模式包括:第i级j个寄存器故障模式,所述第i级j个寄存器故障模式包含第i级位置、j个寄存器故障的所有目标寄存器组,i=1,2,…,j=1,2,…。
[0050] 所述目标寄存器组中被选择翻转的寄存器不应超过4个,否则难以评估寄存器组受SEU故障影响对电路输出的损害程度,在提高模拟自由度的同时也避免了盲目的无价值的模拟测试。
[0051] 步骤S3.向CUT_0电路输入激励,并在故障注入序列的指导下,用目标寄存器组控制CUT_0电路中对应寄存器的输出翻转。
[0052] 测试开始时,选择故障注入模式中的一种或多种,将被选择模式下包含的所有目标寄存器组排列,生成故障注入序列。测试开始后,依序选择故障注入序列中的每一个目标寄存器组作为待测寄存器组,每个目标寄存器组对应一次模拟,每次模拟翻转待测寄存器组对应的寄存器。
[0053] 该方法还包括以下步骤:
[0054] S4.被测电路在FPGA中被实例化为电路CUT_1,向CUT_1电路输入相同的激励;
[0055] S5.逐比特比较CUT_0和CUT_1的输出,得到比较结果;
[0056] S6.根据所述比较结果,评估对应寄存器受SEU故障影响对电路输出的损害程度。
[0057] 步骤S4.被测电路在FPGA中被实例化为电路CUT_1,向CUT_1电路输入相同的激励。
[0058] 被测电路在FPGA中被实例化为电路CUT_1,在向CUT_0输入激励的同时,向CUT_1电路输入相同的激励。
[0059] 步骤S5.逐比特比较CUT_0和CUT_1的输出,得到比较结果。
[0060] 由于SEU故障注入会改变CUT_0的瞬间状态,所以在同样的激励下,CUT_0和CUT_1的输出结果会有所不同,CUT_0的输出结果能反映SEU故障对运算结果的损害,而CUT_1的输出结果被用来作为真值。
[0061] 步骤S6.根据所述比较结果,评估对应寄存器受SEU故障影响对电路输出的损害程度。
[0062] 从SEU故障注入的时刻开始,使用比较器逐周期逐比特地比较被测电路两个实例的输出结果,并统计模拟长度和故障长度,在模拟长度达到指定的评估长度时结束本次模拟。比较结果主要作用是用于损害评估。统计指定寄存器组合翻转对电路运算结果的影响,即统计两者结果不一样的比特数Lerror和已比较比特数Lsim,直至Lsim达到预设比特长度,绘制每个目标寄存器组对应的Rerror—Lsim曲线(故障损害曲线),其中,Rerror=Lerror/Lsim。根据Rerror—Lsim曲线,分析不同寄存器组合出现SEU故障时对被测电路输出结果的损害。Rerror—Lsim曲线的变化趋势可以反映目标寄存器组SEU故障的特性。如果曲线递增,表明该组寄存器SEU故障的扩散性很强;如果递减,表明影响较大但扩散性较弱。
[0063] 为了避免对下一次模拟的影响,每次模拟过程中,被测电路的损害评估结束后,对被测电路进行复位处理,并进入下一次模拟过程。
[0064] 故障注入模式的选择由用户提出,通过一定的媒介输入给FPGA模拟平台,同时,FPGA模拟平台通过该媒介返回FPGA工作参数和比较结果。本实施例中,选择上位机和UART模块作为媒介。
[0065] 上位机的主要功能有发送遥控指令、分析遥测参数。遥控指令包括测试开始、故障注入模式选择、评估长度、评估结果采集周期等。通用异步收发传输器UART,采用标准的UART协议实现,作为上位机和FPGA模拟平台通信的工具。
[0066] 测试初始化阶段,上位机发送指令,UART接收通道解析指令并转发给相应的模块,各模块执行指令,完成初始化。故障注入模式选择指令转发给SEU故障注入模块;评估长度指令转发给比较器;评估结果采集周期指令转发给UART的发送通道;接收到测试开始指令时,向整个FPGA平台广播测试开始信息。
[0067] UART发送通道采集SEU故障注入模块的状态监测信息和比较器的评估结果,返回给上位机。上位机利用状态检测信息监控测试过程,利用返回的评估结果,绘制故障损害曲线,并保存。
[0068] 上位机仅在测试开始前约束故障注入过程,测试开始后只负责状态接收和参数处理,测试过程中不会影响FPGA平台工作。避免了上位机和FPGA平台的频繁交互,有效减小了通信浪费,显著提升了测试效率。
[0069] 如图2所示,本实施例中CUT选择智能压缩器上下文建模电路,共有7个寄存器,signal_in[3:0]是输入激励,signal_out[2:0]是输出结果,CLK是该时序电路工作时钟。为了实现对寄存器翻转的控制,在每个寄存器输出端口添加一个二输入选择器。如图3所示,当需要翻转该寄存器输出时,拉高数据选择信号select,即选择反相后输出;正常工作时,select信号保持低电平。采用该控制方法对CUT的每个寄存器都做同样的处理,修改后的电路如图4所示。
[0070] 修改后的电路被例化为CUT_0和CUT_1,同时接收激励模块的输入。CUT_0作为故障注入的对象,所有select信号组合成总线,SEU故障注入模块通过该总线与之连接,以控制对应寄存器的翻转。CUT_1作为对比,所有select信号保持低电平。
[0071] SEU故障注入会改变CUT_0的瞬间状态,在同样的激励下,CUT_0和CUT_1的结果会有所不同,CUT_0的输出结果能反映SEU故障对运算结果的损害,而CUT_1的输出结果被用来作为真值。
[0072] 本实施例的故障注入模式设置为单寄存器、单级双寄存器、两级混合双寄存器共3类。每一类模式中,考虑到寄存器的数量,又有如下组合方式:
[0073] 模式1:单寄存器
[0074]
[0075] 模式2:单级双寄存器
[0076]
[0077] 模式3:两级混合双寄存器
[0078]
[0079] 组合方式总数:
[0080] M=M1+M2+M3=28
[0081] 通过指令选择故障注入模式中的一种或多种,SEU故障注入模块响应该指令,依据模式组合目标寄存器组,并生成故障注入序列。
[0082] 本实施例选择开发板平台作为CUT的输入激励,激励方式为4bits随机信号。目标寄存器组的格式为[R1,R2,R3,R4,R5,R6,R7],当Ri=1时,对应寄存器的输出翻转,否则,不翻转。
[0083] 故障注入模式包含的若干个目标寄存器组构成故障注入序列。例如,选择故障模式M1和M2。M1包含的目标寄存器组有[1,0,0,0,0,0,0]、[0,1,0,0,0,0,0]、[0,0,1,0,0,0,0]、[0,0,0,1,0,0,0]、[0,0,0,0,1,0,0]、[0,0,0,0,0,1,0]、[0,0,0,0,0,0,1]共7个,M2包含的目标寄存器组有[1,1,0,0,0,0,0]、[1,0,1,0,0,0,0]、[1,0,0,1,0,0,0]、[0,1,1,0,0,
0,0]、[0,1,0,1,0,0,0]、[0,0,1,1,0,0,0]、[0,0,0,0,1,1,0]、[0,0,0,0,1,0,1]、[0,0,0,
0,0,1,1]共9个。所以,故障注入序列为
[0084] {[1,0,0,0,0,0,0]
[0085] [0,1,0,0,0,0,0]
[0086] [0,0,1,0,0,0,0]
[0087] [0,0,0,1,0,0,0]
[0088] [0,0,0,0,1,0,0]
[0089] [0,0,0,0,0,1,0]
[0090] [0,0,0,0,0,0,1]
[0091] [1,1,0,0,0,0,0]
[0092] [1,0,1,0,0,0,0]
[0093] [1,0,0,1,0,0,0]
[0094] [0,1,1,0,0,0,0]
[0095] [0,1,0,1,0,0,0]
[0096] [0,0,1,1,0,0,0]
[0097] [0,0,0,0,1,1,0]
[0098] [0,0,0,0,1,0,1]
[0099] [0,0,0,0,0,1,1]}
[0100] 共16个分量,每个分量对应一个目标寄存器组。模拟过程从翻转第1个分量对应的寄存器开始,损害分析结束后系统复位,选择第2个分量开始模拟,如此进行,直至第16个分量对应的寄存器翻转模拟完成。
[0101] 关注某些特定的寄存器组合出现SEU故障对被测电路输出结果的损害时,还可以通过人为指定方式生成故障注入序列。例如,只关心第一级位置第1个寄存器出现SEU故障对被测电路输出结果的损害时,人为指定目标寄存器组[1,0,0,0,0,0,0]生成故障注入序列。
[0102] 以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。