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.mzph.cn/diannao/46779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录训练营Day 72|拓扑排序精讲、dijkstra(朴素版)精讲

1.拓扑排序精讲 代码随想录 题目&#xff1a;117. 软件构建 代码&#xff1a; #include <iostream> #include <vector> #include <queue> #include <unordered_map> using namespace std; int main(){// 输入int n,m,s,t;cin >> n >> m;u…

AI Earth——MuSyQ 30m/10天叶片叶绿素含量产品(中国)应用 app

应用介绍 ​​​​​​​30m/10天合成的叶片叶绿素含量产品是空天院多源协同定量遥感产品生产系统((Multi-source data Synergized Quantitative remote sensing production system,MuSyQ))产品之一。 叶片叶绿素含量(Chlleaf)是植被遥感监测中最重要的参数之一,目前国…

记录我使用poi库,中文却无法显示的问题

目录 前言&#xff1a; 正片&#xff1a; 修改word的编码格式 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 第五步&#xff1a; 修改idea编码格式 前言&#xff1a; &#x1f388;&#x1f388;&#x1f388;这是昨天晚上Blue遇到的…

WooCommerce网站加速指南:入门级方法

在如今快节奏的网络时代&#xff0c;网站加载速度直接影响用户体验和销售转化率。对于WooCommerce网站来说&#xff0c;这一点尤为重要。那么&#xff0c;如何让你的网站跑得更快呢&#xff1f;下面&#xff0c;我将分享一些入门级的方法&#xff0c;帮助你显著提升WooCommerce…

mmc-utils 的 MMC 测试工具

MMC 工具介绍 有一个名为 mmc-utils 的 MMC 测试工具&#xff0c;由 Ulf Hansson 维护&#xff0c;您可以在以下公共 git 存储库中找到它&#xff1a; mmc/mmc-utils.git - Unnamed repository; edit this file description to name the repository. 功能 mmc-utils 工具可以…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区&#xff08;一&#xff09;&#xff1a;程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

物联网平台定义和架构

物联网平台是一个集成了设备接入、设备管理、数据安全通信、消息订阅、消息转发和数据服务等能力的一体化平台。它支持海量设备的连接&#xff0c;采集设备数据上云&#xff0c;同时提供云端API&#xff0c;使服务端可以通过云端SDK调用云端API将指令下发至设备端&#xff0c;实…

手机和电脑通过TCP传输(一)

一.工具 手机端&#xff1a;网络调试精灵 电脑端&#xff1a;野火网络调试助手 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信…

【云原生网络CNI】容器网络接口CNI的使用和管理

云原生网络CNI 容器网络接口CNI的使用和管理 1. CNI简介 什么是CNI 容器网络接口&#xff08;CNI, Container Network Interface&#xff09;是一个为容器提供网络连接的标准。它定义了一组规范&#xff0c;描述了容器如何通过插件与不同的网络实现进行交互。CNI的目标是简…

【DevOps文化与实践】DevOps的基本原则和实施策略

DevOps文化与实践 DevOps的基本原则和实施策略 大纲 DevOps简介 什么是DevOpsDevOps的起源和发展 DevOps的基本原则 文化与协作持续集成与持续交付基础设施即代码自动化测试监控与反馈 实施DevOps的策略 文化转变工具选择与整合持续集成/持续交付流水线自动化和基础设施管理…

大气热力学(10)——条件性不稳定

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记&#xff0c;现转化为电子版本以作存档。相较于手写笔记&#xff0c;电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 10.1 为什么需要关注条件性不稳定&#xff1f;10.2 不稳定能量10…

使用自制Qt工具配合mitmproxy进行网络调试

在软件开发和网络调试过程中&#xff0c;抓包工具是不可或缺的。传统的抓包工具如Fiddler或Charles Proxy通常需要设置系统代理&#xff0c;这会抓到其他应用程序的网络连接&#xff0c;需要设置繁琐的过滤&#xff0c;导致不必要的干扰。为了解决这个问题&#xff0c;我们可以…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中&#xff0c;添加工具启动配置&#xff0c;配置五分钟内生效。 Path&#xff1a;设置移交目录路径&#xff0c;IPG 服务器会把收集完成的…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

Java 日期时间

Java 提供了丰富的日期时间处理功能&#xff0c;主要集中在 java.time 包下。java.time 包是从 Java 8 开始引入的&#xff0c;设计用于解决旧的 java.util.Date 和 java.util.Calendar 类存在的问题&#xff0c;提供了更加清晰、易用和线程安全的 API。 ### 主要类和接口 1.…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

Flask包算法服务

常规包算法服务,就是比较简单,直接起一个fastapi就可以了。 import time import asyncio from aidraw import engineer_log as eng from fastapi import FastAPI from pydantic import BaseModel from typing import Optional from aidraw.ardraw import run_aidraw_api# 起…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法&#xff0c;全称Floyd-Warshall算法&#xff0c;是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…

一文读懂Java并发编程基础知识

什么是并发&#xff1f; 并发是指在某个时间段内&#xff0c;多任务交替处理的能力。比如说&#xff0c;你有一台单核心CPU电脑&#xff0c;注意必须是以单核心来理解下面的例子才是正确的。你可以利用电脑边听音乐&#xff0c;边写PPT&#xff0c;还能随时斗上一盘地主。这些…