[architecture]-ARMV8的一些总结-一篇就够了_arm v8架构参考手册-程序员宅基地

技术标签: aarch64  armv8  risc  armv9  ARM  基础  嵌入式  

快速链接:
.
个人博客笔记导读目录(全部)

在这里插入图片描述

1、ARM的一些概念
(1)、PE - processing element

ARM体系结构定义了抽象机器的行为,称为处理元素(processing element),通常缩写为PE。与ARM体系结构兼容的实现必须符合处理元素所描述的行为。

(2)、RISC架构

ARM架构是一个精简指令集计算机(RISC)架构,具有以下RISC架构特征:

  • 一个大的统一寄存器文件。
  • 一种加载/存储架构,其中数据处理操作只对寄存器内容进行操作,而不是直接对内存内容进行操作。
    简单的寻址模式,所有的加载/存储地址仅由寄存器内容和指令字段决定。
(3)、AArch64和AArch32概念

ARMv8体系结构的一个重要特性是向后兼容,并且可以在各种标准和更专门的用例中自由地进行优化实现。ARMv8架构支持:

  • A 64-bit Execution state, AArch64.
  • A 32-bit Execution state, AArch32, 这与以前版本的ARM架构兼容

通用名AArch64和AArch32描述64位和32位执行状态:

  • AArch64是64位执行状态,这意味着地址保存在64位寄存器中,基本指令集中的指令可以使用64位寄存器进行处理。AArch64状态支持A64指令集。
  • AArch32是32位执行状态,这意味着地址保存在32位寄存器中,基本指令集中的指令使用32位寄存器进行处理。AArch32状态支持T32和A32指令集。
(4)、ARM的A/R/M系列

ARM定义了三个架构概要:

  • A:Application架构,支持基于内存管理的虚拟内存系统体系结构(VMSA),支持A64、A32和T32指令集
  • R:Real-time架构,支持基于内存保护的受保护内存系统架构(PMSA),支持A32和T32指令集。
  • M:Microcontroller架构,支持T32指令集的变体
(5)、AArch64特点

AArch64,64位执行状态:

  • 提供31个64位通用寄存器,其中X30用作过程链接寄存器。
  • 提供64位程序计数器(PC)、堆栈指针(SPs)和异常链接寄存器(ELRs)。
  • 为SIMD向量和标量浮点支持提供32个128位寄存器。
  • 提供单个指令集A64
  • 定义了ARMv8异常模型,有四个异常级别,EL0 - EL3,提供了一个执行特权层次结构,
  • 提供对64位虚拟寻址的支持。
  • 定义许多包含PE状态的进程状态(PSTATE)元素。A64指令集包括直接操作各种PSTATE元素的指令
  • 使用表示可以访问寄存器的最低异常级别的后缀来命名每个系统寄存器。
(6)、AArch32特点

AArch32,32位执行状态:

  • 提供13个32位通用寄存器,以及一个32位PC、SP和link寄存器(LR)。LR同时用作ELR和过程链接寄存器。其中一些寄存器具有多个存储实例,用于不同的PE模式。
  • 为从Hyp模式返回的异常提供一个ELR。
  • 为高级SIMD向量和标量浮点支持提供32个64位寄存器。
  • 提供两个指令集,A32和T32。
  • 支持基于PE模式的ARMv7-A异常模型,并将其映射到基于异常级别的ARMv8异常模型。
  • 提供对32位虚拟寻址的支持。
  • 定义许多包含PE状态的进程状态(PSTATE)元素。A32和T32指令集包括直接操作各种PSTATE元素的指令,以及使用应用程序状态寄存器(APSR)或当前程序状态寄存器(CPSR)访问PSTATE的指令。
(7)、AArch32和AArch64的切换

在AArch64和AArch32执行状态之间转移控制称为互处理(interprocessing)。PE只能在异常级别发生变化时在执行状态之间移动,并且必须遵守文中给出的规则。这意味着不同的软件层,例如应用程序、操作系统内核和管理程序,在不同的异常级别执行,可以在不同的执行状态中执行。

(8)、A64/A32/T32

