Aurix TC3xx功能安全系列专题(一) LBIST逻辑自检

引言

众所周知,ISO26262-2018第5章节对安全相关的组件提出了单点故障和潜在故障要求,下表为其在不同ASIL等级下潜在失效的量化指标:

NickYang_0-1692992853587.png

英飞凌Aurix TC3xx作为满足ASIL D的32位高性能MCU,提供了大量安全机制来覆盖MCU不同的失效模式。针对潜在失效部分,TC3xx有PBIST(电源自检),LBIST (逻辑自检), MBIST(内存自检),MONBIST(二级电压监控自检)等特性来满足客户系统级的功能安全需求。本文主要介绍TC3xx的逻辑自检功能。


1. LBIST的检测范围


LBIST检测的范围主要包括以下内容:

1) 所有数字模块, 除了PMS子模块,包括:

  • CPU
  • 外设
  • Port(Pad除外)
  • HSM
  • PMS的寄存器接口(EVR,SCR WUT,SMU_STDBY..)

2) 所有安全机制的检测,包括:

  • SRAM ECC
  • Pflash ECC
  • MPU
  • Bus SM
  • SMU Alarms
  • SMU_Core

因此,不需要额外的软件来Cover这部分安全机制

Tips:值得注意的是, LBIST虽然不检测SRAM,PFLASH以及DFLASH(这些是MBIST测试的内容),但是,SRAM的冗余寄存器在Scan Chain里面, 因此LBIST测试执行完成之后 ,SRAM的内容是不可靠的,需要被重新初始化。默认情况下,SRAM会在冷启动复位的时候被重新初始化(除非改变HF_PROCONRAM.RAMIN的配置)


2. LBIST Controller的结构和配置


2.1 LBIST Controller的结构

通常来说,BIST测试电路包括三部分内容,TPG(Test Pattern Generation),ORA(Output Response Analyzer),以及BIST Controller。 在Aurix TC3xx中,其对应关系如下:

TRG --- TC3xx采用的是伪随机Pattern发生器PRPG,通过LFSR(线性反馈移位寄存器)来产生伪随机的测试向量;

ORA --- TC3xx采样的是Compactor + MISR, Compactor模块可以对测试的结果通过异或门进行压缩,并最终产生MISR签名。用于与期望的签名值进行比较;

BIST Controller --- TC3xx采用的是LBIST Controller,通过几个主要的LBIST控制寄存器来实现诸如Seed,Pattern等参数的配置。具体结构示意图如下:

NickYang_1-1692993049400.png 

2.2 LBIST Controller的配置

客户在使用的时候, 需要根据自身的需求,对LBISTCTRLx(x=0-3)这四个寄存器进行配置,然后通过BMI的方式或者软件触发的方式来开启LBIST测试。首先,PRPG开始对Pattern进行转换,通过Scan Chains扫描通道对逻辑电路部分进行测试, 测试的结果经过压缩后从MISR(多输入签名寄存器)输出测试的签名结果,存放在相应的寄存器当中,用于后续客户与期望的签名进行比较,从而判断LBIST测试是否成功。 LBISTCTRLx(0-3)的定义如下图:

NickYang_2-1692993099890.png其中比较关键的几个寄存器的位如下:

1) LBISTCTRL0.PATTERNS: 决定执行的LBIST Pattern的个数

2) LBISTCTRL0.LBISTREQ/LBISTREQRED: 这两个位域设置为1则触发LBIST

3) LBISTCTRL0.LBISTRES: 设置为1可以复位LBIST Controller,复位之后, LBISTDONE会被清零,SIGNATURE值也会被清零

4) LBISTCTRL0.LBISTDONE: 用于表征LBIST Controller的执行状态,0表示自从上次Power on Reset之后没有LBIST执行,1表示至少有一次成功执行完了LBIST测试


3. LBIST的触发方式


LBIST检测支持两种触发方式, 一种是通过BMI配置触发,另一种是软件触发。

3.1 BMI触发

Aurix TC3xx在上电的时候会检测有效的BMHD,其内部的BMI结构中包含了LBIST是否使能的信息,如果LBISTENA位设置为1,则TC3xx在SSW运行的过程中会触发LBIST自检。否则不进行该操作。BMI的结果如下图所示:

NickYang_3-1692993210669.png

UCB_SSW的区域会存放LBIST相关配置寄存器的值,在上电的时候加载到实际的SCU_LBISTCTRLx寄存器当中。

值得注意的是,其中SCU_LBISTCTRL1的第27bit, BODY位是由HWCFG6引脚的电平决定

HWCFG6配置为低电平 --- BODY = 1

HWCFG6配置为高电平 --- BODY = 0

       但是HWCFG6的电平不会影响UCB_SSW的结果, 而是直接锁存到真实的SCU_LBISTCTRL1当中。UCB_SSW里面的内容定义如下图所示:

NickYang_4-1692993266202.png

下图是实际观测到的UCB_SSW里面的LBIST寄存器的配置:

NickYang_5-1692993291679.png 

可以看到它只支持Configuration A的配置。针对Configuration A的定义,可以在各个芯片具体的Appendix UM里面找到,以TC39x为例:

NickYang_6-1692993317623.png

3.2软件触发

软件触发是通过手动配置相关寄存器来实现LBIST测试,具体操作步骤如下:

  • 先将LBISTCTRL0寄存器的LBISTRES寄存器置1,来复位LBIST Controller,这时候LBIST相关的结果寄存器都会清除,可以通过读取LBISTCTRL0.LBISTDONE是否为0判断
  • 通过配置SCU_LBISTCTRL1来选择相应的BODY, SCU_LBISTCTRL2可以不配置, 采用默认值
  • 配置SCU_LBISTCTRL0,需要将LBISTREQRED和LBISTREQ bit都置1,这样就会触发LBIST的测试。

无论硬件BMI的方式触发,还是软件触发,在执行完LBIST测试之后,系统都会自动进行warm reset。所以对于冷启动的LBIST测试而言,该测试的执行时序越靠前,整体的系统初始化时间越短。


4. LBIST的执行与结果判定


当采用BMI触发LBIST或者软件触发LBIST测试之后, LBIST分别会在SSW和Application SW里面执行相应的LBIST测试。 对于Configuration A的LBIST测试,其执行时间大概是6ms左右。如果测试过程中有任何异常,则TC3xx的复位状态寄存器RSTSTAT的LBPORST位会被置1,否则硬件会自动触发LBIST复位,Aurix的复位状态寄存器中的LBTERM位会被置1,根据这一位的信息确定上次的复位类型是LBIST复位。

NickYang_7-1692993419934.png 

再次基础上,客户软件去检查LBIST的测试结果,通过读取LBISTCTRL3寄存器的值,与期望的值进行比较,如果与期望值一致,则测试通过,否则测试不通过。

NickYang_8-1692993426506.png

一般而言,推荐客户在第一次上电的时候,使用硬件BMI的方式触发LBIST测试,如果发现测试不通过,则在用户软件里面通过软件触发的方式进行一次或多次重复测试,如果三次测试仍然失败,这时候有理由怀疑芯片本身可能存在失效的风险,客户需要根据自己的系统功能定义采取进一步的措施。

Tips: 因为LBIST测试会触发复位,此时RAM中的数据会丢失,建议客户将LBIST测试次数的counter计数放到LMU中。

  • 下载APP

  • 联系我们

    1. 客服热线

      400-626-1616转2

    2. SaaS售前专家服务

      158-1468-8918

    3. 企业微信客服

      工作日9:00~17:00