ARM 架构家族史
介绍
关于ARM的介绍其实很多了。维基百科的介绍可以说非常详细,写这篇文章主要还是提炼一下几个关键点,和自我阶段性的回顾一家公司的过去,现在和未来。另外,我什么在意ARM,因为它所设计IP方案,仍然是目前主流半导体公司设计的基础方案。了解和熟悉ARM,对为了给顶层设计打好基础。
ARM生命中的几个关键点
1983年,出生。取名Acorn,3岁以前还都只是个开发项目。当时研发出来的第一款处理器芯片的型号,被定为ARM1。当时ARM1和同时期Intel的80286处理器(也就是常说的286)对比如下:
1985年,ARM正式推出第一个能商用的产品ARM2。所以这一年可以认为是ARM真正的元年。 ARM2具有32位的数据总线、26位的寻址空间,并提供64 Mbyte的寻址范围与16个32-bit的寄存器。ARM2可能是全世界最简单实用的32位微处理器,仅容纳了30,000个晶体管(六年后的摩托罗拉68000包含了70,000颗)。同一年,英特尔发布了80386。
1991年,跟苹果合作生产出ARM6,ARM6样品出来的时候,正好是ARM六岁。1994年投产了ARM 610 作为苹果Newton 产品的处理器。
从1994年之后,ARM便进入每隔两年的产品演进阶段。
这里有三个重要的时间点方便记忆:
重要时间点 | Profile |
---|---|
2004以前 | ARM 32位旧有架构或Classic Core |
2004~2011 | Cortex 32位架构 |
2011~2021 | Cortex 64位架构 |
到底什么是ARM 架构
在读ARM相关的文档的时候,大家会发现,当提到ARM架构的时候,有两种写法,一种是ARMv, 一种是ARM。前者例如ARMv1、ARVv2等等,后者例如ARM1,ARM2等。
所有用v来标识的叫做指令集版本,也就是通常所说的ARM指令集架构。而没有v的表示的是ARM处理器的家族,也就是处理器架构。
架构 | 处理器家族 |
---|---|
ARMv1 | ARM1 |
ARMv2 | ARM2、ARM3 |
ARMv3 | ARM6、ARM7 |
ARMv4 | StrongARM、ARM7TDMI、ARM9TDMI |
ARMv5 | ARM7EJ、ARM9E、ARM10E、XScale |
ARMv6 | ARM11、ARM Cortex-M |
ARMv7 | ARM Cortex-A、ARM Cortex-M、ARM Cortex-R |
ARMv8 | Cortex-A35、Cortex-A50系列[18]、Cortex-A70系列、Cortex-X1 |
ARMv9 | Cortex-A510、Cortex-A710、Cortex-X2 |
ARM从2004年以后对处理器架构的命名做了重大修改。也就是从ARM11处理器之后,引入Cortex 这个profile。Coretex又分为三个系列:
- “应用”配置: Cortex-A 系列
- “嵌入式”配置: Cortex-R 系列
- “微处理器”配置: ARM Cortex-M 系列。
ARM每次指令集架构版本的升级,都往往往意味着一次重大的改革。例如,ARMv8这一代是从32bits 到64bits 指令集的的一次重大演进。
ARMv1架构
1985年,ARMv1架构诞生,该版架构只在原型机ARM1出现过,只有26位的寻址空间(64MB),没有用于商业产品。
ARMv2架构
1986年,ARMv2架构诞生,该版本架构对V1进行了扩展,首颗量产的ARM处理器ARM2就是基于该架构,包含了对32位乘法指令和协处理器指令的支持,但同样仍为26位寻址空间。其后还出现了变种ARMv2a,ARM3即采用了ARMv2a,是第一片采用Cache的ARM处理器。
ARMv3架构
1990年,ARMv3架构诞生,第一个采用ARMv3架构的微处理器是ARM6(610)以及ARM7,ARM6作为IP核、独立的处理器、具有片上高速缓存、MMCU和写缓冲的集成CPU,寻址空间增大到32位(4GB)。变种版本有3G和3M。版本3G是不与版本2a相兼容的版本3。版本3M引入了有符号和无符号数乘法和乘加指令。
ARMv4架构
1993年,ARMv4架构在V3版上作了进一步扩充,是目前应用最广的ARM架构,ARM7(7TDMI)、ARM8、ARM9(9TDMI)和Strong ARM均采用了该架构。ARM在这个系列中引入了T变种指令集,即处理器可工作在Thumb状态,增加了16位Thumb指令集。V4不再强制要求与26位地址空间兼容,而且还明确了哪些指令会引起未定义指令异常。
ARMv5架构
1998年,ARMv5架构诞生,在V4版基础上增加了一些新的指令,ARM7(EJ)、ARM9(E)、ARM10(E)和Xscale采用了该架构,这版架构改进了ARM/Thumb状态之间的切换效率。这些新增命令有带有链接和交换的转移BLX指令;计数前导零CLZ指令;BRK中断指令;增加了数字信号处理指令(V5TE版);为协处理器增加更多可选择的指令。此外还引入了DSP指令和支持JAVA。
ARMv6架构
V6版架构于2001年正式发布,首先被应用在ARM11处理器。V6版架构在降低耗电量的同时,还强化了图形处理性能。它还引进了包括单指令多数据(SIMD)运算在内的一系列新功能。通过追加有效进行多媒体处理的SIMD(Single Instruction,Multiple Data,单指令多数据)功能,将语音及图像的处理功能提高到了原型机的4倍。此外,还引入了混合16位/32位的Thumb-2指令集和Trust Zone技术。
ARMv7架构
2004年,ARMv7架构诞生,该版本架构采用了Thumb-2技术,它是在ARM的Thumb代码压缩技术的基础上发展出来的,并且保持了对已存ARM解决方案的完整的代码兼容性。此外,ARMv7还支持改良的运行环境,来迎合不断增加的JIT和DAC技术的使用。
ARMv7架构还包括NEON™技术扩展,可将DSP和媒体处理吞吐量提升高达400%,并提供改进的浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。
从这个时候开始ARM以Cortex来重新命名处理器,Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9/5/7/15/17都是基于该架构。
ARMv6-M架构
2007年,在ARMv6基础上衍生了ARMv6-M架构,该架构是专门为低成本、高性能设备而设计,向以前由8位设备占主导地位的市场提供32位功能强大的解决方案。Cortex-M0/1/0+即采用的该架构。
ARMv8架构
2011年,ARMv8架构诞生,Cortex-A32/35/53/57/72/73采用的是该架构,这是ARM公司的首款支持64位指令集的处理器架构。由于ARM处理器的授权内核被广泛用于手机等诸多电子产品,故ARMv8架构作为下一代处理器的核心技术而受到普遍关注。
ARMv8是在32位ARM架构上进行开发的,主要被用于对扩展虚拟地址和64位数据处理技术有更高要求的产品领域。ARMv8是近20年来,ARM架构变动最大的一次。它引入的Execution State、Exception Level、Security State等新特性,已经颠覆了我们对旧的ARM架构的认知。
可以看出,从ARMv7架构开始,ARM的命名方式有所改变。新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。
Cortex-A:针对高性能计算。如我们目前手机SoC中常出现的Cortex-A76等。
Cortex-R:针对实时操作处理。主要是面向嵌入式实时处理器。在汽车的电子制动系统,工业控制领域等领域比较常见。
Cortex-M:专为低功耗、低成本系统设计。目前火热的IoT领域常常见到采用Cortex-M架构的处理器。
其实,除了上述三大系列之外,还有一个主打安全的Cortex-SC系列(SC:SecurCore),主要用于政府安全芯片。