初次接触到ARM的时候,我直接被众多的处理器版本、系列搞晕了,查了好多资料才理清。现在在这里总结一下,希望能帮到别人。

1.总体情况

先从ARM的wiki上抄个表过来:

Architecture Family
ARMv1 ARM1
ARMv2 ARM2,ARM3
ARMv3 ARM6,ARM7
ARMv4 StrongARM,ARM7TDMI,ARM9TDMI
ARMv5 ARM7EJ,ARM9E,ARM10E,XScale
ARMv6 ARM11, Cortex-M
ARMv7 Cortex-A,Cortex-M,Cortex-R
ARMv8 -

左侧的一列可以视作是ARM处理器的各个“代”,而右侧则是同一代的各个“家族”(或者说“系列”)。现在基本已是ARMv7的时代,ARMv6及更早的Architecture只在一些低端的设备上能见到了。而ARMv8则是ARM平台的未来时,被设计为64位的架构,显然不是主要面向移动设备的。不过到现在为止ARMv8也只是有一些资料,离真正面世还有一段时间。

现在把重点放在ARMv7,更确切的,是ARMv7中的Cortex-A系列核心上来。Cortex-M系列处理面向嵌入式应用,而Cortex-R系列则面向实时应用,Cortex-A,则面向广大的手机用户。

2.Cortex-A系列的众多核心们

核心 Cortex-A5 Cortex-A7 Cortex-A8 Cortex-A9 Cortex-A15
发布年份 2009年 2011年

2006年

2007年 2011年
核心 1-4核 1-4核

单核

1-4核 最多4核每cluster,每物理核最多2个cluster
流水线

8级(in-order)

8-10级

13级(整点

in-order)

8级(out-of-order)

12级in-order加3-12级out-of-order

硬件虚拟化

L1 Cache 4-64K/4-64K 8-64K/8-64K 16-32K/16-32K 16-64K/16-64K 32K/32K
大物理地址扩展
浮点部件 VFPv4 VFPv4 VFPv3 VFPv3 VFPv4

*发布年份是ARM公布核心的时间(可能不太准确)。

*A15的流水线前12级是in-order的,后面则是out-of-order的多种流水线,级数从3到12不等。A7类似,NEON部件的流水线是10级,整点则是8级。

现在来分析一下各个核心的参数。首先是Cortex-A后面的编号,大体上,这个编号代表该核心的性能,或者说在ARM产品线中的位置。比如A5面向低端应用,编号最小;A15是目前ARMv7性能中性能最高的核心;A7虽然发布晚于A8,而且规格接近,但由于限制了双发带宽,其性能预期是低于A8的。总的来看,A5的定位最低端,取代ARMv7之前的产品;A15最高端,A7性能低于A8,但更加节能,成本也更低;A8/A9则可能被取代,不过目前仍然是主流;A15则是目前为止ARM处理器中规格最高的了。

再看一下较新的核心中几个重要的特性。A7和A15支持硬件虚拟化,以A7的定位来说硬件虚拟化的支持似乎没有太多用武之地,不过对于A15来说则表明A15可能用于传说中的ARM服务器(不过算算时间似乎也没有太多A15发挥的余地,毕竟64位的ARMv8更适合用于服务器)。大物理地址扩展(LPAE)和x86上的PAE相似,允许32位的ARM处理器最大寻址2^40bit的内存(1TB)。这又是一个表明A15可用于服务器的迹象,毕竟4G的寻址空间对现在的服务器来说完全不够用啊。

3.浮点和高级SIMD部件

ARMv7开始使用VFPv3版本的浮点部件,而ARMv7中更新的核心则使用了VFPv4( 见前面表格)。VFPv2则用于ARMv7之前的核心,现在还有一部分低端手机使用这种处理器;而使用VFPv1浮点部件的核心已经基本淘汰掉了。ARM的高级SIMD部件称为NEON,从ARMv7开始出现

ARM浮点部件的一个问题是对很多核心来说是可选的,一些处理器并没有浮点部件。不仅如此,尽管ARMv7的处理器基本都实现了浮点部件,但浮点部件也有多个可选实现,再加上NEON部件也是可选的,最后导致市面上的ARM处理器对浮点/SIMD的支持并不一致。下表列出了主要的VFPv3实现的版本(VPFv4的资料需要补充):

