解释故障模式与影响分析(FMEA)在验证中的应用

解读

面试官问“FMEA在验证中的应用”,并不是想听教科书定义,而是考察三件事:

  1. 你是否把验证当成“风险管控”而非“跑 regressions”;
  2. 能否把 FMEA 的“自顶向下”思维反向落地到“自底向上”的验证环境;
  3. 是否具备与国内芯片厂(Fabless+Foundry)实际流程对接的经验,例如如何在项目节点评审(PR1/PR2/PR3)里把 FMEA 结果转成可量化的验证指标,并在 sign-off 报告里被甲方/车规客户认可。

一句话:让面试官听到“我知道 FMEA 不是质量部的表格,而是验证计划的第一层输入”。

知识点

  1. FMEA 核心三要素:故障模式(Failure Mode)、影响(Effect)、严重度/发生度/探测度(S/O/D);在验证语境下,故障模式=RTL bug 类型,影响=最终系统级失效,探测度=验证手段能否在流片前发现。
  2. 国内主流做法:在《验证计划评审表》里单列“FMEA 映射”栏,与功能点列表(Feature List)双向追踪;每行功能点必须反标一个最高严重度的故障模式,否则评审不签字。
  3. 车规/工规项目需符合 GB/T 34590(功能安全)(即中国版 ISO 26262),要求 S≥7 的故障模式必须给出“验证覆盖率≥99% + 形式化证明 + 故障注入”三板斧,否则不能流片。
  4. 验证工程师常把 FMEA 输出转成 SystemVerilog covergroup 的“交叉覆盖仓”,用自动化脚本把 S≥8 的故障模式直接生成 coverpoint,实现“风险驱动覆盖率”。
  5. 国内大厂的 FMEA 工具链:Excel 模板+DOORS 需求库+自研 Python 脚本,一键生成 UVM test case 骨架,并回注结果到飞书多维表格,方便项目总监每日站会过风险 Burn-down 曲线。

答案

“我在上一个 16nm 车载 SerDes 项目中,把 FMEA 真正做到了验证闭环,分四步:

第一步,系统架构师给出 42 条顶层故障模式,其中 S=9 的是‘高速通道单 bit 持久 stuck-at-1 导致摄像头黑屏’。我把这条映射到 RTL 的 8b10b 解码模块,定位到‘comma 检测状态机死锁’子功能,严重度保持 9。

第二步,在验证计划里把该故障模式拆成三条可量化目标: a) 状态机死锁覆盖率 100%,用 SVA 写了一条 deadlock assertion,绑定 cover sequence; b) 单 bit 持久故障注入必须通过 1×10^9 周期无恢复失败,我调用 UVM 的 uvm_hdl_force 在物理层接口强制 stuck-at,再用 Jenkins nightly 跑 200 轮 Monte-Carlo; c) 最终系统级影响在 FPGA 原型上复现,用摄像头真实回环,黑屏时间>40 ms 即判失败。

第三步,把探测度从初始的 6 降到 2:通过形式化工具(国内合见 FPGA 版 Formal)一次性证明死锁不可能发生,再补充 37 条针对边界序列的 covergroup,最终覆盖率由 92.3% 提到 99.7%,满足 GB/T 34590 的 ASIL-B 指标。

第四步,在 PR3 节点把 FMEA 表格、assertion 覆盖率曲线、故障注入日志打包进《验证 sign-off 报告》,质量部直接引用,节省了他们两周的审计时间,项目一次流片成功,后期车厂审核零缺陷。

总结:FMEA 在验证中的落地关键是‘用风险等级反向分配验证资源’,把高 S 值故障模式转成可衡量的覆盖率、断言和故障注入任务,再用自动化脚本追踪闭环,最终让验证报告成为芯片质量的可量化证据。”

拓展思考

  1. 如果把场景换成 3nm A78 级别 CPU,FMEA 会新增“电压域穿越故障”和“EM 耦合毛刺”两类原子故障模式,验证需要引入 AMS-FMEA 协同仿真,如何搭建 SystemVerilog + SPICE 的混合故障注入平台?
  2. 国内头部 Foundry 在 0.5V 近阈值设计时提供“统计性 FMEA”接口,把晶体管级失效概率反标到 Gate-Level,验证团队如何改写 constraint random 的 distribution,实现“概率驱动验证”?
  3. 面对 AI 芯片的稀疏计算阵列,传统 FMEA 的“单点故障”假设失效,需要升级为“组合故障模式”,验证计划里如何用机器学习对 2^N 的故障空间做降采样,同时保证安全完整性等级不降级?