Fault Injection Testing — 安全机制有效性的唯一硬证据

功能安全L2别名 fault injection testing · FIT 故障注入 · HW fault injection · SW fault injection · 故障注入仿真 · mutation testing · SBFI saboteur · 安全机制有效性验证

本质与导读

本质 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 步收拢到一张图,便于先建立整体心智模型再逐节深入:

故障注入方法分类 — HWFI 3 层(pre-silicon/silicon/system)与 SWFI 3 法(saboteur/mutation/instrumentation),4 类 fault model 与 campaign 5 步,核心是实证 SM 反应而非覆盖率

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 fault0→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 步”需要同时考虑的几个判断点,后面的条目按工程优先级展开。

  1. 定义目标 SM(哪个 SM 要验)
  2. 定义 fault model 集(stuck-at / SEU / 等)
  3. 定义注入点(每个 wire / register / variable)
  4. 跑 campaign(穷举或采样)
  5. 算 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