版本 寄存器 其他特性
VFPv3(-D32) 32个64位寄存器,32个32位寄存器  
VFPv3-FP16 同上 半精度扩展(FP16的含义)
VFPv4(-D32) 同上 VFPv4总是实现半精度扩展和Fused Multiply-Add 扩展
VFPv3-D16 16个64位寄存器,32个32位寄存器  
VFPv3-D16-FP16 同上 半精度扩展
VFPv4-D16 同上 同VFPv4

上表中所说的32位寄存器和64位寄存器并不是独立的,前16个64位寄存器每个可以视为2个32位寄存器,同时,两个64位寄存器可以视为一个128位寄存器。下图来自ARM官方文档,展示了32位寄存器和64位寄存器的关系:

对于VFPv3-D16、VFPv3-D16-FP16和VFPv4-D16来说,上图中的D16~D31是不存在的。除了上表中的版本,VFPv3还有单精度版本,只实现了单精度浮点数的运算指令,gcc中称这种版本的VFPv为“vfpv3xd”,相应的,还有vfpv3xd-fp16。不过这种实现的ARM处理比较少见。

NEON部件和浮点部件关系密切,在两者同时存在时,使用的是同一套寄存器。不过,NEON的寄存器数目是固定的,和VFPv3/VFPv-FP16/VFPv4相同。这意味着,NEON不能和VFPv3-D16/VFPv3-D16-FP16这种寄存器阉割版共存。当没有浮点部件时,NEON部件只能进行整点运算。下表是NEON和VFP部件可能的组合:

NEON部件 VFP部件 说明
仅整型 未实现  
整型和单精度浮点 单精度浮点  
整型和单精度浮点 单精度和双精度浮点  
未实现 单精度浮点  
未实现 单精度和双精度浮点  

从上面这个表可以看出,即使VFP部件实现了双精度运算的功能,NEON部件也只能进行单精度运算。不止如此,gcc的手册之处,NEON的浮点运算不完全符合IEEE 754标准,在某些情况下会损失精度,因此即使使用了自动向量化的选项,浮点运算的向量化默认也是关闭的。

依据半精度和Fused Multiply-Ad扩展的实现情况,NEON部件可以分为3种版本:

高级SIMDv1:两者均未实现

高级SIMDv1带半精度扩展:实现了半精度扩展

高级SIMDv2:同时实现了半精度和Fused Multiply-Ad扩展

而NEON半精度和Fused Multiply-Ad扩展的实现情况与VFP部件是相关的。

总结一下VFP和NEON的特点:

1.VFPv3/VFPv4分为根据寄存器情况分为D16和D32两个版本,D16的双精度(64位)寄存器只有16个。

2.D16版本的VFP不能和NEON部件共存。

3.NEON部件单独存在时只能进行整点运算

4.实现了半精度扩展的VFPv3称为FP16版本,如果连Fused Multiply-Ad扩展也实现了,就是VFPv4了。

除了上面所说的,ARMv7处理器还有很多特性。由于我了解的不多,就不多说了

