Armv8-R内存模型详解
创始人
2024-12-29 10:37:08
0

目录

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 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具体是如何分配的。

相关内容

热门资讯

3分钟辅助!微信上的广东雀神麻... 3分钟辅助!微信上的广东雀神麻将有挂吗,wepoKE真是是真的有挂,微扑克教程(有挂辅助);1、这是...
1分钟科普!天天贵阳麻将神器通... 您好,天天贵阳麻将神器通用版这款游戏可以开挂的,确实是有挂的,需要了解加微【757446909】很多...
四分钟攻略!白金岛跑的快辅助器... 四分钟攻略!白金岛跑的快辅助器,wepoke竟然是真的有挂,wepoke教程(有挂脚本)1、白金岛跑...
9分钟辅助!微信小程序边锋斗地... 9分钟辅助!微信小程序边锋斗地主开黑软件,aapoker原来存在有挂,详细教程(有挂解说)1、微信小...
5分钟辅助!家家乐牌吧肃宁填坑... 5分钟辅助!家家乐牌吧肃宁填坑有挂吗,pokermastersteam都是存在有挂,科技教程(有挂解...
2分钟科普!多乐跑得快,Wep... 2分钟科普!多乐跑得快,WepokE真是有挂,切实教程(有挂工具)1、操作简单,无需注册,只需要使用...
四分钟辅助!同城比鸡取胜,We... 四分钟辅助!同城比鸡取胜,WePoKer一直真的有挂,AI教程(有挂透明)1、同城比鸡取胜ai辅助优...
6分钟了解!拱趴十三水调胜率软... 6分钟了解!拱趴十三水调胜率软件,wepoke果然存在有挂,揭秘教程(有挂技巧);1、下载好拱趴十三...
5分钟科普!欢乐麻将手机麻将辅... 5分钟科普!欢乐麻将手机麻将辅牌器,aAPOKER原来真的有挂,普及教程(有挂辅助挂);1、下载好欢...
4分钟了解!多多来了有挂吗,W... 4分钟了解!多多来了有挂吗,Wpk好像有挂,新2025版(有挂揭秘)多多来了有挂吗是一种具有地方特色...