(1)锁步核
锁步核是针对芯片的一种常见的用于实现高诊断覆盖率的安全机制。它的实现方法是:
两个核运行同样的程序,将结果输入一个比较逻辑,周期性地比较两个核的输出结果是否相同。如果相同,则继续运行;否则,可以采取满足安全要求的重启或其他故障恢复机制。如果在一段时间后错误无法恢复,则需要在指定的安全时间内进入故障安全状态。
双核锁步是实现锁步核的一种方法。如图5-10所示, 一个芯片中包含两个相同的处理器。一个作为主处理器,一个作为从处理器。它们执行相同的代码并严格同步,主处理器可以访问系统内存并输出指令,而从处理器不断执行主处理器获取的指令。从处理器产生的输出(包括地址位和数据位)发送到比较逻辑模块,由主处理器和从处理器总线接口的比较器组成,检查它们之间的数据、地址和控制线的一致性。 一旦输出不匹配,通常会标记故障并执行重启。需要注意的是,虽然我们可以检测到两个总线的不一致,从而发现其中一个处理器存在故障,但这时候并不能确定是哪一个处理器存在故障。这种架构的好处是使得CPU自检独立于应用软件,不需要执行专门的指令集自检,实际运行的软件指令在每个时钟周期都进行比较,只需要测试软件用到的CPU 资源。然而,这种架构不会对内存和总线进行检测,因此需要增加单独的检测方法,以避免两个处理器的共因故障。
图 5-10 典型双核锁步架构
在实际应用中,延迟锁步是一种实现方法。如图5-11所示,与双核锁步不同的是,在芯片设计过程中,其中一路核的输入信号路径上设置了N 个时钟周期的延迟,而在另一路核的输出信号路径上也延迟N 个时钟周期,然后在统一的比较逻辑模块上检查它们的数据一致性。 如果发现不一致,通常会标记故障或者重启。除了继承双核锁步的好处外,这种方法还可以大大降低两个CPU 同时发生共因故障(如噪声脉冲)的概率。当然,从实现难度上来说,延迟锁步比双核锁步更加困难。
(2) 基于软件的指令集测试
STL(Software Test Library)是功能安全相关软件的测试库,通常包含一组测试函数。每个函数针对一个或多个指令集进行测试,并返回测试结果。
图 5-11 延迟锁步架构
STL 可以实现对永久性故障的诊断覆盖,同时最大限度地减小对系统可用性的影响。它的好处一般体现在以下几方面。
可通过选择不同的测试集来实现对逻辑模块的诊断,以满足不同的诊断覆盖率要求。
可灵活选择测试集及运行时间间隔,以满足不同的应用场景需求。
来源:汽车电子与软件
作者:SASETECH社区