在ARMv8中,可能的指令集取决于执行状态:

  • AArch64状态只支持一个名为A64的指令集。这是一个使用32位指令编码的固定长度指令集。
  • AArch32状态支持以下指令集:
    A32,这是一个使用32位指令编码的固定长度指令集。
    T32,这是一个可变长度的指令集,同时使用16位和32位指令编码。在以前的文档中,这些指令集被称为ARM和Thumb指令集。ARMv8扩展了这些指令集。在AArch32状态中,指令集状态决定PE执行的指令集。
(9)、 System registers

系统寄存器提供了体系结构特性的控制和状态信息, The System registers 包含:

  • General system control registers.
  • Debug registers.
  • Generic Timer registers.
  • Optionally, Performance Monitor registers.
  • Optionally, the Activity Monitors registers.
  • 可选地,在其他ARM架构规范中定义的一组或多组寄存器:
    跟踪系统寄存器,如嵌入式跟踪宏单元体系结构规范中定义的,ETMv4。
    可伸缩向量扩展系统寄存器(Scalable Vector Extension System registers),定义在ARM架构参考手册补充,可伸缩向量扩展(SVE),用于ARMv8-A。
    统计分析扩展系统寄存器,定义在ARM架构参考手册的补充,统计分析的扩展,为ARMv8-A。
    通用中断控制器(GIC)系统寄存器,
  • RAS扩展系统寄存器,在ARM可靠性(Reliability)、可用性(Availability)和可服务性(Serviceability)(RAS)中定义ARMv8规范,用于ARMv8- a架构配置文件。RAS扩展是对ARMv8.2体系结构的强制扩展,也是对ARMv8.0和ARMv8.1体系结构的可选扩展。
(10)、ARMv8 architecture extensions

ARMv8 architecture extensions

  • ARMv8加密扩展

  • 可靠性、可用性和可服务性(RAS)扩展

  • 事件监视器

  • IVIPT扩展

  • 基于PC示例的概要分析扩展。

  • 统计分析扩展(SPE) SPE是ARMv8.2的一个可选扩展。也就是说,SPE需要实现ARMv8.2。

  • 可伸缩向量扩展(SVE) SVE是ARMv8.2的可选扩展。也就是说,SVE需要实现ARMv8.2。

  • 活动监视器扩展(AMU) AMU是ARMv8.4的可选扩展。也就是说,AMU需要实施ARMv8.4。

  • 内存分区和监视扩展(MPAM) MPAM是ARMv8.2的一个可选扩展。也就是说,MPAM需要实现ARMv8.2。

(11)、ARM的crypto扩展

ARMv8加密扩展

  • 包括AESD和AESE指令的ARMv8.0-AES。
  • 包括SHA1和SHA256指令。
2、ARMV8的ELx等级切换

在armv8中,有EL0、EL1、EL2、EL3四个权限级别.
低级别像高级别切换是通过触发异常来进行的。例如:
(1)、在EL0时调用svc指令,触发一个同步异常,cpu则会陷入EL1;
(2)、在EL0时来了一个IRQ或FIQ,会触发一个异步异常,cpu则会陷入EL1或EL2或EL3(根据SCR寄存器中中断的配置来决定);
高级别向低级别切换是通过修改PSTATE寄存器

在这里插入图片描述

3、ARMV8-aarch64寄存器总结
1、通用寄存器

ARMv8有31个通用寄存器X0-X30, 还有SP、PC、XZR等寄存器
下面详细介绍写这些通用寄存器(general-purpose registers):

  • (1)、X0-X7 Argument registers
    用于参数传递

  • (2)、X9-X15 Caller-saved temporary registers
    在子函数中使用这些寄存器时,直接使用即可, 无需save/restore. 在汇编代码中x9-x15出现的频率极低

  • (3)、X19-X29 Callee-saved registers (X19-X29)
    在callee子函数中使用这些寄存器时,需要先save这些寄存器,在退出子函数时再resotre

  • (4)、X8, X16-X18, X29, X30 Registers with a special purpose
    这些都是特殊用途的寄存器

在这里插入图片描述

2、系统寄存器

