ARM V8 SPEC A1.1 ARM V8 架构的简介

news/2025/1/2 11:56:29/

ARM V8 SPEC A1.1 ARM V8 架构的简介

第一节:ARM 架构基本概念
第二节:ARM架构提供的数据类型
第三节:高级SIMD和浮点
第四节:ARM的memory model引言


文章目录

  • ARM V8 SPEC A1.1 ARM V8 架构的简介
  • 前言
  • 第一节:ARM架构基本概念
  • 第二节:ARM架构支持的数据类型
  • 第三节:高级SIMD和浮点
      • (1)SMID支持的指令
      • (2) 浮点的标准和术语
      • (3)ARM标准的浮点输入和输出值
      • (4)Flush to zero
      • (5)NaN handling and default NaN
      • (6)Round to odd mode
  • 第四节 ARM memory model引言
  • 总结


前言

平时做ARM cpu性能分析,国内ARM相关的新资料很少,所以在学习的过程中,将自己的理解记录下,供ARM新人参考


第一节:ARM架构基本概念

arm reference 是对processing element简称(PE)行为的定义, PE可以理解为处理单元,重点是行为的定义,而不是具体设计的定义或者限制,此外也对软件开发者使用ARM PE进行了说明。

此外ARM还有用于debug的架构,trace(追踪)架构,后面章节介绍.
由于ARM架构具有:1,统一的寄存器文件;2.load,store的架构,数据的运算仅在寄存器上进行;3,简单的地址模式,所有的地址来源于寄存器的内容和指令的filed.所以arm架构属于精简指令集。
此外架构还定义了PE和memory的交互行为,其中包括了cache, memory translation。
【关键名字释义】

  1. AArch64: 64-bit execution state; 地址保存在64-bit registers;31 个通用寄存器,X30是程序链接寄存器,提供了64 bit的PC, SP,以及异常链接寄存器,提供了32个128bit的SIMD向量和浮点寄存器;定义了ARM8的异常模型;支持64bit的虚拟地址;定义了一些PSTATE的寄存器来存储PE state;定义了不同级别的系统寄存器;仅支持一个指令集:A64
  2. AArch32: 32-bit execution state; 地址保存在32-bit registers;13个32bit 的通用寄存器;32个64bit的SMID寄存器和浮点寄存器;…etc;支持两个指令集:A32和T32(32和16bit混用的指令编码)
  3. ARM: Application profile(VMSA); Real-time profile(PMSA); Microcontroller profile;
  4. Excution state:执行环境,包括:支持的寄存器位宽,支持的指令集,其中最重要的部分包括:异常模型,VMSA,程序员的模型,其中很重要的一种环境是是执行在AArch64还是32,对于AArch64:
  5. system register: 提供了控制和info;系统寄存器主要包含以下三个部分:1.系统通用控制寄存器;2.debug寄存器;3;时钟寄存器;4.pmr,性能监测寄存器;5.活动检测寄存器;6,trace 寄存器;7,GIC(General interrupt control)系统寄存器
  6. ARM V8 debug :ARM V8支持self-host debug(PE自己产生debug exception) 以及 external debug(debug event 自己产生debug state, PE是被外部控制下产生debug expection;这两者的使用场景不同,前者一般使用在应用后期维护中,后者使用在开发阶段。

第二节:ARM架构支持的数据类型

在这里插入图片描述
此外还支持:
半精度,单精度,双精度,四精度 以及定点数据类型,向量这些数据类型都存储在通用系统寄存器以及SIMD&FP 寄存器(128bit),那如何判断某个时刻某个寄存器的数据宽度,或者说数据类型呢?
通过execution state可以判断:
对于AArch64:
通用寄存器一般作为64bit或者低32bit,SMID和浮点寄存器,四精度仅在SMID中,AArch64支持128Bit,有效位是64还是128取决于A64指令集的
对于AArch32:
通用寄存器支持32bit, 支持向量格式,不支持128bit的四精度

  1. 向量格式:
    SMID&FP的寄存器可以包含1个或多个元素,类型和大小一样。寄存器和数据类型综合起来形成了这个向量元素,这样的向量被看作数组;
    在AArch64的支持三种:
    在这里插入图片描述
    在这里插入图片描述
    对于AArch32:
    在这里插入图片描述
    在这里插入图片描述
    邻近的两个64double word的寄存器可以组成一个四word的寄存器;
  2. 半精度浮点格式
    这里有两种格式一种是IEEE的格式,一种是ARM自定义的格式,其中FPCR.AHP控制AArch64 state, FPSCR.AHP控制AArch32 state.两种state下,16bit的半精度的格式相同都是
    在这里插入图片描述
    在这些值取不同的范围时,在架构上的取值有不同的定义:exponent为5位的二进制,其最大值为11111=0x1F
    当0<expoent<0x1F 时该值为
    在这里插入图片描述
    这种格式下的最小值是:2的14次方 即 expontent 为1expo, S=0 fraction=0 等于6.104*10^-5
    最大值为:在这里插入图片描述
    当exponent为0时,
    在这里插入图片描述
    当exponent = 0x1F时:(为什么?
    在这里插入图片描述
  3. 单精度浮点格式
  4. 双精度浮点格式
  5. BFloat16 floating-point format
  6. FIX-point format
    主要用于浮点和定点间的转换,可以是sign或者unsign …

第三节:高级SIMD和浮点

在AArch32状态下,在SIMD和FP寄存器上运行的SIMD指令被描述为高级SIMD指令,以区别于在32位通用寄存器上运行的基本指令集,A64不提供任何在通用寄存器上运行的SIMD指令,因此,一些AARch64上描述的SIMD即指的是运行在SIMD寄存器和FP寄存器上的SIMD指令。

AArch64AArch32
单精度,双精度仅单精度
当FEAT_FP16配置时,可以有half-precision arithmetic当FEAT_FP16配置时,可以有half-precision arithmetic

对于SIMD浮点计算指令,仍然遵从IEEE754浮点计算的规范:

  • 非标准格式的会被flush to zero
  • 只有默认格式的NaN会被支持
  • 舍入到最近数的模式启用
  • 未限制浮点异常处理用于所有的浮点异常

如何系统支持浮点异常trapping,例如溢出,除零,可以被处理without trapping,这可以应用于SIMD和浮点操作
在AArch64的状态下,以下这些寄存器用于控制浮点计算并返回浮点状态信息:

  • FPCR
    AHP用于控制半精度计算
    DN用于控制NAN
    {FZ,FZ16}用于控制Flush-to-ZERO的行为
    Rmode用于控制Rounding mode
    此外还有其他的异常tarp的控制寄存器field
  • FPSR(浮点状态寄存器)
    累计浮点异常flag,AArch32 浮点异常flags

(1)SMID支持的指令

  • 单个element的load和store,以及向量的多个element
  • 数据处理指令
  • 复数运算
  • 不同精度浮点转换
  • 浮点,定点,以及整数类型
  • 浮点rounding

(2) 浮点的标准和术语

RM round toward Minus Infinity 向负无穷的舍入
RP round toward Plus Infinity 向正无穷的舍入
RZ 向0舍入
RN向最近舍入

(3)ARM标准的浮点输入和输出值

  1. input:
    zeros,Nornalized number,denormalized的数据会被flush到0,NAN,无穷
  2. output:
    zeros,normalized number, 小于最小值的数会被flush to zero,default NaN

(4)Flush to zero

暂不详述

(5)NaN handling and default NaN

暂不详述

(6)Round to odd mode

暂不详述

第四节 ARM memory model引言

ARM memory model 支持以下特性:
1.非对其地址访问产生异常
2.限制不同应用的访问权限
3.将VA转换为PA
4.切换大小端
5.控制访问memory的顺序
6.控制cache 和地址转换的结构
7.多个PE时对共享memory 的访问进行同步和协调
8.用于阻止投机访问的Barriers机制

虚拟地址的空间由AARCH64/32 以及EL0/1共同决定,不同的EL级别是分开控制的。PA(物理地址)是由实际设计决定的。
以下章节讲解了 AArch64的memory model:
B2(The AArch64 Application level model),
D4(The AArch64 System level memmory model),
D5(The AArch64 Virtual memory System Architecture)

总结

ARM spec 第一章主要是一些简介,包括对INT,SMID, FP 以及memory model 的目录式的介绍,可以理解为一本引言


http://www.ppmy.cn/news/295750.html

相关文章

hive创建udf函数流程

1.编写udf函数 引入pom文件 <dependencies> <dependency> <!-- 这个属于额外的jar包 自己按需引用 比如你想搞得函数 里面要连接mysql 这里肯定需要引入mysql的驱动包 我这个包是为了计算字符串的表达式的。 --> <groupId>org.apache.com…

[游戏开发][Unity]Assetbundle加载篇(11)

[游戏开发][Unity]Assetbundle加载篇&#xff08;10&#xff09;

继续:个人微信的自动收款解决(思路)

1. 安装PaddleOCR 2. 手机adb截图 3. PaddleOCR识别截图

超市的收款机的钱箱为什么每次都要弹开

这个问题其实我一直没搞明白。我是刷卡结账&#xff0c; 不涉及现金&#xff0c; 为什么收款机的钱盒还要弹开一次&#xff1f;然后收款员再推回去&#xff1f;这里有什么不可逾越的技术障碍吗&#xff1f;我只能认为这个是收款机制造公司加快机器损耗的办法了。随着以后电子支…

LED背光源运用于小型收款机

各类收款机的背光源型号还是有很大的区别的&#xff0c;有小型取款类型的背光源&#xff0c;也有台式收款的背光源显示屏等&#xff0c;在相较于其他的普遍背光源中&#xff0c;小型收款机背光源产品是现在金雄兴主推的一款产品&#xff0c;技术相当成熟拥有众多同行业案例。采…

嵌入式linux收银机重装系统,收银机重装系统。没有光驱,用U盘怎么装?详细点的。谢了!...

满意答案 _cfj0316 2016.01.24 采纳率&#xff1a;45% 等级&#xff1a;11 已帮助&#xff1a;15413人 你可以按如下方法作启动盘&#xff1a; 1、将U盘格式化为启动盘(USB-ZIP型)。U盘驱动光盘上有安装程序&#xff0c;安装完后在“程序”组下能找到U盘程序项&#xff0c;利…

**工控机 爱宝收银台 专用Win7系统32位纯尽版**

爱宝收银台是由广州市贺氏办公设备有限公司研制&#xff0c;搭载着专用工控windows7系统&#xff0c;此系统对硬件配置不高的机器运行非常流畅&#xff0c;展开到C盘不到10G。 原机提取又重新优化制作&#xff0c;可更好的在目前工控机上运行&#xff0c;杀软检测无毒无风险。…

android好还是windows好,收银机操作系统哪种好?安卓系统与Windows系统区别?

POS收银机从结构上来讲&#xff0c;本质就是一台PC机加上其他的外围设备&#xff0c;收银机的PC机我们称之为主机&#xff0c;内部配置跟普通的PC一样&#xff0c;CPU、硬盘、主板、内存一样也不能少&#xff0c;当然也少不了PC赖以运行的操作系统了。那么&#xff0c;POS收银机…