目前,汽车中使用的复杂电子系统越来越多,而汽车系统的任何故障都会置乘客于险境,这就要求设计出具有“高度可靠性”的系统。同时,由于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年内存储器的内容都不会丢失。