目录
1.概述
2.如何配置NDT
3.小结
1.概述
上篇TC3xx MTU概述(1)-CSDN博客我们讲解了MTU基本功能和MBIST基本概念,接下来我们继续讲解MTU如何配置NDT算法。
2.如何配置NDT
前面聊了那么多概念,我们还是来看看如何配置MTU来实现NDT。
MTU寄存器分为了两大块,MTU配置寄存器和SSH寄存器。
- MTU 配置寄存器:用于使能SSH,寄存器位宽32bits;
- SSH寄存器:用于控制关联SRAM的MBIST和ECC设置等,寄存器位宽16bits。
因此在设计代码时需要重点关注MC的寄存器配置,主要是位宽限制。
经总结,要运行NDT须掌握MTU\SSH中的四个关键寄存器CONFIG0,CONFG1,MCONTROL和RANGE。
- CONFIG0:用于配置SSH访问类型和每个地址的访问次数
- CONFIG1:用于选择测试pattern等;
- MCONTROL:用于控制MBIST开启,测试地址运行方向等;
- RANGE:用于设置SRAM测试地址范围。
以测试LMU0为例,具体步骤如下:
1.使能LMU0的SSH控制器,配置MTU_MEMTEST0.BIT30。
2.配置NDT:
由于LMU0属于第31个SSH,因此我们需要配置MC30_CONFIG0\1、RANGE等。
我们要搞清楚mbist不同算法下CONFIG0和1里的位域是有关联的;
CONFIG0位域如下:
- [7:0]:ACCSTYPE,每一位代表对单个地址的一次访问,0表示写访问、1表示读访问。例如ACCSYYPE[0] = 1,表示对当前单个地址的读访问。
- [15:12]:NUMACCS,配置每个地址的访问次数,最多8次。
CONFIG1位域如下:
- AC_MOD:用于SSH执行更复杂的寻址方案
- SELFASTB:选择fast bits
- ACCSPAT:访问pattern配置,当AG_MOD选择NDT后,该位域就与CONFIG0.ACCSTYPE关联,当ACCSPAT[0] = 0时表示上一次读访问的正常数据,等于1时表示上次读访问是取反的数据。
有了上述基本概念,我们尝试来构建一个时间复杂度为4N的NDT逻辑,一个Cell的完整测试逻辑为{ r, w*, r* ,w }。
那么首先CONFIG1.AC_MOD就要配置为0x5,
针对CONFIG0.NUMACCS,就应该为4,表示单个地址访问四次;ACCSTYPE就应该配置为0b0101,表示 w <- r* <- w* <- r;
同理,CONFIG1.ACCSPT就应该配置为0b1000 ,逻辑如下:
第一次读取sram 是正常读取,故ACCSPT[0] = 0;第二次是写访问,写入的是上一次读取的取反,第一次是正常读取,故ACCSPT[1]=0;第三次是读取取反的值,但是由于第一次读取是正常读取,故ACCSPT[2] = 0;最后一个是对取反值取反,并写回SRAM,由于第三次读取的是取反值,故ACCSPT[3] = 1;
故MC30CONFIG0 = 0x4005;MC30CONFIG1 = 0x5008。
完成CONFIG0\1的配置后,接下来需要考虑待测SRAM的地址上下限。
这与我们在Memmap里定义的地址大有不同,毕竟对于特定SSH来说,它只是到自己关联SRAM的相对地址,从0x00开始以64word为单位增长到SRAM最大Size。
因此我们在配置RANGE寄存器时,通常采用每个SSH RANGE的默认值,表示SRAM全量测试,如果需要测某块,就需要大家自己去锁定每个SRAM的size。
最后,我们通过MC_MCONTROL配置MBIST测试方向(高地址->低地址或者相反),并开启测试。
测试如果有问题,我们可以通过寄存器MC_ETRR来查询出错的位置,如下:
3.小结
通过上面简单描述,我们了解了TC3xx的MTU基本功能;同时也明白了MTU应该放在SafetyLib整个维度。
MTU承载的MBIST功能不仅是对功能安全要求的具体硬件机制实现,也是对AUTOSAR中RamTest模块的需求承接。从而我们进一步打通MTU->SMU的功能逻辑闭环。