Fault Injection Testing — 安全机制有效性的唯一硬证据
本质与导读
本质 SM 诊断覆盖率不能靠 FMEDA 算公式自证——分析只给上界,真值得靠故意注入故障(stuck-at / 短路 / 比特翻转 / mutation)看 SM 在 FTTI 内能否检出并正确反应来实测;所以 ISO 26262 对 ASIL D 强制 fault injection 验证 quantitative DC,这是安全机制有效性的唯一硬证据,做不到位的项目基本在 release 前被 TÜV 退回。
1. 为什么必须做 Fault Injection
1.1 分析 vs 实证的差距
ISO 26262 Part 5 Annex D 给的 generic DC(60% / 90% / 99%)是典型上界,实际项目要算 specific DC:
generic DC 99% 的 SM 在你的具体实现里可能只有 95%——SM 实现细节、timing、interaction 都会影响。只有 fault injection 能给硬数字。下面这张方法分类全景把后续各节的 HWFI 3 层、SWFI 3 法、4 类 fault model 与 campaign 5 步收拢到一张图,便于先建立整体心智模型再逐节深入:
1.2 ISO 26262 强制要求
这一节先给出“ISO 26262 强制要求”需要同时考虑的几个判断点,后面的条目按工程优先级展开。
- Part 5 Annex D:推荐用 fault injection 评估 DC
- Part 11 Annex C:数字 IC 的 DC 评估强制用 fault injection
- ASIL D Confirmation Review:审计员会问 fault injection 报告
1.3 三个不替代
Fault Injection 与其它 verification 互补,不能省:
- Code review → 发现规范 / 风格问题,但不知 SM 在故障下是否真有效
- Unit test → 验证 SM 自身代码逻辑,但不验它对 fault 的反应
- Static analysis → 找 NULL 解引用 / 死代码,与 fault 反应无关
- Fault Injection → 唯一直接证明 "SM 检出 fault 在 FTTI 内"
2. Fault Models
2.1 4 类经典 fault model
这一节先把“4 类经典 fault model”的判断维度收拢到同一视图里,后面的表格用于横向比较各选项的边界。
| Model | 物理对应 | 模拟方式 |
|---|---|---|
| Stuck-at-0 / Stuck-at-1 | 信号永远卡在 0 或 1 | 强制 wire 值不变 |
| Transition fault | 0→1 或 1→0 跳变失败 | 跳变时 hold 旧值 |
| Bridging fault | 两根线短路 | 强制两 wire 同值 |
| SEU(Single Event Upset) | 宇宙射线翻转 1 bit | 在 RAM / flip-flop 翻一 bit |
2.2 对应物理失效
这一节先给出“对应物理失效”需要同时考虑的几个判断点,后面的条目按工程优先级展开。
- Stuck-at:开路 / Latchup / 老化
- Transition:边沿速度退化 / clock skew
- Bridging:Layout 短路 / 焊点桥接
- SEU:辐射(车规器件标 0.5-2 FIT/Mb DRAM)
车规 ASIL D 通常 覆盖至少 stuck-at + SEU 两类;高级项目加 transition + bridging。
3. Hardware Fault Injection — 3 个层次
3.1 Pre-silicon(RTL 仿真级)
最早期 + 最便宜的 FI:
- 工具:Synopsys VC FI / Cadence Xcelium FI / Mentor Questa FI
- 方法:在 Verilog/VHDL 仿真里强制 wire/reg 值
- 覆盖:几百万到几亿 fault scenarios
- 优势:芯片做完前发现设计缺陷,不用回片
- 限制:仿真速度慢(实时 1ms 仿真要几小时),只看数字,不能验模拟
ASIL D 数字 IC 量产前必跑——典型 1-3 个月跑完。
3.2 Silicon Level — 实芯片
工具:
- Internal BIST(Built-In Self-Test):MBIST / LBIST 是芯片内置的 fault injection,工厂烧片时跑
- 外部测试设备:Teradyne / Advantest 测试仪 + 故障注入卡
- 聚焦离子束(FIB):物理切断 wire 模拟开路
适合:production test + post-silicon validation。
3.3 System Level — HIL / 实车
这一节先给出“System Level — HIL / 实车”需要同时考虑的几个判断点,后面的条目按工程优先级展开。
- HIL fault injector:dSPACE / Vector / NI 的 FI 模块,在 ECU 输入端注故障(短路 / 开路 / 信号偏移)
- CAN bus injector:用 Vector CANoe + FI script 注入伪造 / 漏发 / 延迟报文
- 环境注入:辐射 / 温度 / EMC 故意打到 ECU 看反应
适合:Part 4 系统集成测试 + Part 7 量产前 vehicle validation。
4. Software Fault Injection — 3 种方式
4.1 Saboteur(SBFI)
在代码里插入 fault injector 模块,运行时按 trigger 注入:
// 正常代码
result = compute_torque(input);
// 加 saboteur
result = compute_torque(input);
if (FI_active && FI_target == TORQUE) {
result = FI_inject(result, FI_pattern); // 按 pattern 改 result
}
适合:验证 SM 对特定数据 corruption 的反应。
4.2 Mutation Testing
把代码"改坏"成多个 mutants(变体),跑测试套件看是否检出:
- 改
<为<=(off-by-one) - 删除
if条件 - 把
+改-
每个 mutant 跑测试,Mutation Score = 检出的 mutants / 总 mutants。ISO 26262 ASIL D 推荐 mutation score ≥ 95%(Table 12)。
4.3 Instrumentation(代码插桩)
编译时注入 hooks,运行时按规则触发故障:
- LLVM pass / GCC plugin
- 工具:Mathworks Polyspace / Cantata / VectorCAST FI 模块
适合:自动化大规模测试(几千个 fault scenario 跑一晚上)。
5. Fault Injection Campaign 设计
5.1 Campaign 5 步
这一节先给出“Campaign 5 步”需要同时考虑的几个判断点,后面的条目按工程优先级展开。
- 定义目标 SM(哪个 SM 要验)
- 定义 fault model 集(stuck-at / SEU / 等)
- 定义注入点(每个 wire / register / variable)
- 跑 campaign(穷举或采样)
- 算 DC + 报告
5.2 穷举 vs 随机
这一节先把“穷举 vs 随机”的判断维度收拢到同一视图里,后面的表格用于横向比较各选项的边界。
| 策略 | 适用 | 代价 |
|---|---|---|
| 穷举(Exhaustive) | 小元件(几千个 fault point) | O(N) 时间,N 大不可行 |
| 导向性(Targeted) | 已知关键路径 | 工程师手工选 fault point |
| 随机采样(Random) | 大元件 + 统计置信度需求 | 按统计学采样,1000-10000 scenarios |
ASIL D MCU 的 cache 有几千万个 bit, 不可能穷举 → 用统计学采样(95% 置信度 + 5% 误差需要 ~1000 scenarios)+ 重点导向 critical path。
5.3 验证 SM 反应正确性
不只是"检出",还要看反应:
- 检测时间 ≤ DTI(Diagnostic Time Interval)
- 反应类型正确(报警 / 进入 safe state / 重启)
- 不误报(Negative test:无故障时 SM 不触发)
6. 工程实务陷阱
6.1 Fault Injection 自身的 fault
FI 工具本身可能 buggy:
- 注入点选错(没注入到真信号上)
- Trigger 提前 / 延后
- FI 工具引入额外 fault(自我污染)
工程实务:FI 工具按 ISO 26262 Part 8 Tool Qualification 评估——大概率 TCL2 或 TCL3,需要 qualification 报告。
6.2 仿真 vs 实芯片差距
Pre-silicon FI 在 RTL 上跑可能与 silicon 实测差异 1-3% DC——需要 silicon-level FI 复测关键 SM。
6.3 Fault Injection ≠ Coverage 测试
很多团队混淆:
- Code coverage(MC/DC):测试用例覆盖了多少代码 — 这是 Part 6 要求
- Fault injection coverage(DC):SM 检出多少注入故障 — 这是 Part 5/11 要求
两者不能互替,ASIL D 项目都要做。
核心要点
- Fault Injection 是验证 SM specific DC 的唯一硬证据,分析 + code review + unit test 都不替代
- 4 类 fault model:stuck-at / transition / bridging / SEU,车规 ASIL D 至少覆盖 stuck-at + SEU
- HW FI 三个层次:pre-silicon(RTL) / silicon(BIST + 测试仪)/ system(HIL + 实车)
- SW FI 三种:saboteur / mutation testing / instrumentation
- Campaign 设计:小元件穷举 / 大元件统计采样 + 导向 critical path
- DC 计算 = 检出故障 / 总注入故障,ASIL D 关键 SM 要求 ≥ 99%
- FI 工具自身要按 Part 8 Tool Qualification 评估(TCL2/3)
Cross-references
- ← 索引
- ISO 26262-5 硬件层细化:DC 计算公式
- ISO 26262-6 软件层细化:mutation testing 推荐
- ISO 26262-11 半导体细化:Annex C 数字 IC fault injection
- ISO 26262-8 支持过程细化:FI 工具 qualification
- ISO 26262-9 ASIL 分析细化:FMEA / FTA 与 FI 互补
- ISO 26262-4 系统层细化:系统集成测试用 HIL FI
- DFA / FMEDA / FTA:FMEDA 给上界,FI 给实测
- 安全机制目录:每个 SM 的 DC 都要 FI 验证
- 硬件要素评估:评估方法之一
- ASIL D 案例研究:实战 FI campaign 例
- 扭矩安全(Torque Safety ASIL D):FI 验证扭矩 SM
- ASPICE:Verification 流程