3. 故障注入方法:软件故障注入(SFI)、硬件故障注入(HFI)、仿真故障注入

聊到故障注入,很多刚入行的朋友会问我:「到底该选哪种方法?」

我的回答通常是——看你的测试目标是什么。三种方法各有各的脾气,没有银弹。今天我就把这三种方法掰开揉碎了讲清楚。

3.1 软件故障注入(SFI)

软件故障注入,说白了就是通过修改软件状态来模拟硬件故障。不需要动硬件,成本低,跑得快。

常见的SFI手段:

  • 寄存器位翻转:直接修改CPU寄存器或内存中的值
  • 指令跳转:跳过某条指令,模拟程序跑飞
  • 数据污染:往关键变量里塞错误数据
  • 中断干扰:在错误时机触发中断

我个人习惯:在项目早期先用SFI做快速验证。比如我在做某款车规级MCU时,用SFI在一天内跑了上千个故障场景,效率非常高。

SFI的优缺点:

优点 缺点
无需额外硬件,成本低 无法模拟物理层面的故障(如短路)
可重复性好,自动化程度高 可能被操作系统或编译器优化掉
适合大规模回归测试 对时序敏感故障覆盖不足

我曾经踩过一个坑:用SFI翻转了一个关键标志位,结果编译器优化后那个变量根本没存在内存里,翻转操作完全无效。所以做SFI前,一定要确认变量没有被优化掉。

3.2 硬件故障注入(HFI)

硬件故障注入,就是真刀真枪地往芯片上搞破坏。你想想看,芯片在真实环境中可能遇到电磁干扰、电源波动、温度冲击,这些SFI模拟不了。

常见的HFI手段:

  • 电磁注入(EMI):用电磁枪对准芯片特定区域打干扰
  • 激光注入:用激光照射芯片内部,改变晶体管状态
  • 电源毛刺:在供电线上叠加短时高电压或低电压
  • 温度冲击:快速加热或冷却芯片

我记得有一次做ISO 26262认证,客户要求必须做HFI验证。我们用了电磁注入,在芯片的地址总线上打干扰,结果发现安全机制在特定频率下会失效。嗯,这个bug要是流片后才被发现,后果不堪设想。

HFI的优缺点:

优点 缺点
最接近真实物理故障 设备昂贵,一套电磁注入系统几十万起步
能覆盖时序和物理效应 操作复杂,需要专业工程师
认证机构认可度高 可重复性差,受环境因素影响大

我建议:HFI不要一开始就上。先用SFI把逻辑层面的问题扫一遍,再用HFI做关键路径的验证。这样既省钱又高效。

3.3 仿真故障注入

仿真故障注入,是在芯片的仿真模型上做文章。说白了,就是在RTL代码或门级网表里「动手脚」。

常见的仿真注入方式:

  • force命令:在仿真器中强制改变信号值
  • 故障模型植入:在RTL代码中插入故障逻辑
  • 时序反标:在门级仿真中注入延迟故障
  • 随机注入:用脚本随机翻转内部节点

举个例子,在Verilog仿真中,你可以这样注入一个寄存器故障:

// 正常逻辑
always @(posedge clk) begin
  if (rst) 
    safety_counter <= 8'h00;
  else
    safety_counter <= safety_counter + 1;
end

// 故障注入:在第100个时钟周期强制翻转
initial begin
  #1000;  // 等待100个时钟周期
  force tb.u_dut.safety_counter[3] = ~tb.u_dut.safety_counter[3];
  #100;
  release tb.u_dut.safety_counter[3];
end

仿真注入的好处是可控性极强。你可以精确到纳秒级去触发故障,还能观察内部所有信号的变化。我在做某款ADAS芯片时,用仿真注入发现了安全机制在流水线冲突时的漏洞——这个场景在真实芯片上几乎不可能复现。

仿真注入的优缺点:

优点 缺点
可控性极强,精度高 仿真速度慢,大规模芯片跑不动
可观测所有内部信号 需要完整的仿真模型
适合早期验证 无法覆盖物理效应

3.4 三种方法的对比与选择

这三种方法不是互斥的,而是互补的。我一般建议按这个顺序来:

  1. 仿真注入:RTL阶段做,快速验证安全机制的逻辑正确性
  2. 软件注入:FPGA或芯片回来后做,跑大规模回归测试
  3. 硬件注入:流片后做,用于认证和最终验证

下面这张图能帮你理清思路:

故障注入方法选择流程 仿真故障注入 软件故障注入 硬件故障注入 时间→ RTL阶段 FPGA/芯片阶段 认证阶段 • 精度高 • 可观测性强 • 速度慢 • 适合早期验证 • 成本低 • 可重复性好 • 自动化程度高 • 适合大规模测试 • 最真实 • 认证认可度高 • 设备昂贵 • 操作复杂

核心建议:三种方法组合使用,才能达到最高的故障覆盖率。我个人习惯是「仿真打基础,软件跑批量,硬件做验证」。

避坑指南:我曾经见过一个团队,只做SFI就宣称覆盖了90%的故障。结果认证时被审计师问住了——「你怎么证明你的软件注入能模拟真实的物理故障?」所以,该上HFI的时候千万别省。


公众号:蓝海资料掘金营,微信deep3321