APP下载

星上SRAM型FPGA抗SEU内部刷新系统设计

2022-04-26王番施敏华常亮

航天器工程 2022年2期
关键词:粒子电路可靠性

王番 施敏华 常亮

(1 中国科学院微小卫星创新研究院,上海 201210)(2 中国科学院大学,北京 100049)(3 上海微小卫星工程中心,上海 201210)

静态随机存储器(SRAM)型现场可编程门阵列(FPGA)在星上的应用非常广泛,但由于工艺原因,该类器件在空间环境下,易受到空间高能粒子的辐射,发生单粒子翻转(Single-Event Upsets,SEU)等问题。而FPGA依靠存储在配置存储单元里的配置数据,实现其逻辑功能。所以如果配置存储单元发生单粒子翻转,可能会使FPGA无法实现预期的功能,造成严重后果。

为了解决SRAM型FPGA单粒子翻转问题,国内外都做了很多相关研究。最直接的是对器件的制造工艺上增加抗辐照处理。除了工艺层面,常见的解决方法还有三模冗余(Triple Modular Redundancy, TMR)技术,即将电路复制为三份,再通过多数表决器对电路结果进行比较[1]。TMR虽然提高了设计的可靠性,但是相应的也会增加面积和功耗。除此外,若多数表决器电路发生单粒子翻转,则会造成严重故障。鉴于此,文献[2]根据SRAM型FPGA可重配置特性提出了对配置存储器进行刷新(Scrubbing)的方法,可以在不中断用户设计运行的情况下直接修复配置内存。常见的刷新可分为外部刷新和内部刷新[3]。外部刷新接口通常使用SelectMAP模式,它一般是将刷新控制电路放在抗辐照的反熔丝FPGA中,并将原始比特流文件存储在外部flash或prom存储器中[4]。外部刷新常用的手段有定时刷新或回读检测刷新。定时刷新是按事先设定好的时间间隔对整个配置帧进行刷新[5]。这类刷新需要较大的存储空间来存储原始比特流文件,而且它的刷新速率较慢,受到配置时钟频率和比特流文件大小的限制。文献[6]中采用回读检测刷新,对FPGA的配置数据进行回读并检测是否出现SEU,若出现则重新加载原始比特流[7],该方法设计复杂加载耗时。之后文献[8]中提出了动态部分重构刷新方法,首先对配置数据进行纠错编码(Error Correcting Code,ECC),之后以帧为单位对配置数据进行回读以及ECC校验,如果校验错误,则对该帧进行重新刷新。外部刷新可靠性高,但是设计复杂,而且需要额外的存储器和控制芯片。内部刷新是通过内部配置访问接口(Internal Configuration Access Port, ICAP),对FPGA进行回读,之后经过ECC校验,判断是否出错,最后进行重写。文献[9]提出在关键电路上通过复制与比较进行位置感知,从而降低冗余度,提高了内部刷新速率。而文献[1]通过提取比特流的必要位减少回读刷新时间,再通过控制刷新次数来提高系统的可靠性。对比外部刷新,内部刷新无需外部额外的芯片,所以系统更加简洁,配置速度也更快。文献[10]中将内部刷新与外部刷新方法相结合,既保留了外部刷新的高抗辐照性,又利用内部刷新提高了刷新速度,但该方法设计十分复杂,不易实施。

传统的内部刷新电路是通过ICAP回读配置帧后,再通过内置的纠错电路FRAME_ECC进行检错纠错。该系统结构存在的主要问题是刷新控制逻辑以及ECC校验电路也会有可能受到辐射影响出现单粒子翻转现象,而且内置的ECC校验电路只能校验纠正1 bit翻转,检测2 bit翻转,无法对多位翻转进行检验。鉴于以上分析,本文在此类传统的内部刷新电路基础上,提出对刷新电路增加三模冗余加固处理,并设计了新的检验纠错系统,最高可支持对3位翻转的检错纠正。

1 系统分析

目前传统的内部刷新方案,其刷新控制电路部分没有进行抗单粒子加固,但刷新控制电路内部同样可能会出现单粒子翻转问题。一旦该部分电路出现问题,则可能会导致刷新系统紊乱,从而引起系统故障。系统造成很严重的影响。所以本文针对该问题,提出对刷新控制电路模块部分增加三模冗余加固设计。同时对纠错码进行研究,提出纠错能力更强的纠错码。针对以上所做出的改进,对系统可靠性产生的影响进行了如下分析。

