【入门-05】存储空间

编辑:CrazyRabbit
日期:2022年7月28日

本文是英飞凌官方培训的笔记摘录,入门篇第五节课。

1. 总述

下图是TC37x的架构框图,包含有3个TriCore核,每一个都包含一个DMI和PMI,分别是CPU的取数据、取指令接口。在DMI和PMI里分别有自己的DSPR和PSPR(Scratch-Pad Ram,集成在CPU上的高速RAM)。

对于SPR,查到的一些介绍(不保证正确):内核嵌入一块耦合紧密的SRAM,起到类似通用寄存器的作用。51的4组通用寄存器,既可以用作寄存器,又可以用作内部RAM,就是典型的Scratch-Pad。

除了CPU自身的内嵌RAM外,在SRI总线上还会有一块LMU(Local Memory Unit),LMU主要包含三部分:LMURAM、TRAM、EMEM。
【入门-05】存储空间_第1张图片
TC3xx系列的亮点:
【入门-05】存储空间_第2张图片

2. 内存布置

下图展示了TC3xx的内存布置:
【入门-05】存储空间_第3张图片

  • PFLASH和DFLASH:非易失性内存,用于存一些代码和数据
  • UCB(User Configuration Blocks):用户可配置的内存块(在DFLASH中),可以配置芯片启动方式,是否对FLASH进行保护等
  • BootROM:英飞凌自用,不可更改,BootROM会根据UCB进行相关芯片配置,上电后跑的第一段代码就在这里
  • PSPR/DSPR(Program&Data Scratch-Pad RAM):允许CPU访问数据、指令比访问PFLASH、DFLASH更快
  • PCACHE/DCACHE:高速RAM

初次使用AURIX的人员容易混淆,比如:代码地址段在0x8…和0xA…,0x8带CACHE,0xA不带CACHE。实际上他物理上是同一个地方,只是访问0x8的时候,他先把指令从这个地方拷贝到PCACHE中,CPU从PCACHE中找对应的指令,一次拷贝256个字节;如果是DCACHE的话,也类似,先把数据从被CACHE的地方拷贝到DCACHE,然后CPU去DCACHE Area取数据。
在多核使用中,需要注意,如果有一些共享变量,要被多个核访问。如果用CACHE的访问方式,会出现:在原始的地方(原核)数据已经被修改,而对于该核可能是从自己的CACHE中读取数据,会产生不一致。

  • LMU(Local Manage Unit):注意分为三个部分,LMURAM、TRAM(一般给调试器工具使用,如TRACE32)和EMEM(用于标定或深度Trace)。

【入门-05】存储空间_第4张图片

  • 将4GB的可寻址范围分为了16个Segments,每个Segment是256MB
  • 每个Segment的高4分,代表的是Segment Number
  • 每个Segment都被允许访问一个specific area,无Cache或带Cache
  • 每个Segment的用处见图片右侧

3. 多样的取指模式

右边的图片分为两部分:一个是Data Access,一个是Code Fetch。

所谓Data Access,CPU0可以通过DMI从自己的DSPR0、PSPR0,其他CPU的DSPR1、PSPR1取数据,只是去其他CPU需要经过SRI总线,经过SRI总线就会有竞争。所以开发人员在做代码的变量分配的时候,尽量将其放在自己CPU的SPR中,访问效率会更高。
下面的Code Fetch,CPU0可以通过PMI去访问DSPR0、PSPR0、DSPR1、PSPR1里面的指令;同样,访问其他CPU需要经过SRI总线,会跟其他CPU或DMA做竞争,造成额外的延迟。在一些应用里,会将一些算法从FLASH拷贝到PSPR0中,这样对于CPU0的访问会很快。

4. 系统集成

  • 前面提到的Segment,要么是外设的地址空间,要么是cached/non-cached的内存;
  • 在TriCore架构下,不同的Segment有不同的访问characteristics(特征),比如访问属性,访问权限等,都可以做一些配置;
  • 访问Segment以外的地址空间,会产生一个Trap。

【入门-05】存储空间_第5张图片
【入门-05】存储空间_第6张图片

你可能感兴趣的:(嵌入式开发,英飞凌,AURIX)