1. 为什么“车规芯片”绕不开FMEDA
最近几年,只要做车规芯片,不管是MCU、SoC还是电源管理芯片,FMEDA这个词几乎天天挂在嘴边。功能安全团队开会要聊FMEDA,设计团队评估架构风险要提FMEDA,连市场部做产品手册都要放一张“符合ASIL D”的指标图。Synopsys作为EDA工具链的重要厂商,也一直在推自己的功能安全解决方案,包括IP的FMEDA报告、VCS故障注入流程、可靠性仿真工具等。但真正到了自己动手计算FMEDA的时候,很多人会发现,网上能查到的资料要么太宏观,要么太零散,落地时总差那么一口气。
这条内容想做的事很直接:跟着Synopsys报告中体现的常见方法论,把车规芯片FMEDA从失效模式分类、失效率分配到诊断覆盖率计算、再到SPFM/LFM/PMHF指标核算的完整链路,一步一步拆开讲清楚。公式会给,逻辑会讲,实操中的坑也会尽量列全。适合三类人看:一是正在做功能安全量化分析的工程师,二是需要评审FMEDA报告的项目经理或架构师,三是刚入行想搞懂“FMEDA到底在算什么”的新人。
先说一个很多人误解的地方——FMEDA不是一个工具,也不等于一份报告。它的全称是Failure Modes, Effects, and Diagnostic Analysis,失效模式、影响与诊断分析。重点在“Diagnostic”,也就是诊断。FMEDA的核心任务不是把芯片所有失效模式列出来吓唬人,而是要搞清楚:芯片内部每一个关键器件失效时,系统能不能发现它,发现了之后能不能安全地处理它。这直接决定了芯片的随机硬件失效率指标能不能达到ISO 26262的目标值。
在ISO 26262的V模型开发流程里,FMEDA属于硬件层面的量化安全分析,通常在硬件架构设计阶段启动,在详细设计阶段迭代更新,到最终功能安全评估时定稿。它和FMEA(失效模式与影响分析)最大的区别在于:FMEA多是定性的,靠评分表判断严重度、发生度、探测度;FMEDA是定量的,用失效率数字说话,每一条失效模式都要有具体数值贡献。
2. FMEDA的核心结构:失效模式、失效率、诊断覆盖率的三层逻辑
2.1 失效模式不是“故障原因”,而是“故障表现”
做FMEDA的第一步,是把芯片拆成可分析的单元。这个单元的粒度取决于芯片类型和分析目标。对于一颗数字SoC,可能按IP划分:CPU子系统、总线互联、时钟复位、电源管理、存储器控制器、外设接口;对于一颗模拟芯片,按功能模块划分:LDO、ADC、放大器、基准源、驱动级。每个单元再往下拆,是失效率的基础载体。
每个单元内部,需要定义失效模式。失效模式描述的是器件“怎么坏了”,而不是“为什么坏”。比如一个电阻,失效模式有开路、短路、阻值漂移三种;一个寄存器位,失效模式可能是卡在0、卡在1、不定态翻转;一条信号线,失效模式可能是对地短路、对电源短路、相邻线间短路、信号线开路。这些失效模式各有各的失效率占比,总和为100%。
这里要特别强调一个原则:失效模式必须覆盖到“可感知的物理失效”,而不是笼统的“功能失效”。比如你分析一个时钟PLL模块,不能只写“时钟失效”,而要拆成“无时钟输出”“时钟频率漂移”“时钟相位抖动超限”“时钟停止后被诊断机制捕获”等具体模式。因为每一种模式对应的安全机制不同,诊断覆盖率也不同,笼统分析最后算出来的数字没有任何参考价值。
2.2 失效率数据从哪来:标准选型直接决定指标高低
FMEDA计算最敏感的参数,就是基础失效率λ。这个数字通常用FIT(Failures In Time,每10^9小时失效次数)表示。一颗芯片某模块的总失效率,等于该模块内所有有源器件失效率之和(或按照一定模型加权)。
目前行业里常用失效率标准主要有三套:IEC 62380(基于法国电信数据,偏电信和汽车应用)、SN 29500(基于西门子数据,欧洲汽车圈用得很多)、FIDES(法国军标体系,考虑更细的工程和环境参数)。同一颗芯片,用不同标准算出来的FIT可能差两到三倍,这不是算错了,而是标准的统计基础和环境模型不同。
实际项目中,选择哪个标准通常由整车厂或Tier 1的规范决定。如果客户没有强制要求,一般选SN 29500,因为它在欧洲汽车供应链里认可度最高,Synopsys等EDA厂商的工具和IP报告中大量引用这个标准,审查时沟通成本低。
在Synopsys的IP FMEDA报告中,失效率数据有两种呈现方式:一是每个失效模式项下直接给出FIT值;二是给出单位失效率(如每百万门失效率、每引脚失效率、每存储位失效率),由SoC集成者根据自己芯片的实际规模折算。折算时要特别注意温度和电压条件。车规环境通常按环境温度105°C、结温125°C计算,如果误用25°C的消费级数据,算出来的FIT会明显偏低,后期被测出来会非常被动。
2.3 安全机制与诊断覆盖率:FMEDA的“含金量”所在
有了失效模式和失效率之后,真正体现分析深度的环节是给每条失效模式匹配安全机制,并评估诊断覆盖率。
安全机制是芯片内部用来检测故障并做出响应的硬件或软件手段。常见的有:错误检测与纠正码(ECC)、奇偶校验、循环冗余校验(CRC)、内置自测(BIST)、电压/电流/温度监控器、看门狗、双核锁步(Lockstep)、时钟监控等。每种安全机制能覆盖的失效模式不同,覆盖率也不同。
诊断覆盖率(DC, Diagnostic Coverage)的定义是:安全机制能检测到的失效率占总失效率的比例。它不是拍脑袋估出来的,必须有理论分析或仿真证据支撑。比如一个8位宽的寄存器阵列加了奇偶校验,理论上能覆盖所有单bit翻转和奇数bit翻转,但覆盖不了偶数bit翻转,因为偶数bit翻转后奇偶校验结果仍然正确。如果假设翻转模式中单bit占90%、双bit占8%、多bit占2%,那么这种奇偶校验的诊断覆盖率约为90%,而不是100%。
这个逻辑延伸到所有安全机制,就是FMEDA量化分析的核心思维:安全机制永远有盲区,覆盖率不可能凭空达到100%,必须用失效模型去定量计算。
3. 硬指标怎么算:SPFM、LFM、PMHF的完整公式与计算口径
3.1 先分清三类失效:SPF、RF、MPF
ISO 26262把随机硬件失效按安全机制的处理结果分成三大类:
- SPF(Single Point Fault,单点故障):直接违反安全目标的失效,且没有任何安全机制覆盖,也没有其他机制能“在合理时间内”察觉并处理它。这是最危险的失效,必须严格控制。
- RF(Residual Fault,残余故障):本来有安全机制覆盖,但安全机制覆盖率不是100%,漏掉的那部分就属于残余故障。
- MPF(Multiple Point Fault,多点故障):失效本身不会单独违反安全目标,只有在与其他独立失效组合时才构成危险。MPF又分两类:MPF,Latent(潜伏故障),即失效发生后驾驶员或系统在“诊断测试间隔(DTI)”内发现不了;MPF,Perceived(可感知故障),即驾驶员能感知到,或系统在DTI内通过其他方式报警了。
这三类失效的划分直接进入两个核心指标:单点故障度量(SPFM)和潜伏故障度量(LFM)。
3.2 SPFM的计算公式与一个完整算例
SPFM衡量的是:芯片内所有失效中,能被安全机制覆盖或本身不构成单点风险的比例有多高。公式如下:
SPFM = 1 - (λ_SPF + λ_RF) / λ_total
其中,λ_total是芯片中与安全目标相关的所有硬件失效的总失效率;λ_SPF是单点故障失效率;λ_RF是残余故障失效率。
注意,公式分母是“与安全目标相关的失效率”,不相关的模块(比如一颗MCU里跟刹车控制无关的音乐播放模块)可以排除,但排除要有依据,不能让审核员觉得你在选择性“剔除”失效。分子和分母的讨论范围必须一致。
举一个简化的例子:假设一个电机驱动芯片,总失效率λ_total = 100 FIT。里面有一条SPF路径,失效率5 FIT;有一个安全机制覆盖了某条失效路径的90%,被覆盖的失效路径失效率为50 FIT,那么残余故障rf = 50 × (1 - 0.9) = 5 FIT。于是:
SPFM = 1 - (5 + 5) / 100 = 0.9,也就是90%。
看起来很简单,但实际分析时分歧点极多。比如:λ_SPF和λ_RF中,是否要包含共因失效?是否要包含安全机制自身的失效?这在下文避坑点会细说。
3.3 LFM的计算公式与典型误区
LFM衡量的是:潜伏故障(尤其是MPF-Latent)占全部非SPF/RF失效的比例。公式:
LFM = 1 - (λ_MPF_Latent) / (λ_total - λ_SPF - λ_RF)
用上面的例子:λ_total = 100,λ_SPF = 5,λ_RF = 5,所以分母是90 FIT。假设MPF-Latent失效率为9 FIT,那么:
LFM = 1 - 9 / 90 = 0.9,也就是90%。
这里最大的误区是把“所有被安全机制覆盖的失效”都算进分母去“垫高”LFM。实际上,被安全机制有效覆盖并在DTI内可靠处理的失效,既不进λ_MPF_Latent,也不算危险失效,它本身就是“良性”的,对LFM没有任何稀释作用。分母只包含那些不直接危险、但存在成为潜伏故障可能性的失效子集。如果分析人员把所有失效都算进分母,数字会虚高,审核时很容易被挑战。
3.4 PMHF:一颗芯片的“平均危险失效率”
SPFM和LFM是比率类的指标,PMHF则是绝对值类指标,直接给出“每小时平均危险失效概率”的目标。ISO 26262-5的表格中,ASIL D对应PMHF < 10 FIT,ASIL C对应< 100 FIT,ASIL B对应< 100 FIT(有的解读里B级是< 1000 FIT附近,需要核对具体标准版本。通常颗粒度:D级10 FIT,C级100 FIT,B级1000 FIT,A级不强制量化)。注意这是“芯片级”目标,系统级还会按架构分解分配到各组件。
PMHF的实用计算公式(ISO 26262-5的简化式)为:
PMHF = λ_SPF + λ_RF + λ_MPF_Latent × λ_DC × T_lifetime × (1 - DC)
这个公式其实很难直接手算,因为MPF部分的计算涉及“潜伏失效率 × 诊断覆盖率 × 使用寿命/诊断测试间隔”的交互。实际项目中,更常用的工程化公式是把三类失效贡献分别折算后累加:
PMHF ≈ λ_SPF + λ_RF + λ_MPF_Latent × (1 - DC_MPF)
这里的DC_MPF是MPF失效中,在寿命周期内能被诊断手段周期性检测出来的比例。算出来之后,与ASIL等级对应的10/100/1000 FIT目标值比较,同时还要满足SPFM和LFM的比率要求(ASIL D要求SPFM≥99%,LFM≥90%;ASIL C要求SPFM≥97%,LFM≥80%;ASIL B要求SPFM≥90%,LFM≥60%)。三者不是“满足一个就行”的关系,而是必须同时满足。
4. 借助Synopsys工具链把FMEDA落地:从故障注入到报告输出
4.1 用VCS做故障注入,验证诊断覆盖率
FMEDA的纸质表格做得再漂亮,最终也要有数据支撑。很多安全机制声称的覆盖率,比如“寄存器奇偶校验覆盖99%的单bit翻转”,不是设计文档里写个百分比就完事的,最可靠的办法是拿RTL代码做故障注入仿真。Synopsys VCS是数字仿真工具,在这个环节能做的事情很实际:在寄存器传输级(RTL)代码里插入故障模型(比如强制翻转某个信号、强制寄存器位卡常数),然后观察安全机制(比如错误标志、中断、复位信号)是否在规定的诊断测试间隔内正确响应。
故障注入的激励样本量不需要做到“穷举所有位”,通常根据覆盖率期望值和置信度要求,用统计分析确定样本量。比如对于单bit翻转覆盖验证,业内常见做法是随机选取一定比例的寄存器位(比如每个寄存器组抽2-3个代表性位),注入翻转,统计检测率。这里的覆盖率置信度与样本量关系,可以直接套用二项分布公式估算,在项目计划阶段就应确定。
Synopsys还提供专门的故障安全性分析工具链(如TestMAX等),可以把故障注入、覆盖率统计、失效模式分类一步步流水化。实际项目里,如果分析对象是Synopsys自家的IP,工具链和报告模板的契合度会更高;但即使不是Synopsys IP,方法也是通用的:RTL级故障注入、仿真跑回归、比对波形、输出检测结果表。
4.2 用统计与电子表格工具组织FMEDA计算模型
FMEDA的计算过程本质上是大量表格数据的累加与加权。业内最常见的落地方式是用Excel或Google Sheets搭建FMEDA计算模型,把各模块失效率、失效模式分布、安全机制覆盖率、最终指标逐级汇总。这个阶段工具不是重点,逻辑清晰和数据可追溯才是核心。
常见的做法是:
第一,建“失效率汇总表”。按模块列出器件类型、数量、单位失效率、总失效率、失效率标准来源。这是FMEDA计算的“输入数据表”。第二,建“失效模式分布表”。每个模块按失效模式拆分,写明各模式占比、对应的λ值。这里的占比来源需要注明,是基于IEC 62380的默认分布、还是基于IP供应商数据、还是基于仿真/实测数据。第三,建“安全机制覆盖表”。每条失效模式对应哪些安全机制、诊断覆盖率是多少、覆盖率来源(理论计算、故障注入、还是IP FMEDA报告)。第四,建“指标汇总表”。自动汇总三类失效率,计算SPFM/LFM/PMHF,并与目标值比对。
这个过程归纳下来其实就是一套“FMEDA台账四件套”。很多项目做出来的FMEDA报告被审核员打回,原因并不是公式算错了,而是追溯链断了、或来源文献缺失。比如失效率源写“IEC 62380”,但没写具体表格序号和温度条件;覆盖率来源写“设计评估”,但没有任何仿真或推导支撑——这些在功能安全审核中都是直接开NC(不符合项)的级别。
4.3 从IP的FMEDA报告到芯片级FMEDA的集成口径
在实际的SoC项目中,很多子模块是采购的第三方IP。IP厂商通常会在功能安全包中提供IP级FMEDA摘要,Synopsys很多车规IP也附带这类报告。拿到IP级FMEDA报告后,需要完成一次“集成换算”,不能直接照搬数字。
需要调整的主要因素有三个:一是规模换算。IP报告的失效率通常按“单位实例”或“单位容量”给出,你的系统里可能例化了两个相同IP或配了不同容量的RAM,需要按实际规模等比折算。二是安全机制配置。IP报告默认的安全机制组合可能和你的系统配置不同。比如报告里假设DMA模块使用完整ECC和BIST,但你的系统只用ECC不用BIST,那么诊断覆盖率就要按你的实际配置重新评估,不能沿用报告送的数字。三是环境条件。IP报告可能按某个标准结温计算,你的芯片如果散热条件更差,需要重新计算温度加速因子,通货膨胀失效率。
这一部分最容易踩的坑是“拿别人的结论当自己的结论”。审核员不会因为你拿了某知名EDA厂商的IP FMEDA报告就放弃追问——“这个IP在你的芯片里,时钟、电压、温度条件发生了哪些变化?诊断覆盖率的假设是否仍然成立?”所以在集成FMEDA时,IP报告只能当成“基础数据包”,真正的责任主体永远是SoC集成方。
5. 实际项目中最容易翻车的五个避坑点
5.1 失效率标准的“混用”与“误用”
不少项目在同一个FMEDA模型里,数字部分用SN 29500、模拟部分用IEC 62380、外购器件用供应商自定义的失效率,这种混用本身不违规,但必须有统一的折算和说明。比如两种标准温度模型不同,直接相加会导致重复计算或低估。正确的做法是选定一个主标准,所有非主标准来源的数据,通过中间参数(如激活能、温度加速因子)统一折算到主标准的口径下。折算公式和参数在报告里要完整呈现,经得起复核。
5.2 诊断覆盖率的“拍脑袋”与“双重解决”
我在评审中见过的最危险的写法是“安全机制覆盖率100%”。SPFM计算中,如果某机制宣称100%覆盖,等于说该机制完全不可能漏检任何故障。这在物理上几乎不成立。安全机制本身也有失效率,它的比较器、输出寄存器、使能控制逻辑同样会坏。严谨做法是把安全机制自身的失效也纳入分析,这部分通常会产生额外的SPF或RF贡献。
另一个常见的“数字游戏”是:先给某条失效路径分配诊断覆盖率DC1,把残余故障RF计算出来后,又在RF上挂了另一套安全机制(跑第二层的DC2)。从公式上看,最终残余等效于(1-DC1)×(1-DC2),但实际必须有明确的失效检测时间窗口和时序先后关系,不能简单地按“乘积更小”来叠加。否则审核时会被追问:“第二级安全机制检测第一级漏检故障的时间,是否在安全要求的时间窗口内?”答不上来,整套数值都会失去信任。
5.3 共因失效(CCF)处理不当,导致指标虚高
ISO 26262在系统层面特别强调共因失效分析(CCF Analysis)。在FMEDA量化计算里,CCF往往以“共因因子β”的形式出现。比如一颗双核锁步的MCU,理论上双核同时失效才会违反安全目标,但如果两核共用同一个电源域和同一时钟源,那么一次电源纹波毛刺可能同时导致两核崩溃,这种失效不能简单当成独立的MPF算良性。
实操中,每类安全机制的失效模式都要评估是否有共因路径。例如:ECC纠错电路和被保护存储单元是否共用同一条电源线?如果用同一个LDO供电,那么电源故障会同时影响存储器和ECC逻辑,此时共因因子不能取0。β取值(比如5%、10%或更高)需要有依据,通常来自经验数据、器件物理分析和参考标准。β取值过小是很多车规芯片在最终安全评估时暴露出的通病,一旦被审核员指出,可能需要大幅修改计算模型甚至返工设计。
5.4 存储器和寄存器的失效模式分布“复制粘贴”
很多FMEDA新手在做失效模式分布时,直接套用“SRAM单bit翻转占90%、双bit翻转占8%、多位翻转占2%”这类行业默认值。这个分布数据本身有其适用前提,通常是对应中子辐射软错误与工艺节点相关的实测统计。一旦芯片的实际使用环境不同(比如海拔、封装材料、屏蔽结构),软错误率分布会明显变化。
更麻烦的是,这组占比只能用于“软错误”类失效。存储器还会有硬失效(卡死fail、地址解码失效列失效等),这些失效模式的占比分布和软错误完全不同。硬失效通常靠MBIST(Memory BIST)覆盖,软失效靠ECC覆盖,两类失效频率和诊断覆盖率计算口径相互独立。如果不管三七二十一,把硬失效和软失效混成一张分布表,最终的SPFM/LFM指标解释起来会非常困难。
5.5 报告粒度与审查要求不匹配
功能安全审核员看FMEDA报告,最不喜欢的是“只给总表不给过程表”。总表只有SPFM、LFM、PMHF三个数和一行“满足要求”,过程表根本没有。这样的报告即便数字凑整达标,也几乎一定被开NC。
一个好的FMEDA报告,在粒度上至少要达到:单元级有失效率汇总(哪些器件、数量、单位失效率、标准来源),有失效模式分布(哪些模式、占比依据),有安全机制映射(每类失效的安全机制、覆盖率、验证方法),有指标计算路径(SPFM/LFM/PMHF的完整计算过程而不是只给一个Excel截图),有假设条件(温度、电压、寿命、诊断测试间隔、失效率标准版本),有结论与偏差分析(和目标值的差距是多少,哪个子项贡献最大)。这份报告不是给别人看的应付件,而是自己排查薄弱环节最直接的工具——因为它会精确指出:哪块电路在拖累某个指标,下一步设计应该往哪个方向优化。
6. 最后再分享一个实操中的小经验
关于FMEDA的计算,我个人的体会是:设计早期先用“粗数据”跑一版,价值远大于等所有数据齐了再精细计算。
什么意思呢?在芯片架构定义阶段,不需要等所有IP失效率数据、所有故障注入结果都齐了再动工。先拿行业通用失效率数据、粗略的安全机制覆盖率、初版架构框图,把SPFM/LFM/PMHF先算一遍。这个“初版”虽然数字不准,但能很快暴露出哪些模块的失效率占比过高、哪些安全机制覆盖缺口太大、哪些架构决策在功能安全角度根本不成立。等于是给芯片的“功能安全体质”做了一次低成本体检。
等到设计逐步细化、RTL冻结、故障注入跑完,再一版一版迭代FMEDA模型。每次设计改动(加一个安全机制、调整一个时钟域、换一个存储器类型)都同步更新模型,保证最后定稿的数字和实际芯片一致。这样到了认证冲刺阶段,FMEDA报告早就是“水到渠成”的结果,而不是临时抱佛脚的冲刺任务。
踩过几次坑之后,我现在做FMEDA项目,第一件事不是打开Excel建公式,而是先约架构师和设计负责人,把芯片架构图上所有模块的“失效敏感度”过一遍,把“哪些失效必须被检测、哪些失效允许被感知、哪些失效可以容忍潜伏”三类在纸面上先分好类。分类清楚了,后面所有的失效率分配、覆盖率计算、指标汇总都只是“照单抓药”的执行工作。这个顺序反过来的话,项目后期会不断被“这个模块到底算不算安全相关”的问题反复纠缠,效率和准确性都会大打折扣。