1.1 纠错码分析

最常用的检错纠错手段是利用Xilinx公司提供的FRAME_ECC。FRAME_ECC是Xilinx官方提供的内嵌于配置存储器的检错纠错电路[11]。它采用的编码方式是13位汉明码,在系统上电时,会计算初始各个配置帧对应的ECC值,并对其进行存储。之后一旦发现与原始存储的ECC值不一致则判定为出现故障,便可及时对不一致处修复,解决单比特翻转。但是它只能做到对单个比特位翻转进行纠正,可以检测2比特位翻转并发出警告。而随着FPGA设计越来越复杂,电路越来越集中,造成连续多比特翻转的现象越来越多。所以传统的FRAME_ECC纠错码已经不满足需求。由此提出可以实现多位纠错的里德-穆勒码(Reed-Muller,RM)[12]。RM码里的编码方案是由Muller在1954年提出的,同年,Reed又提出了相应的解码方案,由此构成了完整的RM码。RM码由于其延时较低的特性,被广泛应用在星载计算机的信息传输上。

假设存在整数m和r,使得在0≤r≤m时,存在一个r阶RM码,并且其对应的二进制码长l为2m,便将此时的RM码记为RM(r,m)[13-14],可得

l=2m

(1)

(2)

dmin=2m-r

(3)

(4)

式中:l为二进制码长;k为阶数;dmin为最小码距;b为最大可以纠正的错误位数。取r=2,m=5,则dmin=8,b=3。所以由此可以得出RM(2,5)纠错码可以实现对3位错误比特位的纠正,这比常用的FRAME_ECC纠错码的纠错能力要强。

RM(2,5)码编码时,假设输入数据的位宽为16 bit,那么输出数据位宽是32 bit。由以上分析可知,RM码中存在5个变量,将这5个变量设为a1,a2,…,a3,并定义编码因子Q=(1,Q1,Q2),其中

Q1=(a1,a2,…,a5)T

(5)

Q2=(a1a2,a1a3,…,a4a5)T

(6)

将编码因子Q与待编码的输入数据进行按位异或后,即可得到编码后的输出数据。

RM(2,5)码译码过程需要分为3个过程,假设待译码的数据为data_out[31∶0],译码后的数据表示为data_decode[15∶0]。首先计算译码后的低十位data_decode[9∶0]。低十位中的每一位需要通过8位的校验和确定。以data_decode[0]为例,在得到8位校验和后,若其中0的个数大于1的个数,则data_decode[0]=0,反之为1,若二者相等,则说明发生了4 bit以上翻转,该位出现错误。

C0,n=data _out[31-4n]+data_out[30-4n]+data_out[29-4n]+data_out[28-4n]

(n=0,1,…,7)

(7)

Dn=data _out[n]-[data_decode[9∶0]]Q2

(n=0,1,…,31)

(8)

计算data_decode[14∶10],该部分由16 bit校验和决定,首先根据式(8),得到中间变量Dn,根据这个中间变量由高位到低位,相邻两位两两相加,可得到16 bit校验和C′。

(9)

图1 RM(2,5)码解码过程

1.2 可靠性分析

没有做任何抗单粒子举措的SRAM型FPGA,其可靠性R随时间t变化的曲线服从泊松分布[15]

R(t)=e-λt

(10)

式中:λ为单粒子翻转概率。TMR两个及两个以上模块正常运行,则系统正常,所以增加了TMR保护措施的FPGA,其可靠性为

R(t)=3e-2λt-2e-3λt

(11)

NASA通过粒子束来模拟高能粒子,并对器件进行辐射,以此得到了器件单粒子翻转的概率λ大约为1.1×10-6bit/d[16]。根据此值,通过Matlab软件仿真,可以得到未加抗单粒子保护措施以及增加TMR后,对应的可靠性变化曲线,如图2所示。从中可以看出增加TMR后的可靠性明显增强。

图2 可靠性对比(未加任何缓解SEU措施、增加TMR)

设输入输出位宽为n,则增加了FRAME_ECC纠错码的系统,其可靠性为

