1. ARM公司简介
ARM
(Advanced RISC Machines
)有三种
含义:它是一个公司的名称
、它是一类微处理器的通称
、它是一种技术的名称
。
ARM 公司
是微处理器行业的一家知名企业,它是知识产权供应商,设计基于ARM体系的处理器
;公司并不生产芯片
,也不出售芯片
,它转让设计方案给半导体厂商
,由半导体厂商生产soc,并销售,同时提供一些其他设计服务,比如物理IP,图形内核和开发工具的设计。
2. ARM指令集
2.1 指令集的概念
- 处理器能够识别并执行的
指令集合
; - 每一条指令可处理一个简单或复杂操作(
加
、加乘
…);每一条指令对应一条或几条汇编指令
。
2.2 指令集常见分类
复杂指令集(CISC)
:包含处理复杂操作的特定指令,指令长度不固定
,执行需要多个周期
。
精简指令集(RISC)
:指令简单而有效,格式和长度通常是固定的
,大多数指令在一个周期
内可以执行完毕。ARM的内核是基于RISC体系结构的。
2.3 cpu与主流架构
-
大家熟悉的
服务器
或者台式机
都是X86架构的CPU
,X86架构的CPU特点是性能高
,并且软件的兼容性很好
。 -
大家平常工作中使用的大部分是英特尔等提供的X86架构的CPU,对于
英特尔
和AMD
大家都不陌生,这两家厂商专门生产X86架构CPU
。 -
另外
X86 64
位这种架构的CPU存在别名,例如x86_64
或者amd64都代表X86架构的64位CPU
。
-
与X86不同的是还有另一种称为
ARM的架构
,这是本文的主题,那么ARM架构的CPU和X86架构的CPU相比有何不同? -
它的
制造成本更低
,ARM架构的芯片的功耗也很低
,代表性的厂商和使用者是苹果
和华为
。 -
苹果
将生产的ARM芯片用到笔记本
或IMAC
上,ARM架构的CPU越来越普及。 -
国内的华为会生产基于ARM架构的服务器,64位ARM架构CPU也有别名,例如
arm64
、aarch64
,这两种叫法表达同一个意思
3 ARM架构与ARM内核
3.1 ARM架构与内核简述
- 目前ARM体系架构共定义了8个版本
V1-V8
V1-V3 :最早的版本,目前已废弃
V4-V6 : 经典处理器中运用
的比较多
V7 : 目前Cortex系列
处理器主要是这种架构、支持Thumb-2的32位指令集
V8 : 兼容ARMv7架构的特性,并支持64位
数据处理 - 目前为止,ARM总共发布
8种架构
:ARMv1
、ARMv2、
ARMv3、
ARMv4、ARMv5
、ARMv6
、ARMv7
、ARMv8
,这是ARM架构指令集的多个v版本
。 - 基于不同的
ARM架构
可以设计出不同特点的内核处理器
。比如基于ARMv3
架构设计出的处理器ARM6
,ARMv7
这两款处理器适用于不同的场景
,硬件可能不同
,但是架构指令集是一样的
。 - 好比盖房子,刚开始因为水平低流行盖平房,这就是一种架构(
ARMv5
),然后这种平房架构你可以设计出一款独立卫生间的款式, 这叫ARM7
内核。 然后其他人(芯片设计公司)想盖房子的就买你这个图纸去盖,接着过一段时间,有人觉得光独立卫生间还不够啊, 我还想有个小院子! 好吧,那ARM就满足你们的要求,出个带小院子的款式(ARM9
)。 - 即
ARMv1/2/3
等是指令集的架构
,ARM7/9
等是基于架构设计出的内核处理器
。ARM的架构
都是基于RISC指令集
而设计的,内核
是实现这一指令集的硬件架构的基础
。
3.2 ARM处理器家族
- 早先经典处理器
包括ARM7
、ARM9
、ARM11
家族。
体系结构:定义指令集
和基于这一体系结构下处理器的编程模型
(基本数据类型
、工作模型
、寄存器组
)。基于同种体系结构可以有多种处理器
、每个处理器的性能不同
,面向的应用领域也不同
ARMv1架构 - 1985年,ARMv1架构诞生,该版架构只在原型机ARM1出现过,只有26位的寻址空间(64MB),没有用于商业产品。
ARMv2架构 - 1986年,ARMv2架构诞生,首颗量产的ARM处理器ARM2就是基于该架构,包含了对32位乘法指令和协处理器指令的支持,但同样仍为26位寻址空间。其后还出现了变种ARMv2a,ARM3即采用了ARMv2a,是第一片采用片上Cache的ARM处理器。
ARMv3架构 - 1990年,ARMv3架构诞生,第一个采用ARMv3架构的微处理器是ARM6(610)以及ARM7,其具有片上高速缓存、MMU和写缓冲,寻址空间增大到32位(4GB)。
ARMv4架构 - 1993年,ARMv4架构诞生,这个架构被广泛使用,ARM7(7TDMI)、ARM8、ARM9(9TDMI)和StrongARM采用了该架构。ARM在这个系列中引入了T变种指令集,即处理器可工作在Thumb状态,增加了16位Thumb指令集。
ARMv5架构 - 1998年,ARMv5架构诞生,ARM7(EJ)、ARM9(E)、ARM10(E)和Xscale采用了该架构,这版架构改进了ARM/Thumb状态之间的切换效率。此外还引入了DSP指令和支持JAVA。
ARMv6架构 - 2001年,ARMv6架构诞生,ARM11采用的是该架构,这版架构强化了图形处理性能。通过追加有效进行多媒体处理的SIMD将语音及图像的处理功能大大提高。此外ARM在这个系列中引入了混合16位/32位的Thumb-2指令集。
ARMv7架构 - 2004年,ARMv7架构诞生,从这个时候开始ARM以Cortex来重新命名处理器,Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9/5/7/15/17都是基于该架构。该架构包括NEON™技术扩展,可将DSP和媒体处理吞吐量提升高达400%,并提供改进的浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。
ARMv6-M架构 - 2007年,在ARMv6基础上衍生了ARMv6-M架构,该架构是专门为低成本、高性能设备而设计,向以前由8位设备占主导地位的市场提供32位功能强大的解决方案。Cortex-M0/1/0+即采用的该架构。
ARMv8架构 - 2011年,ARMv8架构诞生,Cortex-A32/35/53/57/72/73采用的是该架构,这是ARM公司的首款支持64位指令集的处理器架构
ARMv9架构 - 2021年,ARMv9架构诞生,10年磨一剑,Armv9架构采用Arm机密计算架构(ConfidentialCompute Architecture, CCA),专为 Armv9 打造 SVE2,增强 AI 能力,首先Armv9 架构是基于 Armv8 既往成功的基础,增添了针对矢量处理的 DSP、机器学习、安全等这三个技术特性。目前 64 位上的 v8 架构中的所有功能均将在 v9 架构中得到支持,且 v9 架构将支持在 32 位上的 v8 架构功能。
3.2.1 Cortex-Mx处理器
Cortex-M
系列产品主要包括 Cortex-M0
、Cortex-M1
、Cortex-M3
、Cortex-M4
、Cortex-M7
等,其中 Cortex-M0
主打低功耗
和混合信号的处理,Cortex-M3
主要用来替代 ARM7,重点侧重能耗与性能
的平衡,而 Cortex-M7
则重点放在高性能
控制运算领域。
3.2.2 STM32平台
STM32
,从字面上来理解,ST
是意法半导体
,M
是Microelectronics
的缩写,32
表示32 位
,合起来理解,STM32
就是指ST 公司开发的 32 位微控制器
。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星,它大受工程师和市场的青睐,无芯能出其右。
STM32产品分类:
4 ARM各架构之间区别
4.1 ARM版本Ⅰ:V1版架构
- 该版架构只在原型机ARM1出现过,只有
26位
的寻址空间,没有
用于商业产品
。其基本性能有:
基本的数据处理指令(无乘法)
;
基于字节、半字和字的Load/Store指令;
转移指令,包括子程序调用及链接指令;
供操作系统使用的软件中断指令SWI;
寻址空间:64MB(226)。
4.2 ARM版本Ⅱ:V2版架构
- 该版架构对V1版进行了扩展,例如ARM2和ARM3(V2a)架构。包含了对32位乘法指令和协处理器指令的支持。
- 版本2a是版本2的变种,ARM3芯片采用了版本2a,是第一片采用
片上Cache
的ARM处理器。同样为26位
寻址空间,现在已经废弃
不再使用。V2版架构与版本V1相比,增加了以下功能:
乘法和乘加指令;
支持协处理器操作指令;
快速中断模式;
SWP/SWPB的最基本存储器与寄存器交换指令;
寻址空间:64MB。
4.3 ARM版本Ⅲ: V3版架构
- ARM作为独立的公司,在1990年设计的第一个微处理器采用的是
v3
的ARM6
。它作为IP核
、独立的处理器
、具有片上高速缓存
、MMU
和写缓冲
的集成CPU。 - 变种版本有3G和3M。版本3G是不与版本2a向前兼容的版本3,版本
3M
引入了有符号
和无符号数乘法
和乘加
指令,这些指令产生全部64位结果。V3版架构( 目前已废弃
)对ARM体系结构作了较大的改动:
寻址空间增至32位(4GB);
当前程序状态信息从原来的R15寄存器移到当前程序状态寄存器CPSR中(Current Program Status Register);
增加了程序状态保存寄存器SPSR(SavedProgram Status Register);
增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常。;
增加了MRS/MSR指令,以访问新增的CPSR/SPSR寄存器;
增加了从异常处理返回的指令功能。
4.4 ARM版本Ⅳ: V4版架构
- V4版架构在V3版上作了
进一步扩充
,V4版架构是目前应用最广
的ARM体系结构,ARM7
、ARM8
、ARM9
和StrongARM
都采用该架构。 - V4不再强制要求与26位地址空间兼容,而且还明确了哪些指令会引起未定义指令异常。指令集中增加了以下功能:
符号化和非符号化半字及符号化字节的存/取指令;
增加了T变种,处理器可工作在Thumb状态,增加了16位Thumb指令集;
完善了软件中断SWI指令的功能;
处理器系统模式引进特权方式时使用用户寄存器操作;
把一些未使用的指令空间捕获为未定义指令
4.5 ARM版本Ⅴ: V5版架构
V5
版架构是在V4版基础上增加了一些新的指令
,ARM10
和Xscale
都采用该版架构。这些新增命令有:
带有链接和交换的转移BLX指令;
计数前导零CLZ指令;
BRK中断指令;
增加了数字信号处理指令(V5TE版); 为协处理器增加更多可选择的指令
改进了ARM/Thumb状态之间的切换效率;
E---增强型DSP指令集,包括全部算法操作和16位乘法操作;
J----支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能。
4.6 ARM版本Ⅵ: V6版架构
- V6版架构是
2001年发布
的,首先在2002年春季发布的ARM11
处理器中使用。在降低耗电量
的同时,还强化了图形处理性能
。通过追加有效进行多媒体处理的SIMD (Single Instruction, Multiple Data,单指令多数据 )
功能,将语音及图像的处理功能提高到了原型机的4倍。此架构在V5版基础上增加了以下功能:
THUMBTM:35%代码压缩;
DSP扩充:高性能定点DSP功能;
JazelleTM:Java性能优化,可提高8倍;
Media扩充:音/视频性能优化,可提高4倍
5 ARM产品型号
5.1 ARM-v内核产品型号
- 基于各ARM架构设计的内核型号如下图所示:
- 目前常见的指令集的说明:
ARMv7
之前均为32位总线位宽
,从ARMv8
开始扩展为64位总线位宽
(数据
总线、地址
总线、控制
总线位宽均为64
位,一般寻址空间不会用满)。
5.2 ARM处理器命名规则
ARM处理器命名规则和格式:ARM x y z T D M I E J F -S
x
:序列
y
:2:带MMU, 4带MPU,6没有
z
:0:标准cache,2:减小的cache, 6可变的cache
T
:处理器支持Thumb指令集
D
:支持JTAG调试器
M
:支持长乘法指令
I
:有嵌入式跟踪宏单元
E
:支持增强指令(基于TDMI)
J
:支持JAVA硬件加速(Jazelle)
F
:支持向量浮点单元
S
:可综合版本
5.3 ARM v7架构细分
ARM6:ARMv3架构
ARM7、ARM8、RAM9:ARMv4架构
ARM10:ARMv5架构
ARM11:ARMv6架构
ARM-Cortex 系列:ARMv7架构
ARM7:没有MMU
(内存管理单元
),只能叫做MCU
(微控制器
),不能运行诸如Linux
、WinCE
等这些现代的多用户多进程操作系统
,因为运行这些系统需要MMU
,才能给每个用户进程分配进程自己独立的地址空间
。ucOS
、ucLinux
这些精简实时的RTOS不需要MMU
,当然可以在ARM7上运行。
ARM9、ARM11:是嵌入式CPU(处理器),带有MMU
,可以运行诸如Linux等多用户多进程的操作系统,应用场合也不同于ARM7。
到了ARMv7架构
的时候开始以Cortex来命名
,并分成Cortex-A
、Cortex-R
、Cortex-M
三个系列。三大系列分工明确:
5.3.1 Cortex-A系列
- A-Profile,即“Application”-Profile,侧重于应用功能的场合,A系列面向
尖端
的基于虚拟内存
的操作系统和用户应用
;针对开放式操作系统的高性能处理器
,进行海量数据处理
和高性能计算
;应用于智能手机
,数字电视
,智能本
等高端运用。主要支持分页内存管理单元MMU
,linux需要MMU的支持才能运行
5.3.2 Cortex-R系列
- R-Profile,即"Real-Time"-Profile,侧重于实时系统的场合。R系列针对
实时系统
;针对实时系统
、满足实时性要求高的控制需求;应于汽车制动系统
,动力系统
等。
5.3.3 Cortex-M系列
- M-Profile,即
"Microntroller"- Profile
,侧重微控制器单片机方面的场合。M系列对微控制器
。简单的说Cortex-A
系列是用于移动领域的CPU
,Cortex-R
和Cortex-M
系列是用于实时控制领域的MCU
。为单片机驱动
的系统提供的低成本优化方案;应用于传统的微控制器市场
,智能传感器
,汽车周边部件
等。