1 SRAM型FPGA内部结构
目前,SRAM 型 FPGA 在星载电子产品中应用较多的是Xilinx公司的FPGA。
图1所示为Xilinx系列FPGA器件的内部结构。从图中可以看出,FPGA内部由3 部分组成,分别为:
1)用于实现用户逻辑的可编程阵列(Configurable Logic Block,CLB);
2)用于存储用户数据的左右两列存储器(Block RAM,BRAM);
3)输入/输出模块(I/O Block,IOB)。CLB 中包含有查找表 LUT、进位逻辑和触发器等元件。其中用户逻辑的配置信息存储在 CLB 的存储单元中,该信息如果发生错误,则直接影响到用户逻辑功能。该 FPGA 器件内部的配置存储单元、触发器、LUT、Block RAM、Half Latch都可能发生SEU错误,其中配置存储单元中发生的SEU百分占比最大。
图1 Virtex系列FPGA内部结构示意图
2 SRAM型FPGA的抗单粒子翻转设计方法
2、1 FPGA内部逻辑的三模冗余设计(TMR)
硬件冗余设计技术是一种有效解决单粒子翻转问题的手段,可以将FPGA器件作为冗余的对象或者对FPGA内部逻辑实施三模冗余设计,设计原理如图2所示。若星载电子产品采用多片FPGA的冗余设计方法,则需要增加额外的FPGA仲裁电路,会增加印制板的面积,增大设备的体积、重量和功耗。若采用FPGA内部逻辑的三模冗余设计,即通过片内的多数表决器对 FPGA 输出信号进行表决输出,则可以有效减缓SEU的影响。
图2 三模冗余设计的原理框图
虽然TMR能够提高FPGA可靠性,但是也会降低经过布局布线后的最大时钟速度,增加FPGA的资源使用量,增大芯片功耗。如果FPGA逻辑设计本身就很复杂,则TMR设计后所带来的资源和功耗往往是系统设计所无法容忍的。因此在具体设计时,可针对部分关键逻辑和电路进行TMR 加固设计。在具体实现中,TMR 可以使用Synplify工具进行设置,选择关键寄存器进行冗余设计
2、2 FPGA重配置技术
PGA重配置技术是一种对可编程FPGA的局部或者全部逻辑资源进行重配置的设计方法。该方法不需要额外的FPGA,只需要外部1路脉冲指令即可实现FPGA配置信息的重新加载,控制及实现简单。但是由于重配置过程中FPGA不能正常工作,会引起系统的功能中断。尤其对于使用大容量SRAM型FPGA的星载计算机来说,其配置时间需要持续几十甚至几百ms,系统是无法容忍的。
2、3 FPGA自动刷新技术
FPGA 自动刷新是指周期性地对配置信息进行刷新,无论是否发生单粒子翻转,均对FPGA配置区进行配置数据回写操作。刷新过程无须中断用户的功能。对于 Xilinx 系列的 FPGA,在线刷新CLB/IO/DSP/CLK 区域,虽然不会引起功能中断,但是需要额外的外部刷新控制电路的支持,实现刷新的控制时序。对于使用大容量 SRAM 型 FPGA的星载计算机来说,FPGA每次刷新的时间相对较长,使得实时性不高,若工作轨道的空间环境恶劣,则有可能无法及时纠正FPGA发生的单粒子翻转,从而对计算机的稳定运行造成一定的影响。
2、4 FPGA回读和刷新技术
对 FPGA 配置单元中的信息实时地进行回读和刷新也是一种有效的抗单粒子翻转的设计方法。
回读是将FPGA配置存储器中的所有数据读出的过程,可以用来校验当前的配置信息,同时也可以读出 FPGA 寄存器的当前状态和基于 LUT 的RAM与块状RAM中的当前数据。刷新是指将正确的配置信息回写入FPGA相应的配置单元中。Xilinx系列的FPGA支持以帧(每帧大小为41×32 bit)为单位的回读与刷新操作。与自动刷新不同,回读和刷新是指在运行过程中通过对回读的 FPGA 配置数据进行比对或者以某种校验算法进行检错,检验配置数据的正确性,仅在发现错误时进行回写,即刷新操作,因此能够减少FPGA刷新的次数,更加高效和有针对性地对故障进行恢复。
目前,Xilinx 系列 FPGA 配置访问接口包括JTAG、SelectMap 以及 ICAP 三种。其中,JTAG和SelectMap为外部访问接口,即外部设备通过这两种接口实现对目标FPGA的配置刷新和回读。JTAG接口是串行接口,速度较慢;SelectMap接口是并行接口,速度较快。SelectMap 接口提供了与 Virtex-4配置逻辑之间的一个8 bit/32 bit双向数据总线接口,既可以用于配置,也可以用于回读。ICAP接口为内部访问接口,通过该接口可以访问 FPGA 的配置存储器,实现对自身的故障诊断和检测。Virtex-4系列FPGA三种接口的最大数据带宽如表1所示。
表1 Virtex系列FPGA配置模式
1)JTAG接口
通过 JTAG 接口可对 FPGA 内部的 CLB、BRAM以及IOB进行加载、回读和重配置,一般用于FPGA的在线调试和测试。
2)SelectMap接口
SelectMap 接口有两种配置模式:主动模式仅支持8 bit数据位宽,被动模式下可选择8 bit位宽或32 bit位宽。SelectMap接口将FPGA的配置信息分为若干帧进行传输,每帧大小为 41word(即41×32 bit=1312 bit)。
3)ICAP接口
ICAP接口能够利用FPGA中内嵌的控制器直接对配置数据进行重配置操作。
经过分析,采用SelectMAP 接口和用户自定义的纠错检错方式实现FPGA的回读和动态刷新的优点是实现简单,较为可靠。为降低电路结构的复杂程度,可以无须存储rbb文件和msk文件,通过周期性地以帧为单位对FPGA进行回读、用户自定义的纠错检错和刷新操作,电路上仅需一片反熔丝FPGA 和配套 PROM 芯片(PROM 芯片个数根据FPGA 容量确定)。对于校验后检测到故障的配置帧,通过反熔丝FPGA控制SelectMAP接口对该帧进行数据刷新,及将回读校验后不满足用户自定义校验条件的配置数据从PROM配置信息中重新加载。
SRAM 型 FPGA 的刷新控制电路可以使用外部的反熔丝FPGA或者ASIC来实现,若采用抗辐射等级高的元器件,则具有较高的可靠性。该方法能够对所有配置数据进行定期的回读和纠错检错,在刷新期间不影响FPGA和系统的正常工作;支持以帧为单位的回读、纠错检错和刷新操作,具有SEU的快速诊断和快速故障恢复能力,从而可以有效降低FPGA因受到SEU影响而发生故障的概率。
在实际应用中,需要根据空间运行环境(预估SEU的发生概率和发生频率)、FPGA配置数据的容量等,合理选择和设置FPGA的配置时钟,在满足元器件频率降额的前提下,满足系统对于FPGA整片刷新的时间要求,使得 SEU 故障能够被及时纠正,不会引起故障的累积和扩散。
2、5 FPGA局部动态可重构及恢复技术
基于 FPGA 的局部动态可重构技术是指在一定的控制逻辑的驱动下,不仅能实现系统的高速动态重配置,而且还能实现系统的局部逻辑电路重配置。基于局部动态可重构的故障恢复技术是指从模块角度进行故障恢复。当 DMR/TMR 模块检测到故障后,SE_Controller读取相应故障模块的配置比特,在系统运行时进行故障恢复,速度较快,而且不影响系统运行。
Xilinx FPGA有4种动态可重构设计流程,包括基于比特流的动态可重构设计流程、基于模块化的动态可重构设计流程、基于差异的动态可重构设计流程和基于EAPR(Early Access Partial Reconfiguration)方法的动态可重构设计流程。
2、6 其他FPGA容错设计措施
在FPGA设计中,还有其他的一些容错设计措施,举例如下:
1)状态机编码技术
对关键状态机的状态信息采用编码技术,防止状态机由于单粒子翻转导致的状态跑飞和锁死现象,以提高可靠性。
2)FPGA内部RAM模块的EDAC处理
对FPGA内部的Block RAM,采用EDAC技术对其进行“纠一检二”校验,以提高Block RAM的单粒子效应防护能力
3 工作流程
配置刷新控制用的FPGA以实现对目标FPGA的流程控制,具体步骤如下:
step1:配置刷新控制用的FPGA复位完成后,检测由上位机输出至目标 FPGA 的“配置有效标志信号”,若该信号为1,则表示配置有效,立即启动Virtex系列FPGA的SelectMAP接口方式配置,进入step2;若200 ms后,该信号仍为低电平(无效状态),则自主启动SelectMAP接口方式配置,进入step2;期间保持双向信号INIT为输出状态,且输出低电平,表示FPGA维持在等待配置状态;同时保持复位信号处于有效状态。
step2:实现对 SelectMAP 接口方式配置,配置期间保持复位信号有效,然后进入step3。
step3:等待FPGA输出Done信号(配置完成)上升沿,若发现上升沿,则表示配置完成,进入step4;若计数器已达到预定上限值还未采集到Done信号上升沿,则认为发生配置故障,进入step8。
step4:继续保持FPGA的复位有效20~30 ms,然后释放复位信号,进入step5。
step5:检测由上位机输出至目标FPGA的“重构有效标志信号”,若信号为1,则表示重构有效,立即启动 SelectMAP 接口方式重构操作,进入step6;否则判断“刷新有效标志信号”,若该信号为1,则代表刷新有效,立即启动SelectMAP接口方式回读、纠检错和刷新操作,进入step8;否则保持在step5中。
step6:进行 SelectMAP 接口有效性检测,若发生接口的单粒子功能中断(SEFI),则进入step12,否则进入step7。
step7:实现对SelectMAP接口方式重构操作,并同时保持重构模块的复位信号有效,期间不对主模块进行复位处理;重构完成后20~30 ms释放重构模块的复位信号,之后进入step5。
step8:进行 SelectMAP 接口有效性检测,若发生接口的单粒子功能中断,则进入 step8,否则进入step9。
step9:实现对SelectMAP接口方式配置数据回读操作,并同时进行CRC16检验码的计算;回读配置数据完成后,验证检验码,若发生纠检错的错误,则进入step10;未发生,则进入step11。
step10:实现对SelectMAP接口方式配置数据的刷新操作,完成后进入step11。
step11:判断是否到达配置数据地址的最后值,若到达则进入step5,否则配置数据地址加1 后,进入step9。
step12:建立故障标志,向上位机输出故障标志后,进入step13。
step13:等待上位机发出的重配置指令,若采集到“配置有效标志信号”输出上升沿,清除故障标志;且立即启动SelectMAP接口方式配置,进入step2;否则保持在step13中。
外部控制器实现的配置、回读、纠检错、刷新和局部可重构流程如图3所示。
图3 FPGA工作流程图
首先反熔丝FPGA从并加载SRAM型FPGA,并且启动喂狗信号一直喂狗,并且反熔丝FPGA拉高RDWR_B信号,定时回读SRAM型FPGA的当前程序状态,SRAM型FPGA的回读校验采用按帧编码校验的方式。在回读过程中,对出错的帧进行记录和数传。当SRAM型FPGA的回读校验都完成以后,进行错误判决。首先如果检测出状态错误,并且收到看门狗复位信号,则SRAM型FPGA,重新加载。
- SelectMAP模式
- 加载时序
参考UG470---40页
-
- 回读时序
在ISE中bit流生成时勾选以下三个选项,将会生成rbd(回读)文件和msd(掩码)文件,
在ucf文件中添加如下约束,确保SELECTMAP32接口在配置完后仍然保持:
CONFIGCONFIG_MODE = S_SELECTMAP32 + READBACK;
回读过程中,将回读的32bit内容依次与存储在片外PROM中的rbd文件比较,注意其中msd文件中为1对应的rbd中的bit位不需要比较。如果比较结果除不需要比较的bit位以外其他都一致,则比较结果正确,否则判断发生故障。回读比较可以用来检测FPGA的配置区域逻辑是否发生单粒子翻转。