(12)

而采用RM(2,5)纠错码的系统可靠性为

(13)

图3显示了未加任何纠错码,使用FRAME_ECC纠错码以及RM(2,5)码三者分别对应的可靠性曲线,从中可以看出适用了RM(2,5)纠错码的可靠性最高,FRAME_ECC码次之,未使用任何纠错码的可靠性最低。

图3 可靠性对比(未加任何纠错码、 FRAME_ECC以及RM码)

2 系统设计

本文提出基于内部刷新的抗SEU系统框如图4所示,主要包括刷新器(scrubber)、ICAP接口,待测试模块DUT(Design under test,即为实际应用中用户所设计的功能电路),其中scrubber主要包含刷新控制模块、地址产生模块、ICAP接口控制模块、RAM存储器以及纠错模块,纠错模块采用的是RM(2,5)纠错码。同时因为scrubber自身所在电路同样可能被高能粒子辐射出现单粒子翻转问题,所以为了降低该部分电路出现故障的可能性,在此系统中特别提出对scrubber模块进行三模冗余加固,提高了scrubber容错率,同时也增加了系统的可靠性。

图4 系统结构

2.1 刷新器模块设计

1)地址产生模块

地址产生模块的主要功能是提供检错以及纠错所需要的帧地址。无论是对FPGA进行初始化还是刷新操作,都需要以帧的形式回读配置数据,所以首先必须知道存储的配置数据所对应的帧地址。在对当前帧检错纠错完成后,地址产生模块会生成下一帧数据的地址。如果在此过程中,scrubber中任何一个冗余模块出现单粒子翻转,地址产生模块将会把帧地址改为scrubber模块的初始地址,以此完成对scrubber模块的刷新操作。这样就可以避免由于错误累积,导致多个冗余模块同时出现故障,导致整个电路出错。

2)ICAP接口控制模块

ICAP是FPGA内部的专用接口,可以通过例化其原语进行使用。ICAP接口控制模块要严格遵循Xilinx公司规定的ICAP接口读写时序进行操作。因此该模块的主要功能是根据时序要求,向ICAP接口发送读写使能以及帧地址,已完成对配置数据的读写。ICAP数据接口data信号主要的来源有3种:①根据Xilinx提供的配置手册,在通过ICAP读写之前都需要先发送配置命令;②由地址产生模块提供的帧地址;③RM检错纠错模块检查到回读到的数据发生了SEU后,对数据进行纠正,纠正后的数据需要重新通过ICAP写入原始帧。

3)纠错模块

纠错模块主要功能是对回读的数据进行检查并判断是否存在单粒子翻转,若翻转则进行纠正。在此采用的纠错码为RM(2,5)码,最多对连续3位单粒子翻转进行纠正,可检测连续4位翻转但无法修复。回读的数据经过纠错模块内的编码单元后,存储到块状存储器(BRAM)中,之后再从BRAM中读出并经过译码单元判断是否出错,若出错位数低于3位,译码单元可直接进行纠正,若超过3位错误,则会给出错误信号error_status[1∶0],00表示无错误出现,01出现了3位以下错误且进行了纠正,10表示出现4位翻转,11表示4位以上的翻转。10以及11状态都无法对翻转直接进行纠正。

4)刷新控制模块

刷新控制模块作为整个scrubber的核心模块,通过发送各种指令信息控制其他子模块的运行。主要指令包括开始生成帧地址指令、开始读写配置数据指令等。刷新控制模块收到由上位机发来的刷新开始命令后(scrub_start),首先向地址产生模块发送帧地址生成命令(frame_addr_gen_start),在收到地址产生模块返回的帧地址生成完毕的信号后,向ICAP接口控制模块发送回读配置数据(start_rb)指令。待纠错模块对回读的数据检错纠错完毕后,刷新控制模块会重新控制地址产生模块生成下一帧地址。如果纠错模块是4位以上的翻转,系统无法修复,刷新控制模块会关闭所有使能来暂停系统工作。以上整个过程中如果scrubber冗余模块存在错误,会立刻关闭所有操作,并将地址产生模块的初始帧地址切换为scrubber,重新开始对scrubber进行刷新。

2.2 改进的三模冗余设计