在这里插入图片描述

  • ELR_ELx 异常链接寄存器
    该寄存器只有ELR_EL1 ELR_EL2 ELR_EL3, 没用ELR_EL0. 因为异常不会routing(target)到EL0.
    例如在user mode时触发了一个target到EL1的irq异常,那么会将PC指针保持到ELR_EL1中,然后跳转到EL1的异常向量表中;
    user mode时触发了一个target到EL3的irq异常,,那么会将PC指针保持到ELR_EL3中,然后跳转到EL3的异常向量表中;

  • ESR_ELx (exception Syndrome register )异常综合寄存器/异常状态寄存器 : 反应异常的原因等信息
    该寄存器只有ELR_EL1 ELR_EL2 ELR_EL3, 没用ELR_EL0.
    例如:s 16bit指令的异常、32bit指令的异常、simd浮点运算的异常、MSR/MRS的异常…

  • FAR_ELx (Fault Address Register) 错误的地址寄存器
    当取指令或取数据时,PC对齐错误或者watchpoint异常(PC alignment fault and Watchpoint exceptions),会将错误的地址填入到该寄存器中;

  • MAIR_EL1, (Memory Attribute Indirection Register) 内存属性寄存器
    配置内存的属性,如Tagged Normal Memory、normal memory、device memory
    如果是normal memory,那么inner和Outer的配置是Write-Through /Write-back/write Allocate/write non-Allocate等

  • SCTLR_EL1, (System Control Register) 系统控制寄存器
    如d-cache/i-cache/mmu的enable和disable

4、AXI/APB/AHB/ACE的简单介绍
(1)、AMBA概述

AMBA (Advanced Microcontroller Bus Architecture) 高级处理器总线架构
(1)、AXI (Advanced eXtensible Interface) 高级可拓展接口
(2)、APB (Advanced Peripheral Bus) 高级外围总线
(3)、AHB (Advanced High-performance Bus) 高级高性能总线
(4)、ASB (Advanced System Bus) 高级系统总线

(2)、AXI4分类

AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分
(1)、AXI4:主要面向高性能地址映射通信的需求;
(2)、AXI4-Lite:是一个简单地吞吐量地址映射性通信总线;
(3)、AXI4-Stream:面向高速流数据传输;
AXI4总线分为主、从两端,两者间可以连续的进行通信

(3)、ACE-lite

ACE接口是对AXI4的扩展,里面增加了许多cache相关的接口

5、AMRV7和ARMV8中的一些细微差异

思考

  • 什么是协处理器?ARMV8-aarch64下有没有协处理器?
  • MRS/MSR是什么指令,在aarch64架构下没有MCR/MRC指令?
  • 什么是SError? 什么是prefetch abort,undefined instruction?
  • LR和ELR的区别?
  • 在aarch32中, R15是PC,那么在aarch64中X30为什么不是PC?
  • MV PC ,#3 这样的指令是否可以
  • 在aarch32中, R13是SP,那么在aarch64为什么没有通用寄存器作为SP?
  • armv7和armv8的ARM NEON的区别?
  • PSTATE和CPSR的区别?
  • ARMv8上是否能接gicv2,armv7上是否能接gicv3?
(1)、svc和swi的区别

svc和swi都是supervisor call指令,都是系统调用.

  • 再armv7之前,用的都是swi,触发异步异常,进入vector_swi异常向量表;
  • 在armv8-arch64架构下,抛弃了swi,改用了svc,触发的是同步异常,进入同步异常向量表el1_sync
(2)、swi、SGI、softirq的区别?

【问题】swi叫软中断、SGI也叫软中断、linux kernel中还有一个softirq也叫软中断,他们三个有什么区别呢?
【回答】:

  • swi :software irq,是ARM的一个软件中断指令,产生swi异常;
  • SGI:software generate interrupt,软件产生的中断,是cpu写gic寄存器,gic发出的一个irq给到cpu
  • softirq: linux kernel自己造的软中断,和硬件无关
(3)、SError和data abort、prefetch abort、undefined instruction的区别

在armv7下使用的是data abort、prefetch abort、undefined instruction,在armv8下使用的是SError.
注:在linux kernel中,armv7体系下均已实现data abort、prefetch abort、undefined instruction异常处理函数,在linux kernel的armv8体系下,没有实现SError异常处理


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42135087/article/details/108866654

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue

推荐文章

热门文章

相关标签