• 254查看
  • 0回复

[芯片硬件] TC3xx MTU概述

[复制链接]


该用户从未签到

发表于 15-5-2024 19:44:18 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


目录

1.MTU基本功能

2.MBIST

3.如何配置NDT

4.小结


1.MTU基本功能

在TC3xx中,MTU(Memory Unit Test)被用来管理控制芯片内部各种RAM的测试、初始化和数据完整性检查。既然MTU主要是管理和控制,那干活的想必另有他人。所以在该平台中,我们可以看到SRAM周围设计了特别的数字逻辑电路,称之为SRAM Support Hardware(SSH);SSH主要用于控制其关联SRAM的ECC、MBIST(Memory Built In Self Test)等。因此MTU、SSH、RAM在TC3xx的结构示意如下:
TC3xx MTU概述w1.jpg
其中,CPU通过SPB总线访问MTU;MTU针对每个SSH又都有一套独立寄存器,可以配置不同的SRAM测试类型、控制SSH的功能运行。 根据TC39x-B UserManual描述,在该平台中设计了多达96个SSH(包括预留),截图如下:
TC3xx MTU概述w2.jpg
这意味着,在不同IP的内部SRAM也可以通过MTU和SSH配置进行测试,即使CPU不能直接访问该SRAM。值得注意的是,SSH寄存器只能通过MTU->SSH这样的路径进行访问,因此在访问效率上会比直接通过SPB访问寄存器要慢一些。
2.MBIST

MBIST是一种功能安全机制,用于检查SRAM内部Cell是否出现永久随机硬件失效。TC3xx使用MTU来实现MBIST,在UserMannul里仅提供了Non-Destructive Test的实现方法、功耗和耗时。这是为什么呢?因为在ISO26262中,SRAM的Cell故障被认为是潜伏故障,而在一次驾驶循环内至少得有一次测试用于覆盖潜伏故障,所以使用者有权决定在MCU启动、APP运行和下电这三个阶段任意时刻进行MBIST,因此这种非破坏性测试(NDT)是最为友好。NDT允许在程序运行时进行memory的测试,并且不会破坏当前memory里的应用数据。之所以能这样,是因为该算法的运行逻辑如下:
    从SRAM一个地址读取一个word,包括数据+ECC bits,记为"r" ;对上述word取反,并写回当前地址,记为 “w*”;再次读取该地址上的数据word,记为 “ r* ”;对上述word再次取反,写回SRAM,记为“w”;
其中 “ * ”表示始终对原始数据相反,可以看到要保证应用数据不被污染,写"w"的次数必须是偶数次,因此NDT的算法在时间复杂度上至少为4N。执行MBIST期间,每次发生读访问,SRAM自身的ECC机制会计算此次读出数据的校验码,并检查该校验码是否与存入该数据时计算的校验码一致。如果不一致,则会产生错误并通知SMU或者产生中断。不过,在执行MBIST前还需要注意如下事项:

    测试期间,被测试SRAM不可访问;测试前,SRAM应该被正确初始化。
这些事项与我们设计Online Bist任务息息相关。在CP AUTOSAR RamTst模块里提出了Foreground Test和Background Test两个概念;其中Foreground Test是同步测试,不可以被中断;Backgroud Test由OS或者调度器周期调度,它可以在每个测试序列完成时被打断。由于Background Test涉及到数据一致和中断概念,目前用的比较少,比较常见的就是在上电前执行NDT,运行期间选择关键memory进行测试。
3.如何配置NDT

前面聊了那么多概念,我们还是来看看如何配置MTU来实现NDT。MTU寄存器分为了两大块,MTU配置寄存器和SSH寄存器。

    MTU 配置寄存器:用于使能SSH,寄存器位宽32bits;SSH寄存器:用于控制关联SRAM的MBIST和ECC设置等,寄存器位宽16bits。

TC3xx MTU概述w3.jpg
因此在设计代码时需要重点关注MC的寄存器配置,主要是位宽限制。经总结,要运行NDT须掌握MTU\SSH中的四个关键寄存器CONFIG0,CONFG1,MCONTROL和RANGE。

    CONFIG0:用于配置SSH访问类型和每个地址的访问次数CONFIG1:用于选择测试pattern等;MCONTROL:用于控制MBIST开启,测试地址运行方向等;RANGE:用于设置SRAM测试地址范围。
以测试LMU0为例,具体步骤如下:1.使能LMU0的SSH控制器,配置MTU_MEMTEST0.BIT30。
TC3xx MTU概述w4.jpg
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 bitsACCSPAT:访问pattern配置,当AG_MOD选择NDT后,该位域就与CONFIG0.ACCSTYPE关联,当ACCSPAT[0] = 0时表示上一次读访问的正常数据,等于1时表示上次读访问是取反的数据。
有了上述基本概念,我们尝试来构建一个时间复杂度为4N的NDT逻辑,一个Cell的完整测试逻辑为{ r, w*, r* ,w }。那么首先CONFIG1.AC_MOD就要配置为0x5,
TC3xx MTU概述w5.jpg
针对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来查询出错的位置,如下:
TC3xx MTU概述w6.jpg

4.小结

通过上面简单描述,我们了解了TC3xx的MTU基本功能,进一步打通MTU->SMU的功能逻辑闭环,同时也明白了MTU应该放在SafetyLib这个维度。MTU承载的MBIST功能不仅是对功能安全要求的具体硬件机制实现,也是对AUTOSAR中RamTest模块的需求承接。


往期回顾:

1.汽车标定精选
汽车标定技术--标定概念详解
汽车标定技术--Bypass的前世今生
万字长文:汽车标定技术--XCP概述

2.AUTOSAR精选
AUTOSAR CryptoStack--CSM Job夹带了哪些私货
AUTOSAR 诊断栈分析(一)
AUTOSAR OS概述(一)

3.汽车网络安全精选
汽车信息安全--MCU启动常用密码算法
汽车网络安全方案需求分析
汽车信息安全--常见车规MCU安全启动方案
车载信息安全场景概述

4.汽车功能安全精选

5.汽车虚拟化精选

    汽车ECU虚拟化技术初探(一)

    汽车ECU虚拟化技术(二)--U2A虚拟化功能

6.杂七杂八

    Flash模拟EEPROM原理浅析

    征途漫漫:汽车MCU的国产替代往事

    车规MCU应用场景及国产替代进展

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 1-2-2025 07:49 , Processed in 0.261061 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.