如前文所述,scrubber所在电路会受到高能粒子辐射,发生单粒子翻转。而传统的内部刷新电路并没有对scrubber进行加固措施。为了解决这个问题,本文提出对scrubber进行三模冗余加固措施。但冗余模块仍会出现单粒子翻转,若翻转后不进行维护,随着错误累积,可能会出现多个冗余模块同时出现故障,而此时多数表决器误将多个出错冗余块产生的输出作为正确结果,进行表决,这会引起scrubber模块输出错误,从而导致系统出错。鉴于此,本文对每个三模冗余部分增加错误判断信号,若该信号有效,则说明冗余模块其一出现了故障,那么地址产生模块会将刷新地址改为scrubber初始地址,对整个scrubber模块进行刷新,以此达到避免错误积累的目的。经过三模冗余加固后的scrubber如图5所示。对其中的错误判决器输入输出真值表经过化简后,可得到其电路如图6所示。

图5 三模冗余结构

图6 错误判决器电路图

2.3 分布式布局

FPGA在布局布线时,开发工具往往会倾向于将各个模块集中分布,这不利于我们确定DUT以及scrubber分别对应的起始帧地址。所以本文提出利用PlanAhead软件中的Pblock工具对两个模块的分布位置进行调整。在进行布局布线时,对scrubber与DUT分布的位置进行手动的调整与约束,以此来将两个模块布局布线分隔开。这样在调整之后,可以根据FPGA帧地址排布规律,就可以得到scrubber以及DUT分别对应的起始帧地址,之后可根据需要,将刷新的帧地址切换到DUT或者scrubber模块。

2.4 系统工作流程

综上所述,整个内部刷新系统的工作流程如图7所示。首先对系统进行初始化配置,之后将刷新使能信号拉高,进入刷新状态,然后地址产生模块开始产生帧地址。ICAP接口控制模块根据帧地址回读对应的配置数据,将帧地址以及读写命令序列发送至ICAP接口。纠错模块对回读到的配置数据进行检查,若正确则继续判断scrubber是否出错,继而继续产生下一帧地址;若3位以下发生翻转,纠错模块纠错后再写入对应的帧地址,然后开始下一帧读写。如果发生3位以上的翻转,纠错模块无法恢复,那么系统要停止工作,重新对系统进行初始化。在以上过程中,若scrubber冗余模块发生错误,则将帧地址切换到scrubber的初始地址,系统进入到对scrubber进行刷新的状态。

图7 系统工作流程

3 实验与仿真

本文在xilinx公司推出的kintex-7系列的XC7K325TFFG676芯片上,对上述提出的系统进行实验仿真。DUT模块首先选择为常用的4位加法器,除此外,为了更贴合实际情况,还从IWSL2005基准电路中选取3种不同的电路用作与DUT模块,这3个电路分别代表着不同的应用领域,其中一个为组合逻辑较多的算术电路(FPU),另一个为时序逻辑较多的控制电路(MEM_CTRL),最后一个既包含算术电路又包括控制电路(USB_FUNC)。以4输入加法器作为DUT模块为例,进行逻辑综合,图8中(a)为由vivado工具自动布局布线后的结果,图中红色部分是DUT模块布局布线所在区域,从中可以看出DUT与scrubber模块没有很明显地被分割开。图8(b)为使用pblock工具调整后的布局布线图,从中可以看出经过调整布局后,可以将DUT与其他模块分布位置分割开。同时可以得到DUT分布是在FPGA的下半部分,第2行30列的第0帧到第42帧。那么根据FPGA帧地址排列规则以及DUT所在的行和列位置信息,可以得到DUT的有效帧地址是0x110f00-0x110f2a。由此可以很方便地对DUT帧的起始位置进行定位。

图8 布局布线

对以上4种DUT电路设置为4个不同的工程,分别进行逻辑综合。表1显示了4种DUT自身所消耗的FPGA内部资源,以及在这4种DUT电路下,传统内部刷新系统整体的资源消耗情况和本文所提出的改进后的内部刷新系统所消耗的资源情况。从表中可以看出,改进后的系统,由于对scrubber增加三模冗余,故而导致资源占用率相对传统内部刷新有所增加。即便如此,改进后的内部刷新系统所占用的资源仍然很低。在系统频率为100 MHz时,本文所设计的内部刷新系统,回读一帧需要114个时钟周期,也就是需要1.14 μs,配置一帧数据需要110个时钟周期,即1.1 μs。

