(兰州空间技术物理研究所,甘肃 兰州 730000)
在航天领域,FPGA被越来越多地应用在复杂的电子设计中,其中采用SRAM工艺的FPGA因其编程速度快、开发周期短等优点,应用最为广泛。但此工艺的FPGA在空间应用中,极易受到空间高能粒子影响,发生单粒子翻转(Single-Event Upset,SEU)。单粒子翻转率随着轨道高度的改变,最高达到25次/器件/天[3],严重影响到航天器任务的可靠性,甚至导致飞行任务失败。
针对SRAM型FPGA的抗单粒子翻转技术也在不断地发展和更新。目前主要有以下几种方法:① 采用三模冗余,利用3个功能相同的冗余模块和多数表决器来避免错误;② 回读配置区的数据帧,与初始配置数据进行对比,对出错帧或是整个配置帧进行刷新[4];③ 配置反熔丝PROM,通过编程定时刷新FPGA[5]。
三模冗余不会对出错位进行定位和修复,当错误累积到一定程度,使得两个以上的冗余模块都出错时,就会得到错误结果。因此,三模冗余需要结合刷新来及时修正已出现的错误。回读刷新一般采用反熔丝FPGA作为控制器对刷新过程进行控制,其软硬件设计较为复杂。相较而言,定时刷新器件自动识别和匹配目标FPGA芯片,只需提供时钟和刷新使能信号,即可自动实现对目标FPGA的刷新操作。因此,采用定时刷新器件进行定时刷新,可大幅降低刷新系统设计的难度和复杂度,缩短开发周期。本文介绍了定时刷新器件与FPGA配合使用的设计方法,并进行了试验验证。
FPGA的周期性刷新支持两种方式:① 整个器件一次性刷新;② 按帧寻址刷新[6]。定时刷新器件对FPGA的刷新为第一种方式,即整器件一次性刷新。定时刷新系统总体框图如图1所示。
图1 定时刷新系统构成框图
由图1可知,FPGA配置程序存储在PROM中,与FPGA之间通过定时刷新芯片连接。定时刷新芯片有两种工作模式:配置模式和刷新模式。系统初始上电时,定时刷新芯片处于配置模式,完成FPGA的上电配置;系统正常工作后,定时刷新芯片进入刷新模式,周期性地将PROM中的配置程序送至FPGA中,完成刷新。在刷新过程中,如果检测到DONE信号变低,则意味着FPGA发生单粒子功能中断,定时刷新芯片会立即对FPGA进行重新配置。
下面以Xilinx公司的Virtex-II系列FPGA XC2V3000为例,进行刷新电路设计及验证。XC2V3000配置访问接口包括JTAG、SelectMap以及ICAP 3种[7],定时刷新器件利用FPGA的JTAG接口完成刷新。
本设计使用的定时刷新芯片BSV2为我国自主研发的电子芯片。该芯片是一款专门针对Xilinx公司Virtex-II系列SRAM型FPGA的配置存储器进行刷新的芯片,其采用盲刷方式,能覆盖除BRAM内容以外的所有配置码流。该芯片采用了高可靠的抗单粒子翻转加固设计技术,抗总剂量指标≥100 krad(Si);单粒子锁定(SEL)LET阈值≥75 MeV·cm2/mg;触发器翻转(SEU)LET阈值≥37 MeV·cm2/mg[1]。BSV2电路功能框图如图2所示。
图2 BSV2电路功能框图
BSV2器件主要由PROM接口、FPGA接口和控制接口组成。PROM接口功能为传输PROM中的配置程序;控制接口功能为配置器件刷新模式;FPGA接口功能为配合FPGA完成刷新功能。
BSV2在工作过程中主要完成以下4个功能:
① FPGA上电配置。系统上电后,BSV2将PROM中的数据读取出来,通过FPGA的D0端写入FPGA中,FPGA根据配置使用的主串或从串模式,由刷新芯片完成配置。
② 回读IDcode。FPGA配置完成后,BSV2通过JTAG端口回读FPGA的型号,根据FPGA反馈的IDcode确定刷新数据的具体长度。
③ 配置存储器刷新。BSV2在确定被刷FPGA型号后,从PROM中读取配置数据,并对配置数据进行处理并完成定时刷新。
④ FPGA重配。若DONE信号变低,说明FPGA发生单粒子功能中断,BSV2通过检测DONE信号,确定DONE端为低电平后,将通过PROGRAM信号对FPGA进行重新配置。
BSV2的刷新周期与FPGA芯片配置的码流长度和刷新时钟相关,刷新周期T=码流长度×时钟周期×2,典型情况如表1所示。
表1 BSV2完整刷新周期
BSV2有4个控制管脚:i_rst(复位信号)、i_clk(工作时钟)、i_pause(芯片使能)和i_half(刷新一半控制)。
其中,拉低i_pause信号,暂停刷新,BSV2芯片会在继续完成当前的刷新周期后进入待机模式;拉高i_pause信号,实现恢复刷新,BSV2信号处于工作状态下,会根据DONE信号来决定是进行FPGA配置还是刷新;i_half信号为低时,BSV2将刷新的区域控制为FPGA的左半边,i_half信号为高时,BSV2刷新区域为整个FPGA;BSV2的所有信号通过i_clk信号进行同步,时钟的工作范围为0~20 MHz。
在电路设计中,通过M0、M1、M2引脚,配置FPGA为主串模式。在串行配置方式下,FPGA通过D0管脚接收BSV2从PROM中获得的配置程序。系统上电后,BSV2的o_oe_prom引脚和o_ce_prom引脚为有效(低电平),BSV2开始读取PROM中的程序数据并通过o_din_fpga管脚将数据发送给FPGA,完成FPGA的配置,配置时间由PROM中程序的大小决定。配置完成后,FPGA的DONE管脚变为高电平。此后,BSV2将通过JTAG管脚对FPGA进行定时刷新。电路原理图如图3所示。
地面测试的PROM带有一个JTAG接口,在设计过程中尽量避免与FPGA的JTAG以菊花链形式连接。两者的JTAG应单独设计,否则在配置刷新过程中会产生刷新错误。连接PROM的o_oe_prom管脚为开漏结构,设计中须接入4.7 kΩ的上拉电阻。FPGA的DONE管脚硬件上也需要上拉电阻,但电阻值不宜选用过大,以保证BSV2对DONE管脚电平的正确识别,本设计中选用330 Ω的上拉电阻。
本应用设计旨在验证采用BSV2进行定时刷新时的硬件时序特性以及刷新措施抗单粒子翻转的有效性。硬件时序特性验证考察配置过程和刷新过程所需要的时间。有效性验证验证两方面的内容:① 刷新是否会对系统的正常工作造成干扰;② 刷新是否能纠正单粒子翻转。
定时刷新测试板如图4所示,主要通过串口接口功能完成验证。
初始上电完成时或受到翻转影响时,FPGA的DONE信号为低电平时,BSV2开始对FPGA进行配置,配置完成后DONE信号拉高。设备上电开始至配置完成的DONE信号测试波形如图5所示。
图5 DONE信号测试波形
BSV2的时间与配置流的数据长度有关,本设计的配置码流长度为1,313,214×8 bit,完整配置耗时约3 s,设备正常工作后,测量FPGA上JTAG的TDO引脚,观察BSV2通过JTAG对FPGA的定时刷新功能,BSV2定时刷新时测试波形如图6所示,测量的刷新周期约为1.9 s,与数据手册上提供的刷新周期的参考值基本一致。
图6 定时刷新测试波形
FPGA配置存储器中与功能实现的相关部分配置位称为有效配置位。有效配置位只是所有配置位的一部分,因此如果FPGA中配置存储器发生单粒子翻转,但发生单粒子翻转的不是有效配置位,那么未必会产生功能中断。为了便于观测和验证,可通过故障注入的方法来模拟单粒子翻转,且注入的故障应可导致功能中断。
采用Verilog语言在FPGA内部实现串口发送模块,该模块可向串口总线循环发送固定数据AA,uart_send模块接口如图7所示。
图7 uart_send模块接口图
图7中,clk为时钟输入;clk_freq为clk频率值;rst为复位信号;baud为波特率值;tx_data为待发送数据;tx_wr为发送使能信号;tx_busy为发送逻辑忙信号;tx为发送至串口总线上的比特流。
FPGA串口发送模块代码如下:
uart
#(
.clk_freq (50000000 ),
.baud (9600 )
)
uart_inst
(
.sys_rst (~rst_n ),
.sys_clk (clk_50m ),
.uart_rx (uart_rx ),
.uart_tx (uart_tx ),
.rx_data (rx_data ),
.rx_done (rx_valid ),
.tx_data (8’hAA ),
.tx_wr (~tx_busy ),
.tx_data (tx_busy )
);
下面介绍测试过程。
首先,将BSV2的刷新使能管脚i_pause拉低,如图8所示,并向PROM中烧写正确的配置数据。完成这一操作后重新上电,BSV2将从PROM中读取配置数据,完成FPGA的配置过程。由于刷新使能无效,BSV2不会对FPGA进行刷新操作。此时,在将上位机上的串口助手波特率设置为9600 bit/s后,可观察到FPGA发送过来的字符AA。
图8 拉低i_pause管脚
然后,通过JTAG向FPGA注入波特率被改写的配置数据(将FPGA代码中的baud波特率改为其他值,如115200之后,重新生成)。由于BSV2的刷新功能仍被禁止,正确的配置数据无法从PROM恢复到FPGA。此时,可观察到串口助手已接收不到FPGA发送的字符。
之后,将BSV2的刷新使能管脚i_pause拉高。此时,BSV2的刷新功能被启用,BSV2从PROM中读取正确配置数据,对FPGA配置存储器进行定时刷新。此时,串口助手可重新接收到FPGA发送的字符AA,如图9所示。
图9 正确接收字符
i_pause被拉高后,刷新以固定周期进行,可观察到串口助手始终能正确接收到字符AA,说明刷新不会对FPGA功能的正常运行造成影响。
通过使用定时刷新器件BSV2,大大简化了SRAM型FPGA的刷新设计过程。基于BSV2的定时刷新可以有效纠正SRAM型FPGA的单粒子翻转,且不会对FPGA的正常工作过程造成影响。但定时刷新器件只能刷新FPGA中除BRAM以外的配置码流,BRAM存储的是实时状态信息,其中的内容有可能受到单粒子翻转的影响[8]。因此,要想有效且全面地解决单粒子翻转对FPGA的影响,可采用三模冗余和定时刷新器件相结合的加固技术。