本文基于Synopsys《CSI IP FMEDA.IC.DWC_mipicsi2_device分析报告》编写,结合ISO26262标准规范,梳理和总结了芯片相关的FMEDA分析过程和方法。
一、基本失效率计算
首先对基本失效率进行计算,按照如下计算公式:
λbase = ( λ1 x N x e-0.35a + λ2 x P%_of_Chip) x πtemp x 10-9/h;
公式中的各个符号含义如下国所示:
公式中的λ1和λ2可通过查找手册的方式找到:
IP核中使用了两种类型的硬件:MOS管的数字电路和MOS管的高速SRAM、FIFO电路,分析时需要将两种类型的硬件分开计算。MOS管的数字电路对应的λ1=0.0000034,λ2=1.7;MOS管的高速SRAM、FIFO电路对应的λ1=0.00000017,λ2=8.8。
公式中的N指的是集成电路中的晶体管数量,在后端完成综合后,能得到对应的电路晶体管数量。最终得到MOS管的数字电路对应N=845242.5;MOS管的高速SRAM、FIFO电路对应N=1572864。
公式中的a=制造年份-1998,假设制造年份是2019年,则a=21,该数值基于摩尔定律原因得到。
公式中的P%_of_Chip用来指示该IP在SoC中的百分比,用来减少λ2对最终FIT的影响。该数值的计算是P%=Amount of Transistors/Total amount of Transistors of overall Chip。Synopsys对于Digital/Linear blocks 的晶体管数量假设是200000000,对于16MBits RAM的晶体管数量假设是100663296。
公式中的πtemp用来表示温度相关对设计的影响,对于不同的Mission Profile等级,对应的πtemp也不相同。由于该Synopsys IP核属于Soft IP类型,对应等级为2,查找对应的Mission Profile得到πtemp=1.767。
这样最终可以计算可到两种类型的电路基本失效率:λbase_IP_Digital=0.015958FIT;λ base_IP_SRAM_FIFO=0.243266FIT。
二、各子模块失效率计算
在进行各子模块的失效率计算时,需要首先将各个子模块的晶体管数量、面积、寄存器和MEM数量统计出来,这是因为IP的配置不同,得到的上述参数也不同,因此需要针对子模块分析和配置得到上述数值。
除此以外,还需要约定各个子模块的失效率分布是按何种类型计算。对于永久失效,其失效率分布可以按晶体管数量或面积计算;对于瞬态失效,其失效率分布可以按面积或寄存器及MEM cells数量计算。
2.1 永久失效率计算
各个子模块的永久失效率计算公式如下:
λbase_block = λbase x Nblock/N;或λbase_block = λbase x Ablock/A;
其中N表示该类型电路的总体晶体管数量,Nblock表示子模块中该类型电路的晶体管数量;A表示该类型电路的总面积,Ablock表示子模块中该类型电路的面积。
这里存在一个假设,就是各个子模块的电路类型只能是其中的一种,不再区分子模块更小模块的电路类型,统一分配一种。经过上述步骤后,可以得到各个子模块的失效率λbase_block,随后就可以计算各个子模块的失效率分布数值:
FFailure Rate Distribution = λbase_block/nλbase_block;
各个子模块的失效率分布等于该模块的失效率除以所有失效率的总和。注意该失效率分布数值并不等于Nblock/N或Ablock/A,这是因为各个子模块的λbase会有所不同。另外还需要注意子模块是否和安全相关,不违反安全目标的子模块不需要统计分析。
2.2 瞬态失效率计算
瞬态失效率计算基本上和永久失效率计算类似,公式如下:
λbase_block_transient = λbase_transient x Ablock/A;或λbase_block_transient = λbase_transient x RMblock/RM;
其中A表示该类型电路的总体晶体管数量,Ablock表示子模块中该类型电路的晶体管数量;RM表示该类型电路的Latch、Reg和MEM cells加起来的数量,RMblock表示子模块中Latch、Reg和MEM cells加起来的数量。
这里不一样的地方是瞬态基本失效率λbase_transient的计算方法,Synopsys给了一个假设:
假设Digital电路的标准是每MFLOP是10FIT,RAM每Mbit是30FIT。这种假设在计算P%_of_Chip时也用到了。基于该假设计算瞬态基本失效率为:
λbase_transient = RM x 10 x 10-6 FIT;或λbase_transient = RM x 30 x 10-6 FIT;
这里的10和30就是基于上述假设带入的数值,这样就可以最终得到各个子模块的瞬态失效率数值。
图中还有一个基本失效率放大倍数,也可用作从永久到瞬态失效率的转换,如果知道该放大倍数就不需要进行上述假设计算了。
三、FMEDA表项建立
3.1 失效模式和失效影响分析
首先对每个子模块进行失效模式和失效影响分析,该部分内容在FMEA分析中已经完成。失效模式可以参考FailureModes表单项里面的描述,或者按照子模块的输出端口分配失效模式。如果按照端口进行失效模式分配,则其失效模式主要分析stuck类型问题,其每个失效模式的分布按照端口位宽进行计算,但是如果端口为1bit,分析其stuck-at 0和stuck-at 1,则其失效模式分布因在端口位宽的基础上再乘上50%。
对于瞬态失效,理论上来说其失效模式分布F应该进行手动分析,而不能直接使用永久失效模式的数值,但表中直接对其进行了复制处理。每个子模块的故障模式分布数值加起来必须为100%,故障率可以均匀分布,例如基于区域、受影响的输出、专家判断等。
硬件安全机制电路本身,如果在输出口上,也需要分析其故障模式,这是标准里面规定的做法,对于n>2的多点故障和安全机制,标准认为是安全的。
3.2 识别故障模式
按照下图所示的方式分析每个故障模式的类型,该部分内容在FMEDA分析时已经完成,标准对其进行了定义和说明。这里介绍下Synopsys的处理方法,对于每个故障模式,都需要考虑其违背的安全目标。每个安全目标的违背是独立的,也就是说一个故障模式可能会违背多个安全目标,并对每个安全目标单独分析故障类型。对于多点故障,其会同时有多个安全目标违背,由于标准对n>2的多点故障定义为安全故障,因此多点故障一般只考虑双点故障,对应2个安全目标的违背。
Synopsys为每个非硬件安全机制的故障模式,均识别分配单点故障,用“S”表示;为每个硬件安全机制的故障模式,均识别分配多点故障,用“M”表示。
如果故障模式对应的诊断机制(内部/外部)不能直接将IP带入安全状态(safe state),那么需要将考虑潜在故障的可能性,因此在AG-AM列(SPF DC gets MPF)中需要填上“Y”,实际上由于所有诊断机制均不能直接进入安全状态,因此所有相关列全填入“Y”。
最终得到的分析表格如下图所示:
3.3 分配安全机制和评估DC值
Synopsys将现有的安全机制分为IP内部自带的安全机制和外部的安全机制,所有外部的安全机制使用UseCase指代。所有内部安全机制用DI000-DI999编号,所有外部安全机制用DX000-DX999编号。每个安全机制的DC值,按照标准给定的方式进行DC值评估,例如ECC校验的DC估值为99%,parity的DC估值按照最高90%进行评估。所有的DI和DX的诊断覆盖率估值在DiagnosisInternal和DiagnosisExternal表单中进行了详细的说明。Synopsys对于外部安全机制只用到了UseCase1,且具体内容均为软件安全机制。
对DC值进行评估时,需要对诊断的方法进行描述,对诊断所需的反应方法所需时间进行描述,判断安全机制是否覆盖瞬态故障,如果是上电自检一次的诊断方法,需要进行说明。除此之外,给出对应安全机制的诊断覆盖率评估值,以及对应ISO26262的具体参考依据。对于安全机制是否覆盖到瞬态故障,需要在DI或DX的列表中填写是/否/部分。无论是硬件安全机制还是软件安全机制,其对应的评估DC值均能在标准文档中找到。单点、瞬态、潜在DC的分类依据:
- 如果该安全机制在上电时进行检测,对应只能检测潜在故障,不能检测单点;
- 如果该安全机制不是上电时检测,而是程序检测,对应能检测单点和瞬态,不能检测潜在;
- 如果该安全机制不是上电时检测,而是硬件冗余,对应可以检测单点、瞬态、潜在;
四、硬件量化指标计算
4.1 SPFM、MPFM指标计算
FMEDA表单中对SPFM和MPFM的指标值进行了计算,在对每个故障模式进行完上述分析和评估后,便可完成上述两个指标的计算过程。量化指标计算按照下图的方式分类和统计:
每个SG都会单独进行上述SPFM和MPFM的统计,将之前每种故障模式的故障类型归类汇总,各种故障模式的计算方法:
- 安全故障失效率λsafe_total (FIT)
λsafe_total = n_safeλsafe =
n_safeλbase_block×Fsafe ;
其中,n_safe是属于安全故障的故障数量,λbase_block 是子模块的失效率,Fsafe 是子模块中的故障模式分布比例。该SG下所有的安全故障失效率合并起来为该SG的总的安全故障失效率。
- 单点/剩余故障失效率λspf_total (FIT)
λspf_total = n_spfλspf
= n_spfλbase_block×Fspf×(1-DCspf_internal) ;或
λspf_total = n_spfλspf
= n_spfλbase_block×Fspf×(1-(1-1-DCspf_internal×1-DCspf_external)) ;
这里的计算区分安全机制是内部还是外部,如果使用内部安全机制,对应的单点故障失效率就是安全机制没有覆盖的部分。如果是外部安全机制,则需要在内部DC填0,此时只有外部安全机制起作用。如果内、外均有安全机制,则需要将内部和外部未发现部分DC相乘,得到的覆盖率更高,对应的单点失效率更低。
- 多点潜在故障失效率λmpf_latent_total (FIT)
多点故障除了统计故障模式为双点故障的模块外,还需要统计单点故障且安全机制无法直接将IP带入安全状态的故障,Synopsys将所有的安全机制本身故障全部作为双点故障处理。多点潜在故障失效率计算方法如下:
λmpf_latent_total = n_spf_mpf(λmpf_latent+λspf_latent) ;
其中n_spf_mpf为所有单点和多点故障数量,如果故障模式识别为多点故障,第一项为0,如果是单点故障且安全机制会直接将IP带入安全状态,则第二项为0。如果上述条件不成立,则两项的计算公式为:
λmpf_latent = λbase_block×Fspf×(1-DClatent_internal) ;
λspf_latent = (λbase_block×Fmpf-λspf)×(1-DCspf_laten_internal) ;或
λmpf_latent = λbase_block×Fspf×(1-DClatent_internal)×1-DClatent_external ;
λspf_latent = (λbaseblock×Fmpf-λspf)×(1-(1-(1-DCspf_laten_internal)×1-DCspf_latent_external)) ;
上述公式或的原因和单点故障失效率计算的方式一样,单点到多点的潜在需要去掉单点本身已探测到的部分。
- 多点可探测故障失效率λmpf_detected_total (FIT)
多点可探测故障和多点潜在类似,这里不再进行详细解释,具体公式如下:
λmpf_detected_total = n_spf_mpf(λmpf_detected+λspf_latent_detected) ;
同样区分故障模式是多点还是单点,单点同样需要考虑是否能进入安全状态,对应的两项计算公式为:
λmpf_detected = λbase_block×Fspf×DClatent_internal ;
λspf_latent_detected = (λbase_block×Fmpf-λspf)×DCspf_latent_internal ;或
λmpf_latent = λbase_block×Fspf×DClatent_internal×1-DClatent_external ;
λspf_latent_detected = (λbaseblock×Fmpf-λspf)× (1-(1-DCspf_laten_internal)×1-DCspf_latent_external) ;
可以理解为潜在DC诊断覆盖到的部分为可探测多点,λmpf_latent和λmpf_detected的和就是总体的多点故障率。上述计算完成后,可以得到每个SGV的每个故障类型的总SPFM、MPFM指标数值。
按照上述方法,也可以得到总的IP级的SPFM和MPFM指标数值,但在计算总的指标之前,需要完成故障模式总类型的识别工作,具体识别方式为:
- 如果该故障模式对应的各个SGV中存在一个或多个单点故障,且该安全机制的违例影响总体的安全指标,只要上述条件存在且有一个,即判定总故障类型为单点故障;
- 如果故障模式中不存在上述单点,则判断是否存在一个或多个多点故障,且该SGV影响总体安全指标,则判定总体故障为多点故障;
- 如果上述都不存在,则判定为N/A,表示未识别故障。
接着按照每个SGV相同的计算方法计算IP级指标,该指标的单点和多点故障判断按照总体判断结果完成。所有总体的各个故障类型的SPFM、MPFM计算完成后,按照如下公式计算IP级的SPFM和MPFM数值:
SPFM = 1- λspf_total/nλbase_block×Fblock ;
MPFM = 1- λmpf_latent_total/(nλbase_block×Fblock - λspf_total);
其中Fblock指的是所有的故障模式分布比例,和每个block的失效率乘积,作为总故障失效率计算。MPFM指标用来指示潜在故障在多点故障中的发生概率,因此需要去掉单点故障的失效率。
瞬态故障的指标计算和上述方式类似,这里不再重复说明,瞬态故障需要对应的用于瞬态故障的DC数值。同样的方法,还可以计算出同一种电路类型的对应上述指标值,作为分析参考。
4.2 PMHF指标计算
PMHF指标首先需要确定β因子数值,该数值是潜在故障的失效率在系统级的影响因子,根据ISO26262-9的7.4.4 中的note 1,在最坏情况下,可以选择β=0.47。
在之前的计算中,我们已经算出nλspf+λrf 、
nλmpf_latent 对应的永久故障和瞬态故障的失效率,PMHF可通过如下计算公式得出:
PMHF_p = λspf+
λrf+β
λmpf_latent ;(永久)
PMHF_t = λspf+
λrf+β
λmpf_latent ;(瞬态)
PMHF = PMHF_p + PMHF_t;
五、硬件量化指标评估
量化指标的评估,主要是分析各个模块、各个SGV对应的失效率情况和占比,找到没有达到要求的部分和占比严重的部分。同时,对安全机制的诊断覆盖率进行验证,确保评估结果和实际验证结果一致,对于不一致的地方,需要通过一些手段迭代和保证其有效。
Synopsys提供的表单中,各表单项作用和内容如下:
- SGVEvaluation表单:用于评估每个SGV项的对应失效率,按照下图的故障模式分类分别统计永久、瞬态和总失效率数值。最终统计各个SGV的SPFM、LFM占比。
- BlockEvaluation表单:用于评估每个Block的对应失效率,同样按照上图的故障模式分类分别统计永久、瞬态和总失效率数值。最终计算出每个Block的SPFM、LFM占比。
- BlockTypeEvaluation表单:用于评估每个block类型对应的失效率,方法同上。
- DiagnosisInternal_COV表单:用于统计故障注入的诊断覆盖率,验证安全机制的效果及对应的收集的覆盖率是否达标。每个DI的安全机制,均会验证其覆盖率是否达标。对于瞬态的故障,如果安全机制只在上电(StartUp)时有效,那么安全机制不能覆盖瞬态故障,且只能作用于潜在故障。
- DiagnosisExnternal_COV表单:作用同上,主要分析的是DX相关的安全机制。
六、总结
本文对目前车规芯片通过ISO26262 ASIL A-D等级所需的FMEDA分析过程进行了详细的说明,并结合Synopsys公司的商用芯片FMEDA表格说明整个过程方法。由于文中存在很多公式不太方便逐一展示,相关表格和公式可私信我获取,具体过程有不明白的也欢迎留言和私信讨论。