1.概述
80年代,集成电路开启了电子技术在汽车上的大量应用。经历了几十年的发展后,汽车电子系统越来越多,这些电子系统与我们的安全息息相关,如何控制因这些系统功能失效导致的安全问题,是我们面临的强大挑战。
安全机制是解决这个问题的方法之一。iso26262对安全机制的定义如下:
通过e/e功能、系统元件或者其他技术实现的,用于监测故障、控制失效以达到或维持系统的安全状态。
2. 安全机制介绍
下图是典型的嵌入式系统硬件链接图。针对不同模块的安全机制是不一样的。d.4处理器是系统的控制核心,处理器的工作状态会直接影响系统的运行结果。所以本文主要介绍处理器的安全机制(参照iso26262-5 附录d)。
2.1软件自检
目的:主要检测物理存储介质及功能单元中的故障。
通过软件的方法,尽可能早的检测处理器单元的失效以及其他子模块的失效,包括物理存储介质,或功能单元的失效。
通过数据pattern 或者数据pattern的组合,来测试物理存储(比如寄存器或存储空间)的失效,或者功能单元(比如指令译码器或edc编码解码器)的失效,或者二者。
在每一个指令周期中要运行至少一个 pattern,用于检测处理器单元的功能正确性。
测试中可以忽略一些非安全相关的区域或是指令,但是这种操作因为没有检测存储单元中所有的门电路,故障的诊断覆盖率会降低。通常来讲,可能无法覆盖所有的专用寄存器、特殊用途寄存器、核心定时器、及一些运行特例。另外,对于顺序相关(order dependencies)单元,如管线(pipeline)或时间相关的故障模式,其诊断覆盖率可能会受限。对于门电路的真实覆盖度,往往需要大量的故障仿真。该测试对于软错误模型没有覆盖。
关于rom的软件自检:
rom校验主要是为了保证程序的完整性,一般都是用校验和进行校验:
即将程序写入rom时,保留一个单元不写程序码而写入校验字,使rom每一列(即字节各位)具有奇数或偶数个1,从而使rom的校验和全为1或0。这样在每次上电时将rom中存储的所有位都相加,看校验和是否全为1或0。
关于ram的软件自检:
ram属于掉电数据全都丢失的存储器,对其的自检一般是先将ram中存储的数据保护,然后在每个ram区中写入0xaa和0x55(保证每位都写入1和0),然后读取,看读取结果是否正确。读完后将原数据恢复。
对于功能单元的软件自检:
一般是依据功能单元的功能进行故障注入,检测是否能达到预期结果。
2.2硬件自检(单通道)
目的:通过增加一个额外的专用硬件设备来支持自检功能,这种自检一般在处理单元初始化后或断电之前进行。
例如:前面所述的软件自检中检测edc编码/解码器中的功能故障,进行故障注入时,故障码可以由一个专门的逻辑单元,即逻辑bist单元(built-in self-test)生成典型的故障码。
bist把测试仪的部分功能转移到电路内部,用嵌入到电路中的测试电路提供输入测试向量和分析响应的功能,输出简单的测试结果。诊断覆盖度中等,根据被测试的对象不同,bist测试分为logic bist和memory bist。
freescale的mpc5675k就有lbist及mbist的功能。
2.3软件多元化冗余(单硬件通道)
目的:在同一个硬件单元中用两种不同的实现方法实现的软件冗余设计。
该技术主要有两种实现途径,其原理基本一致:
一种途径是算法包含一个主方案和一个冗余方案,主方案和冗余方案通常采用不同的独立算法和设计实现(比如实现a b=c,主方案用常规计算,冗余方案用二进制补码算法来实现)。针对主方案和冗余方案中的共因失效,可以考虑添加一个看门狗,以达到高诊断覆盖度。
一种途径是主方案和冗余方案采用完全一致的软件算法和设计(或者可以将主方案执行两次),将其结果进行对比。这一途径的优点是不用进行额外的软件设计,缺点是只能覆盖软件错误,达到低诊断覆盖率。如果采用执行两次主方案的方法,需要保存历史条件(如动力学状态、积分器、速度限制等)。该技术如果要达到中等诊断覆盖率,需要给定一个输入,再次执行主方案,并将输入值与期望值进行对比。
2.4独立处理单元中的软件相互比较
目的:在两个不同类型的处理单元中,采用独立的算法设计、代码和编译器来实现同一种功能。然后交换处理的中间结果和测试数据等,并在各处理单元中进行对比,以检测处理单元中的不同,诊断覆盖度高。
一般情况下可以采用双核处理器中的两个独立核作为独立的处理单元,但是要考虑双核共享芯片和封装导致的共因失效。
2.5硬件冗余
目的:逐步将两个处理器单元锁步运行时产生的结果进行对比,以检测处理单元的失效。诊断覆盖度高。
双核锁步技术
双核锁步技术是指利用同一芯片中的两个处理单元(双核处理器中的两个核)平行执行相同的操作,将每一步的结果分别进行对比,任何对比结果的不匹配都会切换到一个错误状态(一般为复位)。
非对称冗余技术
所谓的非对称冗余是两个方案有一定的相似度。在本标准中,非对称冗余技术采用一个专用处理单元作为冗余单元,冗余处理单元可能比主处理单元小,但冗余处理单元与重叠部分的主处理单元完全相同,属于主处理单元部分单元的平行方案。二者在锁步运行中逐步对比每一步生成的结果来测试处理单元中的失效。
编码处理技术
利用专用的失效识别或失效校正电路来检测非常小的处理器中的故障。这些小处理器可能适合做alu(数字逻辑单元)等处理器子单元。
2.6配置寄存器测试
目的:读取配置寄存器设置,用掩码将寄存器中用到的位滤出,将其与预期设置值进行对比,如果设置不匹配,那么重新载入寄存器设定值,再进行对比,多次检测如果仍有错,那么报告故障状态。诊断覆盖度高。
2.7堆栈上下限溢出测试
目的:在栈顶或栈底写入预先设定的值,定时检测这些值,如果发生变化,就表明堆栈已经溢出。诊断覆盖度高。
2.8集成的硬件一致性监测
目的:大多数的处理器都会具备一种机制,在检测到错误发生时(比如除以0,比如不可用的操作码),能够除外一个硬件异常处理机制。此时利用中断处理机制限制这些故障状态,减少故障对系统的影响。一般情况下,该技术用于检测系统故障,也能检测一些特殊种类的随机失效。 然而对于编码错误的覆盖度较低。
比如can控制器发生bus off时会触发bus off中断,我们应在这个中断里面添加代码,让控制器恢复。
3、总结
通过以上的介绍可以看出,为了实现整个系统的功能安全,针对不同模块需要采用各种不同的安全机制,这些安全机制来监测系统发生的失效,通过一系列的后续处理来保证系统是安全的;而不同的安全机制,实现的诊断覆盖度是不一样的,实现的成本也是不一样的,所以安全机制的选择依赖于电子系统的安全等级。