Aurix TC3xx功能安全系列专题(一) LBIST逻辑自检
引言
众所周知,ISO26262-2018第5章节对安全相关的组件提出了单点故障和潜在故障要求,下表为其在不同ASIL等级下潜在失效的量化指标:
英飞凌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等参数的配置。具体结构示意图如下:
2.2 LBIST Controller的配置
客户在使用的时候, 需要根据自身的需求,对LBISTCTRLx(x=0-3)这四个寄存器进行配置,然后通过BMI的方式或者软件触发的方式来开启LBIST测试。首先,PRPG开始对Pattern进行转换,通过Scan Chains扫描通道对逻辑电路部分进行测试, 测试的结果经过压缩后从MISR(多输入签名寄存器)输出测试的签名结果,存放在相应的寄存器当中,用于后续客户与期望的签名进行比较,从而判断LBIST测试是否成功。 LBISTCTRLx(0-3)的定义如下图:
其中比较关键的几个寄存器的位如下:
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的结果如下图所示:
UCB_SSW的区域会存放LBIST相关配置寄存器的值,在上电的时候加载到实际的SCU_LBISTCTRLx寄存器当中。
值得注意的是,其中SCU_LBISTCTRL1的第27bit, BODY位是由HWCFG6引脚的电平决定
HWCFG6配置为低电平 --- BODY = 1
HWCFG6配置为高电平 --- BODY = 0
但是HWCFG6的电平不会影响UCB_SSW的结果, 而是直接锁存到真实的SCU_LBISTCTRL1当中。UCB_SSW里面的内容定义如下图所示:
下图是实际观测到的UCB_SSW里面的LBIST寄存器的配置:
可以看到它只支持Configuration A的配置。针对Configuration A的定义,可以在各个芯片具体的Appendix UM里面找到,以TC39x为例:
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复位。
再次基础上,客户软件去检查LBIST的测试结果,通过读取LBISTCTRL3寄存器的值,与期望的值进行比较,如果与期望值一致,则测试通过,否则测试不通过。
一般而言,推荐客户在第一次上电的时候,使用硬件BMI的方式触发LBIST测试,如果发现测试不通过,则在用户软件里面通过软件触发的方式进行一次或多次重复测试,如果三次测试仍然失败,这时候有理由怀疑芯片本身可能存在失效的风险,客户需要根据自己的系统功能定义采取进一步的措施。
Tips: 因为LBIST测试会触发复位,此时RAM中的数据会丢失,建议客户将LBIST测试次数的counter计数放到LMU中。

