胡洪凯,施 蕾,董暘暘,刘 波,叶有时
(北京控制工程研究所,北京 100190)
目前FPGA 在星载电子产品和设备中的应用非常广泛,空间应用的FPGA 主要有反熔丝FPGA和基于SRAM 型FPGA 两种类型。从应用领域看,前者主要应用于控制系统及所属星载电子产品,后者主要应用于载荷和应用系统。究其原因,主要是SRAM 型FPGA 的抗单粒子翻转能力较差,在轨容易受到SEU 影响而发生逻辑错误和功能中断,引起FPGA 所在产品的功能失效。这需要通过系统复位、断电重启动或者切换备份等手段才能完成系统的恢复。从应用场合看,载荷和应用系统对于FPGA 的故障恢复过程通常能够容忍,而对于控制系统来说,FPGA 的故障恢复会直接影响到卫星的控制精度和姿态稳定度。
星载计算机作为控制系统的核心部件,主要利用反熔丝FPGA 完成数字和逻辑功能,非常慎重选 用SRAM 型FPGA。考虑到SRAM 型FPGA 易发生单粒子翻转,会引起计算机发生复位或者切机。因此,星载计算机使用的SRAM 型FPGA 必须采取相应的抗单粒子翻转设计措施,提高FPGA 空间应用的可靠性。
目前,SRAM 型FPGA 在星载电子产品中应用较多的是Xilinx 公司的FPGA。
图1所示为Xilinx Virtex-4(V4)系列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-4 系列FPGA 内部结构示意图Fig.1 Simplified block diagram for Virtex-4 FPGA
硬件冗余设计技术是一种有效解决单粒子翻转问题的手段,可以将FPGA 器件作为冗余的对象或者对FPGA 内部逻辑实施三模冗余设计,设计原理如图2所示。若星载电子产品采用多片FPGA 的冗余设计方法,则需要增加额外的FPGA 仲裁电路,会增加印制板的面积,增大设备的体积、重量和功耗。若采用FPGA 内部逻辑的三模冗余设计,即通过片内的多数表决器对FPGA 输出信号进行表决输出,则可以有效减缓SEU 的影响。
图2 三模冗余设计的原理框图Fig.2 Block diagram for triple modular redundancy(TMR)
虽然TMR 能够提高FPGA 可靠性[1],但是也会降低经过布局布线后的最大时钟速度,增加FPGA 的资源使用量,增大芯片功耗。如果FPGA逻辑设计本身就很复杂,则TMR 设计后所带来的资源和功耗往往是系统设计所无法容忍的。因此在具体设计时,可针对部分关键逻辑和电路进行TMR 加固设计[2-3]。在具体实现中,TMR 可以使用Synplify 工具进行设置,选择关键寄存器进行冗余设计。
FPGA 重配置技术是一种对可编程FPGA 的局部或者全部逻辑资源进行重配置的设计方法。该方法不需要额外的FPGA,只需要外部1 路脉冲指令即可实现FPGA 配置信息的重新加载,控制及实现简单。但是由于重配置过程中FPGA 不能正常工作,会引起系统的功能中断。尤其对于使用大容量SRAM 型FPGA 的星载计算机来说,其配置时间需要持续几十甚至几百ms,系统是无法容忍的。
FPGA 自动刷新是指周期性地对配置信息进行刷新,无论是否发生单粒子翻转,均对FPGA 配置区进行配置数据回写操作。刷新过程无须中断用户的功能。对于Xilinx 系列的FPGA,在线刷新CLB/IO/DSP/CLK 区域,虽然不会引起功能中断,但是需要额外的外部刷新控制电路的支持,实现刷新的控制时序。对于使用大容量SRAM 型FPGA的星载计算机来说,FPGA 每次刷新的时间相对较长,使得实时性不高,若工作轨道的空间环境恶劣,则有可能无法及时纠正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-4 系列FPGA 配置模式Table 1 Configuration modes for Virtex-4 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 故障能够被及时纠正,不会引起故障的累积和扩散。
基于 FPGA 的局部动态可重构技术是指在一定的控制逻辑的驱动下,不仅能实现系统的高速动态重配置,而且还能实现系统的局部逻辑电路重配置[4]。基于局部动态可重构的故障恢复技术是指从模块角度进行故障恢复。当DMR/TMR 模块检测到故障后,SE_Controller 读取相应故障模块的配置比特,在系统运行时进行故障恢复,速度较快,而且不影响系统运行。
FPGA 动态重构技术由Xilinx 公司首先提出和实现,而Altera 公司于2010年7月发布的Stratix V型FPGA 也开始支持动态重构技术。
Xilinx FPGA 有4 种动态可重构设计流程,包括基于比特流的动态可重构设计流程[5]、基于模块化的动态可重构设计流程[6,8-9]、基于差异的动态可重构设计流程[7]和基于EAPR(Early Access Partial Reconfiguration)方法的动态可重构设计流程[10]。
EAPR 是Xilinx 最新提出的一种动态可重构设计方法或设计流程。通过使用动态重配置设计工具PlanAhead,可以使整个动态重配置设计流程更加简化。
基于EAPR 的动态重配置设计流程分为以下步骤:
1)设计输入与综合(HDL Design Description and Synthesis)
包括顶层模块(Top Module)、静态子模块(Static Module)、各个子重构模块PRM(Partial Reconfiguration Module)的设计与综合。
2)添加设计约束(Set Design Constrains)
这一步骤主要是定义顶层文件的引脚约束以及一些全局的时序约束。
3)借助PlanAhead 工具完善设计(EAPR Design with PlanAhead)
4)各模块激活实现(Active Modules)
5)合并实现(Final Assembly)
完成顶层模块、静态子模块以及各子重构模块的装配,生成FPGA 的初始完整配置比特流文件以及各子重构模块的局部配置比特流文件。
在工程实践中SRAM 型FPGA 局部可重构借鉴于软件的在轨注入和程序修改,通过OBDH 数管分系统进行FPGA 重构模块配置信息的在轨注入,再通过配置电路对FPGA 的局部重构模块的配置数据进行更改并重新注入,从而达到屏蔽FPGA 内部故障区域或者在轨修改FPGA 局部逻辑功能的目的,提高其容错能力和故障的地面干预与处理能力。
在FPGA 设计中,还有其他的一些容错设计措施,举例如下:
1)状态机编码技术
对关键状态机的状态信息采用编码技术,防止状态机由于单粒子翻转导致的状态跑飞和锁死现象,以提高可靠性。
2)FPGA 内部RAM 模块的EDAC 处理
对FPGA 内部的Block RAM,采用EDAC 技术对其进行“纠一检二”校验,以提高Block RAM的单粒子效应防护能力。
为了验证Virtex-4 系列FPGA 的SelectMAP接口的回读、纠检错和刷新技术以及局部可重构技术,设计了一套验证测试系统。
1)Windows XP/ Windows 7/ Windows 8;
2)Xilinx ISE 13.2;
3)Xilinx PlanAhead 13.2;
4)Xilinx ChipScope 13.2。
1)Xilinx Virtex 系列 FPGA;
2)Z800 计算机。
配置刷新控制用的FPGA 以实现对目标FPGA的流程控制,具体步骤如下:
step1:配置刷新控制用的FPGA 复位完成后,检测由上位机输出至目标FPGA 的“配置有效标志信号”,若该信号为1,则表示配置有效,立即启动Virtex-4 系列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 工作流程图 Fig.3 Flow chart of FPGA
本文综述了几种基于SRAM 型FPGA 在空间应用的抗单粒子翻转的设计方法,包括FPGA 的TMR 设计、重配置、自动刷新技术、回读和刷新技术以及局部动态可重构技术等。通过采用以上一种或者多种容错设计方法,可以增强FPGA 对于空间SEU 的防护能力,有利于提高星载计算机的可靠性。在某卫星的搭载试验项目中,针对Xilinx Virtex-4 FPGA 的抗单粒子翻转设计,综合采用了TMR 设计、回读和刷新技术以及局部可重构技术,后续将通过在轨飞行试验以验证这些技术的SEU防护效果,为航天应用提供第一手的试验数据。
(References)
[1]Fuller E, Caffrey M, Salazar A, et al.Radiation testing update, SEU mitigation, and availability analysis of the Virtex FPGA for space reconfigurable computing[C]//4thAnnual Conference on Military and Aerospace Programmable Logic Devices(MAPLD).Washington D.C., 2000
[2]Praveen Kumar Samudrala, Jeremy R, Srinivas Katkoori.Selective triple modular redundancy(STMR) based single-event upset(SEU) tolerant synthesis for FPGAs[J].IEEE Transactions on Nuclear Science, 2004, 51(5)∶2957-2969
[3]Sterpone L, Violante M, Jeremy R, et al.Analysis of the robustness of the TMR architecture in SRAM-based FPGAs[J].IEEE Transactions on Nuclear Science, 2005, 52(5)∶1545-1549
[4]任麒斌.局部动态可重构硬件框架和开发方法研究[D].杭州∶杭州电子科技大学, 2009
[5]徐新民, 乐莹, 尚丽娜.FPGA 动态部分重构的研究及位流信息重构的实现[J].科技通报, 2008, 24(2)∶235-240 Xu Xinmin, Le Ying, Shang Lina.The research on partially dynamic reconfiguration for FPGA and its implementation based on bitstream[J].Bulletin of Science and Technology, 2008, 24(2)∶235-240
[5]Xilinx Inc.Two flows for partial reconfiguration∶module based or difference based[EB/OL].[2004-09-09].http∶//www.xilinx.com/bvdocs/appnotes/xapp290.pdf.
[6]李涛, 刘培峰, 杨愚鲁.动态部分重配置及其FPGA实现[J].计算机工程, 2006, 32(14)∶224-226 Li Tao, Liu Peifeng, Yang Yulu.Partially run-time reconfiguration and its implementation on FPGA[J].Computer Engineering, 2006, 32(14)∶224-226
[7]周盛雨, 孙辉先, 陈晓敏, 等.基于模块化设计方法实现FPGA 动态部分重构[J].微计算机信息, 2008, 24(5)∶164-166 Zhou Shengyu, Sun Huixian, Chen Xiaomin, et al.A module-based dynamic partial reconfiguration of FPGAs[J].Control &Automation, 2008, 24(5)∶164-166
[8]许俊, 晏渭川, 彭澄廉.基于模块的动态可重构系统设计[J].计算机工程与设计, 2008, 29(6)∶1367-1383 Xu Jun, Yan Weichuan, Peng Chenglian.Design of flow for dynamic reconfigurable system based on module[J].Computer Engineering and Design, 2008, 29(6)∶1367-1383
[9]Xilinx Inc.Early access partial reconfiguration user guide[EB/OL].[2006-05-06].http∶//www.xilinx.com