Armv8-R内存模型详解

目录

1.内存模型的必要性

2.Armv8-R内存模型分类

[2.1 Normal memory](#2.1 Normal memory)

[2.2 Device Memory](#2.2 Device Memory)

[2.2.1 Gathering](#2.2.1 Gathering)

[2.2.2 Reordering](#2.2.2 Reordering)

[2.2.3 Early Write Acknowledgement](#2.2.3 Early Write Acknowledgement)

3.小结


大家好,今天是悲伤的肌肉。

在调研区域控制器芯片时,发现了S32Z、Stellar SR6P7等芯片均采用的是Cortex-R52\R52+内核,该内核架构为Armv8-R;

在阅读内核手册时对内存模型里出现很多之前没有接触过的概念感到困惑,例如Normal memory\Device Memory、Device_nGnRnE;因此简单总结下,以备不时之需。

1.内存模型的必要性

首先我认为比较关键的是搞明白内存模型存在的必要性。

以TC3xx为例,我们关注比较多的就是cacheable和non-cacheable的memory地址,涉及到外设模块操作就直接在地址映射表里找基地址,如下图:

从这个角度来看,内存模型其实就是定义了memory是如何被寻址,定义了memory自身的一些行为。例如,TC3xx定义了A和8的Segment为Code存放区,那我们设计ld的时候自然会以此为基础,同时由于是Code区,它的属性就为ReadOnly。整体设计思路如下图:

这些属性不止是告诉我们,同时还会告诉处理器应该如何处理不同地址的访问。把这个思路迁移到Armv8架构里,会发现万变不离其宗, 同样需要指定memory不同地址的属性,这样CPU才能单独执行访问。

2.Armv8-R内存模型分类

在Armv8-R里,内存模型被分成了两类:Normal memory和Device Memory。

2.1 Normal memory

Normal Memory就是我们通常意义上讲的RAM、ROM、Flash等等;

所谓Normal,就是对于该地址的访问不会造成副作用,例如重复读取Flash某个位置的数据,只会返回数据,并不会造成数据修改。

因此,为了提高运行性能,CPU可以针对normal memory进行一些优化操作,比如执行预测访问:在软件发起请求操作之前,CPU就已经预取了normal memory的Data、Code,以加快访问速度;再比如访问的再排序,以生成更高效率的总线访问。

Normal Memoy可以增加Cache的属性,以加快系统运行速率、减少功耗;但是Cache的属性(例如Write-back\Write-Through、Size)会对使用者造成一些误解,因此需要谨慎使用。

2.2 Device Memory

在Armv8里,Device Memory用来描述外设;这类型的memory与刚才聊到的Normal memory最大区别在于:对Device Memory的访问可能会产生副作用。

例如,我们读取一个FIFO通常会导致内部指针指向下一块数据,访问FIFO的次数就尤为重要,所以告诉CPU当前Device Memory的属性非常关键。

首先,Cacheable肯定是不可接受的,简单例子,我们访问寄存器肯定是直接访问了,不需要cache;

其次,数据预测访问理论上应该是不允许的,以上面的读取FIFO为例,软件肯定是希望获取到完整数据;

最后,Device Memory不应该进行取指运行,值得注意的是,如果memory是Device属性,它仅仅只是针对数据预测访问,只有把其设置Not executable才能预防指令预测访问。

接下来就是我一直比较困惑的Device子属性--GRE。

2.2.1 Gathering

在Armv8手册里详细描述了Gathering的用法:

  • 对同一内存位置的相同类型的多个内存访问(读或写)将合并到单个transaction中;
  • 同一类型的对个内存访问到不同内存位置,将在一个interconnect里合并成一个transaction;

震惊,完全不知道在说什么。后来多方询问,可以从汇编角度进行看,如下图:

在Gathering属性加持加,把r1的值存储到r4所指定地址,并在r4 = r4所指地址+4,这四个操作可以合并为一次传输给到目标memory,从而减少传输过程中的时间损耗;这种感觉就很像诊断里流控+连续帧的用法。

2.2.2 Reordering

Reordering可以重新对传输事务进行排序,这就和normal memory的reorder比较类似,目的是为了生成更高效率的访问传输。

2.2.3 Early Write Acknowledgement

当Device配置该属性后,就意味着Core向外设发起的写访问,可以有中间buffer进行响应,如下图所示:

当Device没有该属性时,只能由外设进行写确认的response。

我们看到的nGnRnE,其实就是not-Gathering、not-Reordering、not-Early。

因此,Device Memory的属性可有如下配置:

  • Device_GRE:允许gathering, re-ordering, and early write acknowledgement;
  • Device_nGnRnE:不允许gathering, re-ordering, and early write acknowledgement;
  • Device_nGnRE:不允许gathering, re-ordering,允许early write acknowledgement
  • ......

3.小结

经上面简单总结,我们了解到了在Armv8架构下内存模型分类:Normal和Device;针对Device的子属性包含了gathering, re-ordering和early write acknowledgement,以及对应限制。后续我们继续找一颗R52内核MCU来看看Normal memory和Device memory具体是如何分配的。

相关推荐
多看多敲多思考19 小时前
华润微CS32ME10 MCU使用教程(2)---CS32ME10之UART串口模块使用
stm32·单片机·嵌入式硬件·mcu
lzj_pxxw21 小时前
W25Q64存储芯片 软件设计刚需常识
stm32·单片机·嵌入式硬件·mcu·学习
电子科技圈2 天前
芯科科技在蓝牙亚洲大会展示汽车与边缘AI前沿蓝牙创新技术, 解锁车用、家居、健康及工商业等应用场景
人工智能·科技·嵌入式硬件·mcu·物联网·网络安全·汽车
来生硬件工程师2 天前
【程序库】 MutiButton 按键库
c语言·笔记·stm32·单片机·mcu·嵌入式实时数据库
多看多敲多思考2 天前
华润微CS32ME10 MCU使用教程(1)---CS32ME10之GPIO使用
c语言·stm32·单片机·嵌入式硬件·mcu
国产芯片设计3 天前
小家电驱动开发实战:远乐YL1628在电饭煲显示面板的应用与调试
单片机·嵌入式硬件·mcu·51单片机·硬件工程
国产芯片设计3 天前
DIY实战|0.8寸WiFi自动授时电子钟,国产数码管驱动芯片方案分享
stm32·单片机·mcu·51单片机·硬件工程
嵌入式的飞鱼5 天前
SD NAND vs eMMC:嵌入式存储方案怎么选?
嵌入式硬件·mcu·sd nand
[J] 一坚6 天前
嵌入式高手C
c语言·开发语言·stm32·单片机·mcu·51单片机·iot
lee_curry6 天前
jvm中的内存模型
java·jvm·内存模型