当前位置: 首页 > news >正文

Armv8-R内存模型详解

目录

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

http://www.lryc.cn/news/400735.html

相关文章:

  • Python面经
  • 海外ASO:iOS与谷歌优化的相同点和区别
  • 【C++题解】1168. 歌唱比赛评分
  • 鸿蒙开发工程师面试-架构篇
  • 【Redis】持久化
  • 港股指数实时行情API接口
  • Qt5开发实战_图形_QPen
  • linux进程周边知识——内核对硬件的管理——计算机世界的管理
  • 同声传译语音合成接口,分段预合成实现丝滑的衔接效果
  • 数据结构——单链表详解(超详细)(1)
  • 在 Linux 上使用 lspci 命令查看 PCI 总线硬件设备信息
  • python数据可视化(6)——绘制散点图
  • 【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)
  • Mysql-错误处理: Found option without preceding group in config file
  • [iOS]内存分区
  • sklearn基础教程:掌握机器学习入门的钥匙
  • 【unity实战】使用unity制作一个红点系统
  • 开发指南046-机构树控件
  • SpringBatch文件读写ItemWriter,ItemReader使用详解
  • 如何评估AI模型:评估指标的分类、方法及案例解析
  • 程序员学CFA——经济学(七)
  • imx335帧率改到10fps的方法
  • Large Language Model系列之二:Transformers和预训练语言模型
  • java后端项目启动失败,解决端口被占用问题
  • PostgreSQL安装/卸载(CentOS、Windows)
  • OutOfMemoryError异常OOM排查
  • 【Python】Arcpy将excel点生成shp文件
  • torch之从.datasets.CIFAR10解压出训练与测试图片 (附带网盘链接)
  • 什么ISP?什么是IAP?
  • 外卖霸王餐系统怎么快速盈利赚钱?