表1 资源消耗统计

本文采用故障注入的方式来模拟单粒子效应,以此来验证系统的抗辐射性能。针对以上4组DUT电路,将每组DUT所在的系统例化两次,其中一份作为对照组,另一份为实验组,并同时施加相同的激励。采用线性反馈移位寄存器(linear feedback shift register,LFSR)生成随机故障注入帧地址,对实验组进行故障注入。在故障注入过程种,如果观察到实验组DUT的输出与对照组不一致,那么此时已经注入的故障数目即为该系统最大可以接受的故障注入数目。

本文设计了3种刷新系统方案来综合比对,来说明改进后刷新系统抗辐射性能。

(1)对传统内部刷新系统进行故障注入,以得到其最大故障注入数目;

(2)将传统内部刷新系统的刷新电路部分增加三模冗余处理后,对该系统进行故障注入,得到其最大故障注入数目;

(3)对本文所设计的内部刷新系统进行故障注入,得到最大故障注入数目。

为了使实验数据更准确,减少偶发性造成的影响,重复对每种方案进行100次故障注入实验。图9显示了方案(3)在DUT电路为4位加法器时,其中一次回读到的配置数据,图9(a)为故障注入前的数据,图9(b)为故障注入后的数据,红色框为1位单粒子翻转,蓝色框为2位,黄色框里的为3位单粒子翻转,图9(c)为经过纠错刷新后的数据,从中可以看出该系统可以实现对3位及3位以下的翻转实现纠错。

图9 回读数据

100次故障注入实验后,得到的各系统最大故障注入数目如表2所示。从表中可以得到,在4种DUT电路平均下,方案(2)最大故障注入数目约为方案(1)的1.93倍,这说明了增加三模冗余防护,可在一定程度上提高系统的容错率。方案(3)也就是本文所提出的系统最大故障注入数目是方案(1)的2.56倍,是方案(2)的1.34倍,这表明采用纠错能力更强的纠错码可以进一步提升系统的容错能力。图10为表2对应的最大故障注入数目统计图,从图中也可以直观地看出方案(3)的容错率最高,方案(1)最低。综上,本文所提出的内部刷新系统方案相较于之前的传统内部刷新系统,其容错率得到了一定的提升。

表2 最大故障注入数目统计

图10 最大故障注入数目统计图

4 结论

本文在经过对抗单粒子翻转问题研究后,并结合国内外单粒子翻转问题进行的研究,提出对传统的内部刷新系统进行改进。具体改进措施为首先将刷新模块与DUT分布式布局,方便确定两个模块对应的帧地址。之后对刷新控制模块增加三模冗余,提高刷新控制模块的容错率,并且在三模冗余处增加错误判决器,可以对三模冗余的情况进行实时检查,如果任一冗余模块发生单粒子翻转,则会立刻对刷新模块进行刷新,防止错误累积,造成严重后果。除此外,还提出使用纠错能力更强的RM(2,5)码来替代传统的FRAME_ECC纠错码,使得系统可以对3位及3位以下的翻转进行检错和修正。通过对系统可靠性进行分析,可以得出改进后的系统可靠性大幅增加。最后通过故障注入实验,证实了改进后的系统对故障的容错率约是传统内部刷新系统的2.56倍。综上,改进的刷新系统可靠性以及容错率都大幅增加,为卫星上存在的单粒子翻转问题的解决提供了参考设计。随着电路逐渐复杂集中,同时出现多个粒子被打翻的可能性越来越大,所以对纠错码纠错能力也提出了更高的要求。在之后的研究中,可以对纠错码进行进一步的改进。

猜你喜欢

粒子电路可靠性
电路的保护
基于用户和电路的攻击识别方法
某重卡线束磨损失效分析与可靠性提升
高密度存储服务器可靠性设计与实现①
高密度存储服务器可靠性设计与实现
“简化法”巧解电路问题
可靠性增长试验与相关概念的关系及作用研究
虚拟校园漫游中粒子特效的技术实现
一种用于抗体快速分离的嗜硫纳米粒子的制备及表征
巧用求差法判断电路中物理量大小