ARM平台处理器简介-ARMv7相关推荐

  1. 1_ARM Cortex-M处理器简介

    文章目录 ARM Cortex-M处理器简介 什么是Cortex-M处理器 Cortex-M3和M4处理器 Cortex-M处理器家族 处理器和微控制器区别 Cortex-M处理器的优势 低功耗 性能 ...

  2. 基于 arm 设计开发工具包的 Arm Cortex-M3 处理器的示例系统级设计(第一章:文件目录AHB组件开发平台)

    设计工具包中文件目录 目录名 目录内容 logical Verilog组件包括AHB-Lite和APB基础组件.外设.APB子系统以及AHB-Lite和APB协议. systems 示例系统的设计文件 ...

  3. 【国产化系列】龙芯平台指令集简介及现有处理器的支持特性

    DATE: 2021.10.27 文章目录 1.转载参考 2.龙芯平台指令集简介 3.编译参数 4.查找热点函数进行代码优化 1.转载参考 龙芯平台指令集简介及现有处理器的支持特性 2.龙芯平台指令集 ...

  4. ARM SIMD NEON 简介 (翻译自 Introducing NEON Development Article)

    目录 NEON简介 SIMD是什么? ARM SIMD 指令集 NEON是什么? NEON架构概览 支持的数据类型 NEON寄存器 NEON指令 NEON开发 汇编器 Intrinsics 自动向量化 ...

  5. 移动平台处理器(不断更新中)

    就目前市场上主流的手机CPU的综合排名为:德州仪器OMAP4460 (华为Ascend D1)>苹果A5(iPhone 4s)>猎户座4210(I9100)>英伟达 Tegra 2& ...

  6. 嵌入式ARM多核处理器并行化方法

    from:http://ee.ofweek.com/2014-11/ART-11001-2808-28902672.html 目前,嵌入式多核处理器已经在嵌入式设备领域得到广泛运用,但嵌人式系统软件开 ...

  7. java7 arm_zynq7000系列移植—JDK1.7 移植到嵌入式ARM平台

    今天无意间搜索到 armv7的硬件相关信息--ARM 浮点运算 硬浮点Hard-float 编译器将代码直接编译成发射给硬件浮点协处理器(浮点运算单元FPU)去执行.FPU通常有一套额外的寄存器来完成 ...

  8. 【华为云技术分享】为什么越来越多企业正在往ARM平台迁移?

    架构变迁 说到CPU架构,我们可能必然会提到CISC(复杂指令集,比如桌面端采用的X86系列)和RISC(精简指令集,比如移动端广泛采用的ARM系列).理论上,RISC 相比于 CISC(Intel ...

  9. MT8516处理器简介—MT8516芯片技术资料解析

    MT8516处理器简介-MT8516芯片技术资料解析 今天分享一下联发科8516型号芯片处理器的基本数据,这里是大概的,只能从部分资料中去部分内容和图片,如果你想要做开发.移植啥的,建议自行下载资料进 ...

最新文章

  1. linux salt命令 -e,linux 下 Salt 命令的疑难杂症
  2. 【转】Android 快捷方式的创建
  3. 简单js特效代码大全_Django 功法大全
  4. python 数值的整数次方
  5. 哪些云计算企业能活下来
  6. java中filereader读取文件_java – 如何使用FileReader逐行读取
  7. 直接用自己服务器做图床可以吗_我花 9 块钱搭了一个“私人图床”
  8. 报错,但不影响运行ERROR: JDWP Unable to get JNI 1.2 environment, jvm-GetEnv() return code = -2...
  9. OLW (Open Live Writer)安装代码高亮插件方法(简明)
  10. ubuntu离线安装依赖
  11. python变量名必须以什么开头_python变量为什么不能以数字开头
  12. 【英语学习】【Level 07】U04 Rest and Relaxation L2 A rest stop with everything
  13. rest framework 权限
  14. 计算机仿真的特点,计算机仿真的基本特点与基本流程.doc
  15. 《数据挖掘——概念与技术》笔记
  16. 【科技论文的写作程序及方法】
  17. pandas数据合并与重塑(pd.concat篇)
  18. 电脑桌面文件不见了怎么恢复?
  19. 【d3dx9_42.dll下载】d3dx9_42.dll如何修复
  20. SYN,ICMP, UDP Flood攻击原理与防护

热门文章

  1. 高速公路二维码定位报警系统
  2. ros系统操纵机器人_机器人操纵的关键点表示
  3. 使用八爪鱼采集器抓取上市公司财报,一次1万条
  4. 51单片机12864坐标轴显示,并实时刷新数proteus实现
  5. Uncaught Error: @electron/remote is disabled for this WebContents
  6. Windows Office 2019 很抱歉,此功能看似已中断,并需要修复
  7. Episode II 计算机病毒概论
  8. C语言中sort函数的用处
  9. rust如何在木板上上传图片_腐蚀rust游戏玩法方式详解
  10. uniapp和vue课程表实现、会议预约实现[表格table相同内容行的合并]