SEU—如何对付这看不见的黑手
单粒子翻转SEU(Single Event Upset)是由于在空间环境下存在着大量高能带电粒子,电子元器件受此照射,引起电平状态的跳变,“0”变成“1”,或者“1”变成“0”。也有称它为软失效,因为它并不是器件硬件上的真正损坏,而是可恢复的。单粒子翻转最容易发生的是像RAM这种利用双稳态进行存储的器件,高可靠系统中对大容量的DRAM存储产品都有SEU的检测和纠错要求。随着芯片集成度的增加,SRAM受SEU的影响也不可小觑了,而绝大多数FPGA产品的配置都是基于SRAM的,越来越多的用户开始着手考虑如何降低SEU对FPGA系统的影响,从而避免导致系统功能紊乱,和严重时发生的灾难性事故。现在我们就来看看莱迪思的主流产品是怎样实现上述功能的。
如图是ECP系列的SED检测功能模块,主要由配置空间的访问控制器, SED控制状态机,32位的CRC数据寄存器几部分组成。SED控制器串行地回读所有配置存储空间的状态值,进行CRC校验,如果与保存在32位CRC校验码空间的值相同,就证明目前配置空间没有发生SEU。反之就可以认为发生了一处或多出软失效。这里更重要的一点是SEU检测是在后台进行的,期间不会对器件的正常工作有任何影响。而32位的校验码是由Diamond开发工具根据比特流文件自动生成,并在编程下载时自动更新到前述的寄存器中。需要注意的是EBR和分布式存储器的内容不在CRC校验的保护之中。
上图是SED总体模块的时序图。SEDENABLE原来控制模块工作的使能信号,SEDSTART来触发检测的开始,SEDINPROG为高表示对整个配置空间的检测正在进行中,SEDDONE表示一轮的检测完成,如果发现CRC检验有错就用SEDERR信号来指示。进行一轮检测所需要的时间取决于器件的大小和检测电路所用时钟的快慢,一般来讲,对ECP5系列器件检测时钟在2.5MHz时在一秒内就可以完成全芯片的检测工作。
在检测发现了SEU的情况下我们应该怎么处理?最直接的做法就是把配置文件重新再刷新一遍,也就是我们所说的SEC(Single Event Correction)。
重新配置有多种方式,Master SPI,Slave SPI,I2C或者JTAG方式都可以。上图就是用MSPI方式加载。给PROGRAMN管脚一个低到高的翻转就能让器件从片外的SPI Flash里读取配置信息来覆盖原来的文件。配置开始后DONE信号变低,直到成功完成配置时变高指示配置成功完成。
由于SEU发生概率很低,实际电路工作时很难出现。我们又该怎么样来检验我们的SED/SEC工作是否可靠呢?Diamond软件提供了一个注入软失效SEI(Single Event Injection)的调试功能。这个工具可以让你以后台的方式随机生成一个或多个软失效比特流并加载到器件中以模拟实际情况,借此验证检测电路是否工作可靠稳定。
综上,莱迪思的主流FPGA产品很好地考虑到了SEU对系统可靠工作的影响,从硬件和软件上对软失效进行了针对性的处理。用户可以根据自身的应用架构来决定是直接采用SEC恢复比特文件就足以完成系统修复,或者将信息上报至更高的应用层来采取下一步措施。
需要了解更多关于SED/SEC的信息,可以前往Lattice官网(www.latticesemi.com)搜索相关关键字获得。