4. ASIL裁剪方法论:动机、前提与三种方式

ASIL裁剪这个话题,说实话,在功能安全圈子里争议不小。有人觉得裁剪就是“降级”,是偷工减料。我个人不这么看。裁剪做得好,恰恰是工程师功力的体现。你想想看,如果所有安全功能都往最高等级堆,成本扛不住,系统复杂度也失控。所以,裁剪不是目的,是手段。

今天我们就来聊聊,什么时候该剪,怎么剪,剪完了怎么证明自己没违规。

4.1 裁剪的动机与前提

先说说动机。为什么要裁剪?我归纳了三个核心驱动力:

  • 成本控制:ASIL D的开发成本是ASIL B的3-5倍。芯片面积、软件复杂度、测试验证,每一项都是真金白银。
  • 技术可行性:有些安全机制,在现有架构下根本实现不了ASIL D的独立性要求。比如共享内存的访问,你硬要上ASIL D,可能得加双核锁步,功耗和性能都扛不住。
  • 避免过度设计:不是所有功能都需要最高等级。一个非关键的控制信号,你给它上ASIL D的冗余监控,说白了就是浪费。

但裁剪不是你想剪就能剪的。前提条件必须满足:

裁剪的三大前提

  1. 安全目标明确:你必须先完成HARA,确认每个危害的安全目标。没有目标,裁剪就是无的放矢。
  2. 功能架构已定义:你得知道哪个功能模块承担什么安全责任。架构没定,你剪什么?
  3. 独立性可论证:裁剪后的子要素之间,必须证明没有级联失效。这是合规性的底线。

我记得有一次,一个团队上来就想把ASIL D剪成ASIL B,理由是“我们软件写得好”。我问他:“你怎么证明两个子功能不会互相干扰?”他答不上来。嗯,这就是典型的动机对、前提错。

4.2 ASIL裁剪的三种方式

ISO 26262给了我们三种裁剪手段。我按使用频率排个序:分解用得最多,等级降低次之,冗余用得最少但最保险。

4.2.1 ASIL分解

ASIL分解,说白了就是把一个高等级的安全需求,拆成两个或多个低等级的子需求。核心逻辑是:冗余+独立性。

举个例子。一个ASIL D的安全目标,你可以分解成:

  • 路径A:ASIL C
  • 路径B:ASIL A

两条路径独立实现,只要任意一条能正确响应,安全目标就满足。这样,每条路径的开发成本就降下来了。

分解的规则很严格,我列个表:

原始ASIL 分解方案1 分解方案2 分解方案3
ASIL D ASIL C(D) + ASIL A(D) ASIL B(D) + ASIL B(D) ASIL D(D) + ASIL A(D) + ASIL A(D)
ASIL C ASIL B(C) + ASIL A(C) ASIL A(C) + ASIL A(C) + ASIL A(C) —
ASIL B ASIL A(B) + ASIL A(B) — —

注意括号里的标注。分解后的子ASIL后面要带原始等级,比如ASIL C(D),意思是“从ASIL D分解出来的ASIL C”。这是审计师必查的点。

我的经验:分解时,两条路径的独立性是最大难点。我曾经在一个项目中,两条路径共用了一个电源管理芯片。结果FMEA一分析,电源失效会导致两条路径同时失效。独立性不成立,分解无效。最后只能加独立的电源监控。

4.2.2 ASIL等级降低

等级降低,就是直接降低某个安全目标的ASIL等级。比如从ASIL D降到ASIL C。这听起来简单,但前提很苛刻。

降低的依据通常是:

  • 外部安全机制:系统外部(比如整车层面)已经有一个更高等级的安全机制覆盖了同一个危害。例如,EPS的扭矩监控降到ASIL B,因为整车有ASIL D的驾驶员监控系统兜底。
  • 合理可预见的误用:如果某个危害只有在驾驶员严重误操作时才会发生,且误用概率极低,可以适当降低等级。但这个论证很难做,我建议慎用。

注意:等级降低不是“我觉得风险小就能降”。你必须提供量化论证。比如,外部安全机制的覆盖率要达到多少,残余风险要低于多少。空口无凭,审计师不会认的。

我个人习惯,等级降低只用在非关键安全目标上。对于ASIL D的目标,我几乎不用降低,只用分解。为什么?因为降低意味着你承认“这个功能本身不够安全”,但你又没有冗余来补偿。这在心理上就很难说服审计师。

