做网站能赚流量钱吗,软件开发流程模板,金蝶网站建设公司案例,社交网站图片展示目录
1.内存模型的必要性
2.Armv8-R内存模型分类
2.1 Normal memory
2.2 Device Memory
2.2.1 Gathering
2.2.2 Reordering
2.2.3 Early Write Acknowledgement
3.小结 大家好#xff0c;今天是悲伤的肌肉。
在调研区域控制器芯片时#xff0c;发现了S32Z、Stellar …目录
1.内存模型的必要性
2.Armv8-R内存模型分类
2.1 Normal memory
2.2 Device Memory
2.2.1 Gathering
2.2.2 Reordering
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 acknowledgementDevice_nGnRnE不允许gathering, re-ordering, and early write acknowledgementDevice_nGnRE不允许gathering, re-ordering允许early write acknowledgement...... 3.小结
经上面简单总结我们了解到了在Armv8架构下内存模型分类Normal和Device针对Device的子属性包含了gathering, re-ordering和early write acknowledgement以及对应限制。后续我们继续找一颗R52内核MCU来看看Normal memory和Device memory具体是如何分配的。