1. 课程导入

各位工程师朋友,咱们今天聊聊ASIL分解。说实话,这个概念刚入行时我也觉得挺绕的。但干过几个项目后,你会发现它其实是功能安全设计里最实用的工具之一。

什么是ASIL分解

ASIL分解,说白了就是把一个高安全等级的需求,拆成两个或多个低安全等级的需求。举个例子——

你有一个ASIL D的功能要求。按照ISO 26262,你可以把它分解成:

  • 一个ASIL C的路径
  • 一个ASIL B的路径

两条路径独立实现,只要它们互相冗余、互相校验,整体就能达到ASIL D的安全目标。

核心要点:ASIL分解不是降低安全目标,而是通过冗余架构来分摊安全要求。最终的系统级安全完整性,仍然满足原始ASIL等级。

为什么需要ASIL分解

我在2018年做过一个ADAS项目,要求ASIL D。当时供应商一看,直接说「这芯片不支持ASIL D开发,得换平台」。换平台意味着成本翻倍、周期延长。

后来我们用ASIL分解,把功能拆成两条ASIL C的路径,用两颗普通MCU实现冗余。项目顺利过审,成本只增加了30%。

实际工程中,ASIL分解主要解决三个痛点:

  1. 芯片选型受限——很多MCU/SoC最高只支持ASIL B或ASIL C
  2. 开发成本过高——ASIL D的开发流程、验证工作量是ASIL B的3-5倍
  3. 团队能力不足——不是每个团队都有ASIL D的开发经验

我的经验:做ASIL分解前,先问自己三个问题——功能能独立实现吗?两条路径有足够的独立性吗?故障检测覆盖率够吗?任何一个答「否」,就别硬拆。

ASIL分解的数学原理

ISO 26262-9第5章给出了明确的分解规则。我整理了一张表,大家直接看:

原始ASIL 分解后组合(路径1 + 路径2)
ASIL D ASIL C(D) + ASIL B(D)
ASIL D ASIL D(D) + ASIL A(D)
ASIL D ASIL D(D) + QM(D)
ASIL C ASIL B(C) + ASIL B(C)
ASIL C ASIL C(C) + ASIL A(C)
ASIL B ASIL B(B) + ASIL A(B)
ASIL B ASIL B(B) + QM(B)
ASIL A ASIL A(A) + QM(A)

注意看括号里的标注——ASIL C(D) 表示这条路径按ASIL C开发,但它的安全目标是支撑ASIL D。这个标注在安全文档里必须写清楚,我见过不少审核员专门查这个。

分解的数学逻辑

为什么会这样组合?其实背后是概率论的思想。

ISO 26262的安全完整性等级,本质上是残余故障概率的约束:

  • ASIL D:< 10-8 故障/小时
  • ASIL C:< 10-7 故障/小时
  • ASIL B:< 10-6 故障/小时
  • ASIL A:< 10-5 故障/小时

两条独立路径同时失效的概率,是各自失效概率的乘积。所以:

10-7 (ASIL C) × 10-6 (ASIL B) = 10-13

这远低于ASIL D的10-8要求。当然,实际工程中还要考虑共因失效,不能光算数学账。

避坑指南:我曾经遇到一个团队,把ASIL D分解成两个ASIL B,觉得数学上10-12绰绰有余。结果FMEA一分析,两条路径共用了一个电源芯片,共因失效概率直接拉高到10-7。记住——独立性是分解的前提,不是分解的结果。

分解的架构示意

下面这张图展示了ASIL D分解为ASIL C + ASIL B的典型架构:

ASIL D 分解为 ASIL C + ASIL B 架构 ASIL D 安全目标 分解 路径1:ASIL C(D) 路径2:ASIL B(D) 传感器A + MCU_A + 执行器A 传感器B + MCU_B + 执行器B 比较器 / 表决器 安全输出(ASIL D) 两条路径独立开发、独立硬件、独立软件,仅通过比较器交互

分解的工程约束

数学上成立,不代表工程上就能直接用。我总结了几条硬约束:

  • 独立性——两条路径不能共享关键资源(电源、时钟、通信总线)
  • 多样性——最好用不同算法、不同编译器、不同芯片厂商
  • 故障检测——比较器本身也要做安全设计,不能成为单点故障
  • 时序一致性——两条路径的输出必须在规定时间窗口内完成比较

小技巧:做分解设计时,我习惯先画一个「独立性矩阵」,把两条路径共享的所有资源列出来。每发现一个共享点,就标记为「潜在共因失效」,然后逐个解决。这个方法帮我躲过好几次审核的雷。

分解在AUTOSAR中的位置

在AUTOSAR架构里,ASIL分解通常发生在两个层面:

  1. SW-C层面——把高ASIL的软件组件拆成多个低ASIL的SW-C,部署在不同的ECU或分区上
  2. BSW层面——基础软件层通过冗余通信、冗余RTE来实现分解

嗯,这部分后面章节会详细展开。今天先把分解的底子打牢。

最后说一句——ASIL分解不是万能的。如果你的功能本身就不适合冗余架构(比如单点传感器无法冗余),那硬拆只会增加复杂度。我见过最惨的项目,分解后代码量翻了三倍,故障覆盖率反而下降了。所以,分解前先想清楚:你真的需要分解吗?