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分解主要解决三个痛点:
- 芯片选型受限——很多MCU/SoC最高只支持ASIL B或ASIL C
- 开发成本过高——ASIL D的开发流程、验证工作量是ASIL B的3-5倍
- 团队能力不足——不是每个团队都有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的典型架构:
分解的工程约束
数学上成立,不代表工程上就能直接用。我总结了几条硬约束:
- 独立性——两条路径不能共享关键资源(电源、时钟、通信总线)
- 多样性——最好用不同算法、不同编译器、不同芯片厂商
- 故障检测——比较器本身也要做安全设计,不能成为单点故障
- 时序一致性——两条路径的输出必须在规定时间窗口内完成比较
小技巧:做分解设计时,我习惯先画一个「独立性矩阵」,把两条路径共享的所有资源列出来。每发现一个共享点,就标记为「潜在共因失效」,然后逐个解决。这个方法帮我躲过好几次审核的雷。
分解在AUTOSAR中的位置
在AUTOSAR架构里,ASIL分解通常发生在两个层面:
- SW-C层面——把高ASIL的软件组件拆成多个低ASIL的SW-C,部署在不同的ECU或分区上
- BSW层面——基础软件层通过冗余通信、冗余RTE来实现分解
嗯,这部分后面章节会详细展开。今天先把分解的底子打牢。
最后说一句——ASIL分解不是万能的。如果你的功能本身就不适合冗余架构(比如单点传感器无法冗余),那硬拆只会增加复杂度。我见过最惨的项目,分解后代码量翻了三倍,故障覆盖率反而下降了。所以,分解前先想清楚:你真的需要分解吗?