原创:如何考虑芯片功能安全设计
芯片功能安全设计是一个很细分的门类,一般只有在设计和应用符合功能安全要求的车规芯片时才会有相关的技术要求。以往有相关产品和设计经验的工程师都集中在传统的车规芯片五巨头(Infineon,NXP,ST,TI,Renesas)里,技术经验很少外流。在国内最早成长起来的汽车行业的功能安全工程师都集中在整车厂和 TIER1 零配件供应商,其经验偏重于整车和零配件行业,对于芯片领域了解甚少,而国内的芯片设计工程师又大都不了解功能安全知识,不具备相关的经验背景,所以目前在国内有相关经验的技术人员不算多。今天的文章结合笔者的工作经验对芯片功能安全设计的思路简单做一些探讨和总结,不涉及具体安全机制的实现,算是抛砖引玉。
1.安全机制的划分
目前业界主流的功能安全机制设计,按照其技术原理可以分为三类:冗余,诊断和监控,隔离。冗余技术最早源自于航天领域,通过对单一的功能单元增加备份,以达到增强其安全性的目的。在车载芯片的功能安全设计中,冗余也是一个重要的技术手段。把冗余技术按照空间维,时间维和信息维三个维度来划分,就可以对相关的安全机制做一个归纳。
空间维度的冗余就是通过复制功能单元来比对输出结果,以增加电路面积的代价获得安全性的提升,常见的冗余机制包括有:DCLS 双核锁步,DMR 双模冗余,TMR 三模冗余。四模冗余在车载芯片领域极为罕见,这里不进行讨论。
时间维度的冗余可以理解为增加操作时间窗口,在时间窗口内重复同样的操作,并通过反馈机制来确认操作是否正确。对于时间维度的冗余机制,26262 标准中列出的安全机制包括了 TR 重发和 RB 回读。
信息维度的冗余就是发送端在传输信息时,除了本身需要传输的信息,还增加了相应的冗余位,冗余位与信息位同时传输,接收端可以通过双方约定的机制,对信息位和冗余位进行计算并校验,从而得知接收到的信息位是否出现错误。对于信息维度的冗余机制:26262 标准中列出了 ECC 错误探测纠错码,PC 奇偶校验码,以及改进的 CheckSum 校验和(通常会使用 CRC 来实现)。
除了冗余机制以外,诊断和监控机制也大面积应用在车载芯片的功能安全设计中。通常的,对一个功能单元,要应用诊断和监控机制,考量的维度一个是功能单元内部的自测试和自诊断,另一个是从功能单元外部进行的诊断和监控,也就是对它的输入输出进行诊断和监控。
常见的自测试和自诊断机制包括了 MBIST 存储自测试,LBIST 逻辑自测试,EIT 注错测试。有些公司会把 PBIST 上电自测试单独列出。对于模拟模块则需要支持 ABIST 模拟自测试,还有我们在设计中增加的 test pattern 测试模式也可以归在这个范畴里。在 26262 标准里这部分机制被笼统的写成了“硬件支持的自检”和“通过软件实现的自检”以及“使用测试模式进行检查”。
常见的 外部诊断机制可以是 TO 超时机制,也可以是模块的状态监测和对输入输出数据的正确性进行检查等等。
除了 冗余、诊断和监控以外,隔离也是一个重要的考量维度。隔离是为了隔绝 CCF 共因失效,CMF 共模失效以及 CF 级联失效的影响,避免由于一个小的故障引发更大的故障。那么在设计的时候通常就需要考虑供电隔离,时钟隔离,干扰源的隔离等手段,此外重要的功能单元在设计中也需要考虑相应的隔离措施。锁步器件在后端设计中需要有间距的考量和旋转 90 度的要求,其本质也是一种隔离。除了硬隔离以外,权限控制也是一种隔离的形式。常见的权限控制通常是指对重要的存储单元/目标模块限制指定模块的访问权限,这种控制既可以是在空间维度也可以是在时间维度,此外还可以对权限的层级进行控制。除此之外,在大型芯片中通过虚拟化设计管控软件对硬件资源的请求是很普遍的做法,这其实也是一种隔离。
图一给出了依照上述讨论画的思维导图,可以作为比较形象化的体现。实际工作中可以依照这个图分门别类继续增加新的安全机制,但大体上不会超出这三类。当然,诊断和监控机制也可以视为一种冗余。那么是否可以把一个诊断和监控机制也划分在冗余分类下呢?个人觉得可以这样来划分,冗余本质上是对功能单元自体功能和属性的复制,而诊断和监控则是增加了新的功能来对原有功能单元进行探测,这部分增加的逻辑不属于功能单元自体功能的复制,依据这样的标准就可以比较清晰的把这两者分开。
好了,现在我们讨论完了安全机制的划分,可以开始讨论如何考虑芯片的功能安全设计了。掌握了每个具体的安全机制,就像练好了拳法套路的一招一式,但是具体到实际工作中,还需要见招拆招灵活运用,针对每个具体的设计模块考虑相匹配的安全机制。
2.从安全目标(Safety Goal)考虑功能安全设计
从安全目标来划分,可以把功能安全设计分为 Fail Operational 失效可运行和 Fail Safe 失效安全两类。这两类的架构设计重点是完全不同的。
对安全目标为失效可运行的功能安全设计,需要确保当目标功能单元发生故障时可以有备份功能单元立即接管任务。通常的,在实现时会选择双冗余带诊断的架构,更进一步的可以采用带 EGAS 三层监控的 2oo2D 架构。在失效可运行的功能安全设计中,主功能单元和备份功能单元完全相同,处于相同的工作状态,并且彼此都可以通过诊断接口探测到对方的状态。如果主功能单元发生失效,在检测到失效的第一时间就会切换到备份功能单元继续实现功能,同时发出降级警报。
对安全目标为失效安全的功能安全设计,其基本原则则是当发生故障时,系统将关闭功能单元以进入安全状态。对应的功能安全设计,基于成本的考量,往往会采用 1oo1D 架构。在架构设计时需要针对设计的功能路径进行安全分析,识别并定位对于路径上发生失效会影响安全目标的功能单元,然后基于相关功能单元进行失效模式分析,并增加相应的安全机制,来确保系统失效后可以进入安全状态。通常的,对于满足失效安全的设计,定义的安全状态包括有恢复正确状态,报错(包括中断或者错误指示),复位和下电等。对于复杂大芯片,需要综合考量芯片各个功能单元进入不同安全状态后的反应策略,合理规划各种反应策略的分布,以达到芯片在满足功能安全要求的同时尽可能的满足可用性以改善用户体验。
3.从芯片类型和功能划分(Chip Type & Function Division)考虑功能安全设计
通常的,我们可以把芯片按照 SOC 系统级芯片和 ASIC 专用芯片来划分。
在 SOC 芯片中,AMBA 协议是工程师们最熟悉最常用的总线协议,协议本身提供了一些安全机制来应对总线通信发生错误的情况,但是对于车规芯片来说这是远远不够的。幸运的是协议为用户提供了扩展的总线边带接口,利用这些边带接口定制相应的安全机制是常用的手段。工程师们在设计时需要根据目标达到的诊断覆盖率仔细计算能否满足要求。
对于 ASIC 芯片来说,这又是另外一个叙事了。由于芯片模块之间通过信号推送的机制直接传递数据,通常可以采用两种方式来增加安全机制:一种是直接在模块端口上增加相应的纠错检错信号接口,比如 ECC 纠错检错码或者奇偶校验码,这种做法需要仔细的评估完整的数据通路,并且确保安全机制能够有效覆盖到从数据发送端到接收端的完整路径,这么做在为信号提供有效保护的同时,带来的副作用就是相应的硬件电路成本增加以及信号时序的劣化,小心的选择对应安全机制的实现电路可以改善这种劣化。如果纠错检错机制不能覆盖信号传输全路径的话,就需要考虑在无法覆盖的路径上以空间冗余的方式增加相应的安全机制,通常可以是锁步或者双模冗余的形式。另外一种做法,在不能改变底层通信协议的情况下,我们可以考虑以增加时间冗余的形式来提高安全性。通过在信号传输协议的上层增加一层安全协议来实现错误重传机制,接收端在接收到数据后进行解码并校验数据的正确性,并通过返回信道把校验结果回传给发送端,如果校验结果错误,发送端会重发数据,并继续等待返回的校验结果,只有在校验结果为正确才会发送下一笔数据,若超时则报错。这种做法的缺陷是底层传输协议的误码率不变,如果是在传输信道高干扰的背景下有可能出现数据无法传输成功的情况。
另一种做法是把芯片的功能单元按照控制通路和数据通路的属性来划分。
对于控制通路,如果控制信号是通过总线传输,那么其分析类似于前述对 SOC 芯片 AMBA 协议的分析,在协议扩展的总线边带接口增加相应的安全机制。如果控制信号是专门逻辑根据当前电路状态和时序产生的固定时序,那么其安全分析类似于对 ASIC 芯片的分析,需要注意的是对应安全机制的电路时序和控制信号时序的匹配。实际工作中通过完备的仿真测试来达到这个要求。
对于芯片中的数据通路,可能会遇到各种各样的情况,包括各种低速外设通路比如 I2c,UART,SPI,CAN,FlexRay,各种高速外设通路比如 USB,MIPI,LVDS, PCIE,DisplayPort,SATA 等等。进行安全分析时需要根据相应的通信协议是否支持功能安全特性,是否支持用户扩展接口等等进行功能拆解,在通路上增加相应的安全机制。对数据通路进行功能安全设计的核心是控制残余差错率,而残余差错率一般取决于传输过程的错误率和差错控制机制的设计。影响传输错误率的因素包括有传输介质,干扰等,设计时可以通过隔离干扰源等手段来改善。差错控制机制通常包括有数据传输时携带 Sequence Number 序列号,Time Stamp 时间戳,Message Feedback 信号回传,Data Integrity Assurance 数据完整性保证,Redundancy with Cross Checking 冗余与交叉检查,Connection Authentication 连接认证等等,IEC61784-3 标准对此提供了很好的指引。另外就是对同样的机制,不同的实现算法能够达到的错误探测能力也有差异。最典型的例子就是 CRC,不同的 CRC 多项式汉明距离不同,对错误码字漏检的可能性不同,最终达到的诊断覆盖率不同。实际工作中可以综合加以考量并实施。
4.从失效模式分析(Failure Mode Analysis)考虑功能安全设计
从失效模式分析的维度来考虑功能安全设计,我们首先要把芯片做分解,分成一个个独立的功能单元。一个粗略的划分方法是分为供电模块,时钟模块,输入输出模块,主处理模块和存储模块。对于供电模块,26262 标准里给出的失效模式有欠压,过压,尖峰,漂移,振荡,启动时间错误等等。外部供电的故障会导致芯片以不可预测的方式运行,并直接导致违反安全目标。因此,与电源电压相关的故障被视为单点故障。在设计中必须实施专门的安全机制用于在运行时监测电压水平,并在发生欠压、过压或其他失效模式的情况下发出警报。在设计时我们需要仔细的选择供电模块,确保其可以支持诊断出相应的失效模式并及时报警。对于复杂的芯片设计,内部往往会有多个电源轨,需要根据安全目标确保每条电源轨都被有效监控,并在发生故障时及时报告和应对。
对于时钟模块,26262 标准里给出的失效模式有输出卡滞,浮空,频率错误,占空比错误,信号抖动,失锁,缺少脉冲,出现多余脉冲等等。业内通行的做法是用一个参考时钟去监控目标时钟,并确保两个时钟之间不存在共因失效。这个模块通常叫做时钟监控模块。
对于输入输出模块,主处理模块和存储模块,也可以按照标准中给出的参考失效模式进行分析,并进行相应的功能安全设计。
在实际工作中还有可能会遇到有的功能单元在 26262 标准中没有给出参考的失效模式。对这些非标的功能单元如何进行失效模式分析呢?这种情况下通常可以考虑两种做法,一种是根据模块端口按照功能进行分组,然后针对每个分组的端口信号进行失效模式分析。另一种是根据模块功能进行拆分,对每个子模块发生功能失效时对整个功能单元的影响进行分析,并给出相应的失效模式。比如 NPU 神经网络处理器中有大量的乘加结构的矩阵运算单元,在做功能安全分析时就可以对每个运算单元的端口信号进行分析,也可以把运算单元拆分成更小的模块进行分析。当然,需要掌握好分析的颗粒度以避免陷入无限拆分下去的困境。
5.从安全完整性等级划分(Auto Safety Inte-grity Level Division)考虑功能安全设计
在 26262 标准中给出了 ASILB 到 ASILD 不同安全完整性等级下单点故障和潜伏故障覆盖率的划分,如表一所示。
表一 单点故障和潜伏故障覆盖率列表
以 ASILB 和 ASILD 对比为例,如果一个设计需要分别按照 ASILB 和 ASILD 的要求进行设计有什么不同?
如果是按照 ASILB 的要求进行功能安全设计的话,基于成本的考量,首先应当尽量平衡安全机制实现中软件部分和硬件部分的比例,在 CPU 负载能力能够支持的前提下尽可能采用软件实现安全机制,只有对于需要通过硬件实现以优化时序的部分才采用硬件。其次,由于 ASILB 对潜伏故障的诊断覆盖率要求只有 60%,那么在设计对于安全机制的安全机制时,可以考虑设计一些外部监控机制即可满足要求。
对一个 ASILD 设计而言,首要目标是满足单点故障覆盖率 99%的严苛要求,必须首先考虑在不需要软件介入的前提下,依靠硬件设计来达到诊断覆盖率的要求。只有在硬件设计无法满足要求的情况下,再想办法通过软件手段进行补充。其次,由于潜伏故障覆盖率要求达到 90%以上,单纯通过外部监控机制已经无法满足对安全机制本身的故障进行探测和监控的要求,所以必须增加各种安全机制内部的自测试和自诊断机制,也可以考虑通过冗余的方式去提高其诊断覆盖率。
6.从成本效益平衡(Cost Effectiveness Trade-Off)考虑功能安全设计
锁步设计在大多数情况下都可以满足功能安全设计对诊断覆盖率的要求。但锁步设计也是双刃剑,在提供高诊断覆盖率的同时带来面积的倍增,这意味着芯片成本的增加。为了避免芯片由于过设计导致成本增加不可控,需要谨慎使用相应的安全机制设计。因此在功能安全机制设计达到所要求的诊断覆盖率后,还需要基于成本考量尽可能的进行优化设计以减少面积。
举个例子讲解下,芯片中通常都会使用到超时计数器。本身这个超时计数器作为一个安全机制,如果要满足潜伏故障的诊断覆盖率,我们需要对计数器这个安全机制设计相应的安全机制。如果考虑用软件安全机制可以采用程序流监控。如果是采用硬件安全机制,那么最容易想到的就是用两个超时计数器来做锁步设计或者是 DMR,但是这么做就有些“大而无当”,造成面积浪费。要进一步优化这个硬件安全机制,就可以首先对计数器做失效模式分析,通常根据标准可以把失效模式分为四类:1.指令未执行;2.指令误启动;3.指令延迟;4.指令结果错误。经过简单的电路分析可以得到大部分失效原因可以归结到计数器发生卡滞错误和由于瞬态或永久故障造成的计数器状态跳转错误,那么只要适当的设计相应的检测电路对这两类错误进行监测并在错误发生时把错误报出来,就可以达到相应的诊断覆盖率要求,并且检测电路的面积远远小于整个计数器的面积。
7.总结
最后做下总结,本文首先基于功能安全机制实现的技术原理,把目前业内通行的安全机制按照冗余,诊断和监控,隔离三类进行分类,并从安全目标,芯片类型和功能划分,失效模式分析,安全完整性等级划分,成本效益平衡等角度对芯片功能安全设计需要考虑的各方面因素做了一些探讨,可以在实际工作中作为参考。
END
作者:杨宁
文章来源:sasetech
推荐阅读
- 万字长文解读汽车信息安全框架
- 汽车网络安全 -- IDPS 如何帮助 OEM 保证车辆全生命周期的信息安全
- 驾驶行为谱系及反常驾驶行为建模
- 高效信息管理模块:支持自动驾驶安全的数据库解决方案
- SoC 安全岛应用和未来演进(附直播回放)
更多物联网安全,PSA 等技术干货请关注平台安全架构(PSA)专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入PSA 技术交流群,请备注研究方向。