ARM的原称是Acorn RISC Machine。后来称为Advanced RISC Machine。ARM指令集属于RISC精简指令集。ARM架构从ARMv1一直发展到现在的ARMv8。这里有3个术语要注意区分:
ARM architecture:架构,指令级的。
ARM core:CPU核。MMU、Cache等术语core的范畴。
ARM family:处理器家族。
了解ARM的发展史,需要结合上述3种术语一起了解,他们是紧密结合的。
ARM官方称为Classic Processors。包括ARM11及之前的处理器。ARM1到ARM6属于上古时代的处理器,现在已经没有应用了。ARM7到ARM11虽然发布时间也有10多年到20多年了,生产了大约200亿设备。但是现在仍然有应用。现代操作系统对ARMv4及以后架构都有良好的支持。
在1983到1985年间设计,其没有商业产品。其架构为ARMv1。支持的指令集如下:
基本数据处理指令(不包括乘法指令)
基于字节、字和多字的读取和写入指令
BL等跳转指令
软中断指令SWI
ARMv1的寻址空间为26位。但是数据总线为32位。
ARM1存在严重的不足是不支持乘法运算。ARM2添加了MUL和MLA两条指令。同时ARM2也添加了硬件协处理器的支持,并准备后续添加FPA(Floating point accelerator),但最终没有FPA,第一款支持硬件FP的机器是采用ARM3 core的A5000。同时R8和R9两个寄存器被添加到快速中断模式中。
由于缺乏操作系统的支持,第一台ARM2电脑在1987年才发布。ARM2的架构为ARMv2,寻址空间仍然为26位。
需要提到ARM250,其架构为ARMv2a,添加了SWP和SWPB指令,同时集成了MMU,图形和I/O处理器。ARM3 core第一次发布时间是在1989年,其架构为ARMv2a。ARM3是第一款支持cache的ARM处理器。
在1991年发布ARM3之后,ARM更名为ARM Ltd (Advanced RISC Machines)。命名直接跳过了ARM4和ARM5。ARM6最重要的改变是支持32位寻址。同时引入如下重要更新:
添加两种新的处理器模式:内存读取错误和未定义指令
添加CPSR和SPSR两个寄存器
增加MRS和MSR指令,用于访问上述两个寄存器
ARM6的架构为ARMv3。第一款使用ARM6的处理器是ARM610,1993用在苹果设备上。
ARM7,1993年首次发布,仍然使用ARMv3的架构。但是后来的ARM7T,首次引入了
T.D.M.I
Thumb support, debug support, enhanced multiplication, and in-circuit emulation
架构也升级为ARMv4T。技术特点为:增强的乘法、cache和MMU,以及Thumb指令的引入。
使用ARMv4T架构。1997年首次发布,是应用最为广泛的ARM处理器。ARM9E使用ARMv5TE和ARMv5TEJ架构。首次引入哈佛架构。
使用ARMv6架构。
Cortex系列分为M、R和A3类。
架构与核对应关系表
Architecture | Cores |
ARMv1 | ARM1 |
ARMv2 | ARM2, ARM250, ARM3 |
ARMv3 | ARM6, ARM7 |
ARMv4 | ARM8 |
ARMv4T | ARM7TDMI, ARM9TDMI, SecurCore SC100 |
ARM5vTE | ARM7EJ, ARM9E, ARM10E |
ARMv6 | ARM11 |
ARMv6-M | Cortex-M0/0+/1, SecurCore SC000 |
ARMv7-M | Cortex-M3, SecurCore SC300 |
ARMv7E-M | Cortex-M4/7 |
ARMv8-M | Cortex-M23/33 |
ARMv7-R | Cortex-R4/5/7/8 |
ARMv8-R | Cortex-R52 |
ARMv7-A | Cortex-A5/7/8/9/12/15/17 |
ARMv8-A | Cortex-A32 |
ARMv8-A (64/32) | Cortex-A35/53/57/72/73 |
ARM官方技术图
经典处理器时间线
Year | ARM7 | ARM8 | ARM9 | ARM10 | ARM11 |
1993 | ARM700 | ||||
1994 | ARM710 ARM7DI | ||||
1995 | ARM710a | ||||
1996 | ARM810 | ||||
1997 | ARM720T ARM740T | ||||
1998 | ARM7TDMI ARM710T | ARM9TDMI ARM940T | |||
1999 | ARM9E-S ARM966E-S | ||||
2000 | ARM920T ARM922T ARM946E-S | ARM1020T | |||
2001 | ARM7TDMI-S ARM7EJ-S | ARM9EJ-S ARM926EJ-S | ARM1020E ARM1022E | ||
2002 | ARM1026EJ-S | ARM1136J(F)-S | |||
2003 | ARM968E-S | ARM1156T2(F)-S ARM1176JZ(F)-S | |||
2004 | |||||
2005 | ARM11MPCore | ||||
2006 | ARM996HS |
Cortex时间线
Year | microcontroller | real-time | application (32bit) | application (64bit) |
2004 | Cortex-M3 | |||
2005 | Cortex-A8 | |||
2006 | ||||
2007 | Cortex-M1 | Cortex-A9 | ||
2008 | ||||
2009 | Cortex-M0 | Cortex-A5 | ||
2010 | Cortex-M4(F) | Cortex-A15 | ||
2011 | Cortex-R4/5/7 | Cortex-A7 | ||
2012 | Cortex-M0+ | Cortex-A53 Cortex-A57 | ||
2013 | Cortex-A12 | |||
2014 | Cortex-M7(F) | Cortex-A17 | ||
2015 | Cortex-A35 Cortex-A72 | |||
2016 | Cortex-M23 Cortex-M33(F) | Cortex-R8 Cortex-R52 | Cortex-A32 | Cortex-A73 |
2017 |
【1】杜春雷. ARM体系结构与编程[M]. 清华大学出版社, 2003.
【2】https://www.arm.com/zh/products/processors/instruction-set-architectures/index.php
【3】http://baike.baidu.com/item/arm/7518299
【4】https://www.everything2.com/title/ARM1
【5】https://en.wikipedia.org/wiki/List_of_ARM_microarchitectures