4.2.3 ASIL冗余

ASIL冗余,和分解有点像,但逻辑不同。冗余是指:两个或多个相同ASIL等级的子要素,共同实现同一个安全目标。

举个例子:

  • 两个ASIL B的路径,冗余实现一个ASIL B的安全目标。
  • 三个ASIL A的路径,冗余实现一个ASIL A的安全目标。

冗余的好处是:即使一条路径失效,另一条还能工作。但代价也大——面积、功耗、成本都翻倍。

什么时候用冗余?我遇到过一种场景:某个安全目标必须达到ASIL D,但现有技术平台(比如某个MCU)只能支持ASIL B的软件库。怎么办?用两个ASIL B的核做冗余,整体达到ASIL D。这就是典型的“用数量换等级”。

4.3 裁剪的合规性要求

裁剪不是你想怎么剪就怎么剪。ISO 26262对裁剪有明确的合规性要求。我总结成三条红线:

  1. 安全案例必须更新:裁剪后的安全论证,必须重新写入安全案例。你不能拿着原来的安全案例去交差。
  2. 独立性必须证明:无论是分解还是冗余,子要素之间的独立性必须有证据。常见的证据包括:物理隔离、时间隔离、逻辑隔离、失效模式分析。
  3. 裁剪不能降低整体安全完整性:这是底线。裁剪后的系统,残余风险不能高于裁剪前。你剪了,但安全目标还得满足。

合规性检查清单

  • ☐ 裁剪方案是否在安全计划中明确?
  • ☐ 每个裁剪后的子ASIL是否标注了原始等级?
  • ☐ 独立性论证是否通过评审?
  • ☐ 安全案例是否更新了裁剪部分?
  • ☐ 裁剪后的残余风险是否可接受?

我曾经见过一个项目,裁剪方案做得漂亮,但安全案例里只字未提。审计师一来,直接开了严重不符合项。嗯,这种亏,吃一次就够了。

4.4 知识结构图:ASIL裁剪全景

下面这张图,我把裁剪的动机、前提、三种方式以及合规性要求串在了一起。你可以把它当作本章的知识地图。

ASIL裁剪方法论全景图 ASIL裁剪方法论全景图 ASIL裁剪 动机:成本·可行性·避免过度 前提:目标·架构·独立性 合规:安全案例·证据·残余风险 ASIL分解 D→C+A, B+B, D+A+A ASIL等级降低 D→C, 需外部机制论证 ASIL冗余 B+B→D, A+A+A→B 独立性证明 安全案例更新 残余风险可接受 裁剪的核心逻辑:用独立性换取等级降低,用证据换取合规性 没有独立性的裁剪,就是裸奔

这张图里,从上到下是裁剪的决策流:先确认动机和前提,再选择裁剪方式,最后用合规性要求收尾。你每次做裁剪决策时,都可以拿这张图过一遍,看看自己漏了哪一步。

4.5 避坑指南

最后,分享几个我踩过的坑:

  • 分解后忘了标注原始等级:审计师一看ASIL C,以为你直接降级了。解释半天,浪费时间。我的习惯是,在需求管理工具里直接加一个字段“Source ASIL”。
  • 独立性论证流于形式:很多人画个框图,写一句“物理隔离”,就以为完事了。实际上,你得分析共因失效和级联失效。比如,两条路径的软件是否用了同一个编译器?硬件是否共用了同一个晶振?这些细节,审计师会刨根问底。
  • 等级降低后忘了更新安全机制:等级降了,安全机制的ASIL能力也得跟着降。你原来ASIL D的监控机制,降成ASIL C后,监控本身的诊断覆盖率可能就不够了。这个连锁反应,很多人会忽略。

我曾经犯过的错:在一个EPS项目中,我把扭矩监控从ASIL D分解成ASIL C + ASIL A。两条路径的独立性论证做了三个月,自认为天衣无缝。结果审计师问了一句:“你们两条路径的软件版本号为什么是一样的?”我当场愣住了。原来,两条路径的代码是从同一个基线拉出来的,只是配置不同。这算不算独立性?审计师认为不算。最后,我们不得不重写其中一条路径的底层驱动。嗯,这个教训,值一套开发板的钱。