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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/799834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从Centos7升级到Rocky linux 9后,网卡连接显示‘Wired connection 1‘问题解决方法

问题描述 从Centos7升级到Rocky9后, 发现网卡eth0的IP不正确。通过nmcli查看网卡连接,找不到name为eth0的连接,只显示’Wired connection 1’ 查看/etc/NetworkManager/system-connections/,发现找不到网卡配置文件。 原因分析 centos7使…

git取消合并:--hard 或 --merge

第一步:查了git日志 git reflog如下,运行上述命令后,可以看见所有的提交哈希(id) 第二步 查看到上述所有的提交记录后,有如下方法去回退 方法1:--hard 确定上一次提交的哈希值 git reset…

RK3568笔记三十八:DS18B20驱动开发测试

若该文为原创文章,转载请注明原文出处。 DS18B20驱动参考的是讯为电子的单总线驱动第十四期 | 单总线_北京迅为的博客-CSDN博客 博客很详细,具体不描述。 只是记录测试下DS18B20读取温度。 一、介绍 流程基本和按键驱动差不多,主要功能是…

内存RAS技术介绍:内存故障预测

故障预测是内存可靠性、可用性和服务性(RAS)领域中的一个重要方面,旨在提前识别潜在的不可纠正错误(UE),以防止系统崩溃或数据丢失。 4.1 错误日志记录与预测基础 错误一般通过Linux内核模块Mcelog记录到…

Matlab 判断直线上一点

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 判断一个点是否位于一直线上有很多方法,这里使用一种很有趣的坐标:Plucker线坐标,它的定义如下所示: 这个坐标有个很有趣的性质,我们可以使用Plucker坐标矢量构建一个Plucker矩阵: 则它与位于对应线上的齐次点…

鸿蒙语言基础类库:【@system.configuration (应用配置)】

应用配置 说明: 从API Version 7 开始,该接口不再维护,推荐使用新接口[ohos.i18n]和[ohos.intl]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import configurati…

uniapp启动图延时效果,启动图的配置

今天阐述uniapp开发中给启动图做延迟效果,不然启动图太快了,一闪就过去了; 一:修改配置文件:manifest.json "app-plus" : {"splashscreen" : {"alwaysShowBeforeRender" : false,"…

vue学习day09-自定义指令、插槽

29、自定义指令 (1)概念:自己定义的指令,可以封装一些dom操作,扩展额外的功能。 (2)分类: 1)全局注册 2)局部注册 3)示例: 让表…

前端Vue组件化实践:自定义银行卡号格式化组件的探索与应用

在前端开发中,随着业务逻辑的复杂化和应用规模的扩大,传统的一体式开发方式逐渐显露出其局限性。任何微小的改动或新功能的增加都可能牵一发而动全身,导致整体逻辑的修改,进而增加了开发成本和维护难度。为了解决这一问题&#xf…

Java软件设计模式-单例设计模式

目录 1.软件设计模式的概念 2.设计模式分类 2.1 创建型模式 2.2 结构型模式 2.3 行为型模式 3.单例设计模式 3.1 单例模式的结构 3.2 单例模式的实现 3.2.1 饿汉式-方式1(静态变量方式) 3.2.2 懒汉式-方式1(线程不安全) 3.…

数据结构之初始二叉树(2)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:数据结构(Java版) 二叉树的前置知识(概念、性质、、遍历) 通过上篇文章的学习,我们…

STM32第十八课:SPIFlash

目录 需求一、SPI概要二、SPI配置1.开时钟2.配置IO3.配置&使能SPI 三、FLash操作函数1.SPI发送数据2.FLASH写使能3.FLASH等待操作完成4.FLASH页写操作5.FLASH读操作6.FLASH扇区擦除 四、需求实现 需求 通过SPI控制FLash进行数据的保存和删除。 一、SPI概要 在我们使用UA…

oracle控制文件详解以及新增控制文件

文章目录 oracle控制文件1、 控制文件包含的主要信息如下:2、查看目前系统的控制文件信息,主要是查看相关的字典视图 oracle新增控制文件 oracle控制文件 控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据…

(leetcode学习)15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&a…

浅谈全量微调和PEFT高效微调(LoRA)

浅谈全量微调和LoRA微调 全量微调Full Fine-Tuning 全量微调是指在预训练的大型模型基础上调整所有层和参数,‌使其适应特定任务的过程。‌这一过程使用较小的学习率和特定任务的数据进行,‌可以充分利用预训练模型的通用特征 高效微调 高效微调&…

PyQt5图形界面--基础笔记

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QToolTip, QLabel, QLineEdit from PyQt5.QtGui import QIcon, QFont, QPixmap import sys https://www.bitbug.net/ 将图片转换为ico格式, 用来更改打包的文件图标 -F 只产生exe文件, 其他临时文件不产生 -…

深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching

深度学习论文: XFeat: Accelerated Features for Lightweight Image Matching XFeat: Accelerated Features for Lightweight Image Matching PDF:https://arxiv.org/pdf/2404.19174 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概述 本文创新性地推出了…

kubernetes——Istio(三)

一、安全 将单一应用程序分解为微服务可提供各种好处,包括更好的灵活性、 可伸缩性以及服务复用的能力。但是,微服务也有特殊的安全需求: 为了抵御中间人攻击,需要流量加密。为了提供灵活的服务访问控制,需要双向 TL…

大语言模型可以处理图问题吗?

为了探讨大型语言模型(LLM)在处理自然语言描述的图结构问题上的能力,提出了NLGraph基准测试集,包含29,370个涉及不同复杂度的图推理任务。这些任务从简单的连通性和最短路径到复杂的最大流和图神经网络模拟。评估结果显示&#xf…

【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言入门 🌹🌹期待您的关注 🌹🌹 ❀分支与循环语句 📒1.…