目前,汽车中使用的复杂电子系统越来越多,而汽车系统的任何故障都会置乘客于险境,这就要求设计出具有“高度可靠性”的系统。同时,由于FPGA能够集成和实现复杂的功能,因而系统设计人员往往倾向于在这些系统中采用 FPGA。不过,将FPGA用于汽车系统时需要关注两个主要问题:确保用于FPGA初始化的配置代码正确无误;防止器件工作时SRAM的内容遭到损坏。只有这些问题得到彻底解决,FPGA才能成为高度可靠汽车系统的组成部分。幸运的是,目前通过AEC-Q100认证的FPGA已加入先进的特性,能够有效解决上述问题。本文介绍的几个方案可用于解决保护初始化配置和防止潜在的SRAM内容损坏的问题。
保护FPGA的配置
随着系统上电,基于SRAM的FPGA将从外部源加载其配置。引导源可以是存储器件,如串行EEPROM或Flash ,也可以是智能器件,如微控制器。针对初始化位流,所有的FPGA都具有某种类型的循环冗余校验(CRC),在启动结束时进行测试,检验传送是否完整。如果在位流中检测到一个差错,FPGA将无法初始化。这可以防止系统产生错误的(也可能是危险的)操作。大多数的FPGA将通过对一个外部引脚置位,来告知系统控制器初始化失败,请求另一个初始化序列,以期取得配置成功。在遇到以下几种情况时,会发生初始化位流的损坏情况:
* 引导存储器的硬件故障
* 存储器内容保存的问题
* 蓄意篡改
* 存储器内容被擦除
* 电气噪声
利用FPGA设计高可靠性的汽车系统时,为了正确处理这些情况,必须遵循以下四个基本步骤:
第一步是使用具有片上闪存的非易失性SRAM FPGA。这改变了从外部存储器引导配置载入FPGA内部的方式。采用将引导源移入同一块芯片的方法消除了许多常见的初始化失败模式。这种类型的集成设计还提升了初始化速度,可在即时启动系统中使用这种FPGA。
第二步是添加一个可靠的外部自行引导器件(图1) 。FPGA的一个主要特点是能够现场重复编程。对汽车系统而言,这一特性允许下载新的程序,用于授权的现场更新,修复设计错误或添加额外的功能。不过,在传输和对存储器编程期间,数据流可能被损坏,而且损坏的数据流会阻止正确的FPGA初始化。为了应对更新过程中的损坏,在外部存储器件中已复制了初始化代码,称为“golden”的厂家备份。即便有任何问题,存储在内部存储器的配置代码都可以使该系统得到恢复。通过添加第二个引导器件,就能够保证厂家备份,或至少可以具有“间接恢复”系统的功能。
图1 FPGA双引导系统
第三步是保护存储在外部存储器件中的位流备份,采用位流加密来保护引导配置代码(图2)。许多车用FPGA系列支持128位AES位流加密,以防止逆向工程和未经授权地对设计进行更改。在外部引导器件中存储着加密的配置代码,可以在初始化时译码,然后再移入SRAM单元。同样的加密机制也可以用来将一个新的配置代码载入内部闪存。
图2 外部引导的AEC译码或Flash编程位流
第四个也是最后一个步骤是“锁定”FPGA,以防止未经许可进入存储配置。用非易失性FPGA内部的可编程寄存器控制对内部配置存储器的访问。可能的组合情况如下:1)解锁。 2)可解密锁定-通过编程接口提供的128位密钥能够使器件解锁。3)永久锁定-器件被永久锁定。
为了进一步加强器件的安全性,可用一次性可编程(OTP)模式。一旦器件设置成这个模式,就不可能擦除闪存的内容或对器件再次编程。
选择车用级的通过AEC - Q100认证的非易失性FPGA时,审查制造商的非易失闪存的耐久性和数据保存指标是很重要的,这将确保车辆运行时和处于贮藏温度时FPGA都能正确保存其存储器内容。例如,LatticeXP2是唯一非易失性的通过AEC - Q100认证的SRAM /Flash FPGA,它能满足所有这些系统的要求。LatticeXP2的片上闪存允许大范围地对整个器件进行存储器测试,确保即使器件在最高温度下连续工作,至少10年内存储器的内容都不会丢失。
SRAM软错误损坏检测(SED)
来自宇宙射线的中子和封装材料中的带电α粒子的辐射会造成软错误,它会改变存储单元的存储内容。这种现象首先成为DRAM中的一个问题,要求能对高可靠性应用中的大容量存储系统进行错误检测和纠错。由于器件的尺寸不断缩小,对某些系统而言,SRAM中的软错误概率已相当大。
用于汽车应用的高性能FPGA将逻辑配置数据存储在SRAM单元。由于FPGA中SRAM单元数量和密度的增加,软错误改变系统可编程逻辑行为的概率也随之增加。设计者已经采取了各种办法来解决该问题,其中大部分涉及用户用于设计的知识产权(IP)核。虽然这种方法提供了一个解决方案,但它也占用了宝贵的可编程资源,并可能会影响性能。然而,这些缺陷是可以避免的。例如,LatticeXP2 FPGA内有用硬件实现的软错误检测器,它不会影响系统性能或器件的热耗散。
在这些非易失性FPGA中的SED硬件有一个访问FPGA SRAM配置存储器的接口,还有SED控制器电路和一个存储当前位流CRC的32位寄存器(图3)。SED功能需要使用几个I/O引脚,要占用4个专用的输入引脚和4个专用的输出引脚。这些引脚用于使能和启动SED检测,还能指明SED的工作状态。
图3、LatticeXP2 FPGA具有SRAM软错误监测功能
SED工作期间,控制电路从FPGA的SRAM配置存储器读取串行数据流数据,并计算CRC。然后,计算出的CRC与预期的存储在32位寄存器中的CRC进行比较。如果这两个CRC值不匹配,说明配置存储器中有差错,并设置一个外部信号为高电平,指明有差错。对应出错信号,用户可以有几种选择:忽略这个差错;使用外部处理器记录这个差错;或从原来的引导器件重新载入SRAM配置。
LatticeXP2 FPGA能够满足所有这些系统的要求。其片上闪存允许统一的系统测试,保证器件即使在最高温度下连续工作,最少10年不会引起存储内容的丢失或产生系统故障。此外,双引导功能和硬件实现的SED检测功能对SRAM内容损坏提供了安全保证,不会影响器件性能或用户逻辑的运行。
应用上述四种配置保护技术的FPGA设计具有高度可靠的启动和初始化功能,可以保护更新,阻止下载、删除或修改初始化配置的企图。此外,整合SED管理逻辑的设计还增加了保护措施,防止由带电粒子导致的改变运行配置的情况。将启动和SED保护进行整合的方法使汽车系统设计人员能够构建完整可靠的FPGA设计,同时不必担心配置被蓄意篡改或环境对器件造成的损坏。