ARM架构与ARM指令集
1 ARM发展历史
1.1ARM的前世今生
ARM最早的历史可以追溯到Science of Cambridge (剑桥科学) 公司。1961年,克里夫·辛克莱创办了一家开发和销售电子产品的无线电器材公司。后来由于公司主营产品的失败,以及电子技术之变革,其公司遭遇了严重的财政危机。他便向英国国家企业委员会求助,但这导致其失去了对公司的控制权,于是他策动公司员工克里斯·库里(Chris Curry)离职并创建了Science of Cambridge (剑桥科学) 公司。1978年六月份SOC(剑桥科学)启动了一项名为MK14的微型计算机项目。该项目库里非常感兴趣,但辛克莱却无意,这时候库里想到了一个人。库里想到的是一个刚认识不久的奥地利籍朋友,其名为赫曼·豪瑟(Hermann Hauser),正在剑桥大学攻读物理学博士学位。之前豪瑟曾经到访过SoC公司,并了解了MK14项目。
当时两人在交流的过程中,发现彼此对该项目都有兴趣,友谊就此建立。于是库里便又离职了,他要去找豪瑟一起完成共同的梦想——微型计算机。1978年十二月份,他俩创办了Cambridge Processing Unit(剑桥处理器单元)简称(CPU公司)正式注册成功。
不久CPU公司便接到了其第一份订单,具体是设计一款基于微处理器的赌博机控制器。刚开始的时候,他们是基于National Semiconductor公司的SC/MP处理器开发产品。
但不久之后就改用了MOS Technology公司的6502处理器 (苹果就是靠这款处理器起家的),同时他们又不舍得在SC/MP上的投资,于是便在1979年成立了Acorn Computers Ltd来负责SC/MP后续的开发和销售。
随着Acorn品牌的不断成长,CPU公司逐渐转变角色成为控股公司,而Acorn Conputers则逐渐接手产品的开发工作,并在不久后推出了微控制器系统Acorn System 1。
此后,System 2/3/4/5相继诞生,拓展性逐步增强。而在System 3 的基础上,还开发出了一款在80年代早期非常出名且成功的“Atom (原子)”8位廉价家用电脑。此后,又开发出了新型的基于16位处理器之版本——Proton (质子)。
Proton项目最大的改进就是引入了“Tube接口”,这使得其可以拓展第二颗处理器。这个开创性的设计最终为其赢得了英国广播公司的订单,Acorn公司因此进入了发展的快车道。
不过,虽然新款计算机产品的热销帮助Acorn公司获得了超额利润,但是由于当时市面上没有合适的16位处理器(便宜的性能差,性能好的又太贵),所以当时用的还是8位处理器MOS6502。
随着时间的推移,8位微型计算机在教育市场(当时Acorn主打的领域)逐渐饱和,Acorn亟需进行处理器升级,以获得更大的市场空间。虽然“Tube接口”可以拓展处理器,但要用什么处理器依然是个绕不开的问题。
他们试过摩托罗拉的68000,但这款处理器没法适应Acorn公司的独特编程代码(可以更有效地利用存储系统)。于是他们向英特尔索要80286处理器的设计资料,想要寻求定制合作,结果直接被拒!
但是,天无绝人之路,那个时候刚好硅谷掀起了一股 RISC(精简指令集计算机)风潮,于是Acorn便决定追随这股革命性的风潮自己设计芯片!
为了寻找更多关于微处理器设计的信息,他们先是造访了National Semiconductor公司的以色列工厂,从而有机会与那里的工程师团队交流。后来他们又去了美国亚利桑那州的凤凰城,找到了MOS公司的西部设计中心。
但是与之前半导体工厂庞大工程师团队和昂贵设备规模截然相反的是,这个西部设计中心仅仅是个郊区的平房,而且雇佣的都是学生,使用设备还是家用的 Apple II 计算机!
美国之旅让Acorn意识到,芯片设计并不需要太多的资源和尖端的研发设施;于是在1983年十月份,他们正式开始了自己的Acorn RISC Machine(简称“ARM”) 计划。
首先,他们与VLSI Technology公司合作。这个VLSI公司既能提供芯片设计工具,还能帮忙代工设计好的芯片,可谓是“一条龙服务”的强大外援了。所以,他们专注要做的就是设计一个RISC指令集。
为了证明Acorn芯片的革命性,开发团队跳过了16位直接采用了32位设计。同时,其RISC指令集最终被精简至45条指令,且拥有五种不同寻址模式,这便是最早出现的ARMv1架构。
1985年四月尾,VLSI成功生产出第一颗Acorn RISC处理器——其被命名为ARM1。然而命运就是这么神奇,正当他们开发出第一批芯片并成功生产出来时,家用电脑市场却崩溃了!
于是,意大利公司Olivetti趁机杀入战场,以低价获得了Acorn公司的控股权——从此Acorn的两位创始人豪瑟和库里彻底失去了对公司的控制权。
1986年,ARMv2架构问世,其中新增对处理器内置硬件乘法电路的支持。基于该架构的ARM2芯片,在1987年成为了第一款RISC家用电脑Acorn Archimedes所搭载的处理器
Archimedes电脑在商业上虽然算不上成功,但简洁易用的图形操作界面却是其能够闻名于世的根本原因,“英国苹果”的称号可谓名不虚传。而接下来,他们就要碰到真正的“苹果”了。
苹果在1986年开始正式自研芯片,当时为此专门成立了一个“高新技术小组 (ATG)”,ATG中有两位工程师曾经采用ARM2芯片运行苹果电脑的软件,他们惊奇地发现这款芯片虽然性能看起来不强但运行效率极高!
所以当针对Newton项目的“霍比特人”计划受阻时(1989年),在这两位工程师的推荐下,苹果开始将目光转向主打低功耗的ARM芯片(这个特性非常适合Newton这种手持设备)。
1.2 ARM公司成立
苹果之所以没有马上采用ARM芯片,是有其难处的。因为ARM芯片是Acorn公司的产品,而苹果与Acorn又是直接竞争对手的关系。不过,世事之巧莫过于“郎有情而妾有意”。
当时Acorn公司内部分歧严重,ARM芯片团队希望摆脱Acorn日渐衰落的命运(巅峰跌落之后一直萎靡),而Acorn的控股股东Olivetti则对制造IBM PC克隆机更感兴趣。
同时,ARM芯片的代工厂VLSI Technology也有自己的小算盘。毕竟苹果是业内大名鼎鼎的电脑公司,假如苹果和ARM的合作能成,那不就相当于多了一个超大客户?
可以说,剥离ARM符合这四方的所有利益;其中Acorn可以专注于电脑制造,无需再负责ARM的高额研发费用;而苹果、ARM、VLSI三方则是利益共同体。
最终,在1990年十一月尾,他们达成了三方协议,新成立了一个名为“Advanced RISC Machines”的公司(简称依然是“ARM”)。其中Acorn以ARM团队的所有知识产权以及所属的12名员工,占新公司30%的股份。
而苹果则以150万英镑现金取得全新ARM公司的30%股份,最后VLSI以其知识产权资产、设备工具资产、25万英镑投资款——获得了新公司剩余的40%股份。
2 ARM架构
我们常说的 ARM 架构在 ARM 官方其实有很多专业术语。ARM 架构通常是指 ARM 指令集架构,指定了处理器的行为方式,例如,它有什么指令以及指令做什么;而处理器的构建和设计称为微架构,微架构介绍了特定处理器的工作方式。
2.1指令集架构
ARM 架构 可以认为就是个专有名词,是 ARM 制定的一些列功能规范的统称。可以将架构看作是硬件和软件之间的契约,描述了软件可以依赖硬件提供哪些功能。大体包含以下内容:
条目 | 说明 | |
---|---|---|
指令集 | 每条指令的功能;指令如何在内存中表示(它的编码) | |
寄存器组 | 有多少寄存器;寄存器的大小;寄存器的功能;寄存器的初始状态 | |
异常模型 | 不同的权限级别;异常的类型;从异常中获取或返回时会发生什么 | |
内存模型 | 内存访问是如何排序的;缓存是如何运作的,什么时候以及软件必须如何执行显式维护 | |
调试、跟踪和分析 | 如何设置和触发断点;跟踪工具可以捕获什么信息,以什么格式捕获 |
至今已经有发展了很多版。最初的 ARMv1、ARMv2,后来的 ARMv6、ARMv8;最新的 ARMv9。每一代 ARM 架构 都有一个专门的文档(架构参考手册)来介绍该架构的具体细节。需要注意的是,架构参考手册是根据 Profile 来分开的,并不是一个统一的文档。例如,《Armv8-M Architecture Reference Manual》、《Armv8-A Architecture Reference Manual》等等。
架构 | 处理器家族 |
---|---|
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-A50、Cortex-A57、Cortex-A53等 |
ARMv9 | Cortex-A510、Cortex-A710、Cortex-A715、Cortex-X2、Cortex-X3、ARM Neoverse N2 |
ARM指令集架构发展史:
-
ARMv1:1985年发布,最早的ARM架构。
-
ARMv2:1986年发布,改进了ARMv1,增加了32位地址总线和指令集扩展(增加了一些指令)。
-
ARMv3:1992年发布,支持虚拟内存、增加了指令集扩展,包括支持协处理器(coprocessor)。
-
ARMv4:1994年发布,增加了Java虚拟机指令集扩展(Jazelle)和Thumb指令集,提高了代码密度。
-
ARMv5:1997年发布,增加了支持嵌入式Java的指令集扩展(Jazelle-RCT)、增加了支持浮点运算的指令集扩展(VFP)。
-
ARMv6:2002年发布,增加了Thumb-2指令集,提高了代码密度和执行效率,同时也增加了一些指令集扩展,包括支持Jazelle-DBX。
-
ARMv7:2004年发布,增加了基于TrustZone的安全扩展、NEON指令集扩展,支持向量浮点运算(VFPv3)等。
-
ARMv8:2011年发布,增加了AArch64架构,支持64位处理器,同时保留了AArch32架构,提高了性能和能耗效率。
-
ARMv9:2021年发布,增加了Confidential Compute Architecture(CCA)和Realms技术,提高了安全性和隔离性。
2.2指令集
指令集架构(Instruction Set Architecture,ISA)是计算机抽象模型的一部分。它定义了软件如何控制 CPU。Arm ISA 允许开发人员编写符合 Arm 规范的软件和固件,以此实现在任何基于 Arm 的处理器上都可以以同样的方式执行它们。ARM 指令集架构有三种版本:
-
A64: A64 指令集是在 Armv8-A 中引入的,以支持 64 位架构。A64 指令集有固定的 32 位指令长度。主要的特性有:
- Clean decode table based on 5-bit register specifiers.
- 指令语义大致类似于 A32 和 T32
- 可随时访问的 31 个通用 64 位寄存器。
- No modal banking of general purpose registers for improved performance and energy.
- 程序计数器和堆栈指针不是通用寄存器
- 专用零寄存器可用于大多数指令
ARM 建议使用 AArch64 来表示符合该指令集 CPU 架构
-
A32: A32 指令集有固定的 32 位指令长度,并在 4 字节边界上对齐。A32 指令集就是在 Armv6 和 Armv7 架构中我们常说的 ARM 指令集,从 Armv8 开始改名 A32 以与 A64 进行区分。 随着 Thumb-2 技术的引入,它的大部分功能都被纳入了 T32 中。
- A32 指令主要被用于 A-profile 和 R-profile
- ARM 建议使用 AArch32 来表示符合该指令集 CPU 架构
-
T32: T32 指令集最初是作为 16 位指令的补充集引入的,用于改进的用户代码的代码密度。随着时间的推移,T32 演变成 16 位和 32 位混合长度的指令集。因此,编译器可以在单个指令集中平衡性能和代码大小。
T32 指令集就是在在 Armv6 和 Armv7 架构中被我们所熟知的 Thumb 指令集,从 Armv8 开始改名为 T32。 T32 支持所有架构的 Profile,并且是 M-Profile 架构所支持的唯一指令集。
以上这三种指令集被称为 ARM 基础指令集(ARM Base ISAs),除此之外,ARM 还提供指令集扩展:自定义指令、DSP、浮点等等。在实际实现中,ARM 核通常会实现一个基本指令集 + 一些扩展功能,详细的参见 Arm Cortex-A Processor Comparison Table 和 Arm Cortex-M Processor Comparison Table。
2.3 Baseline and Mainline
Armv8-M 体系结构包含一个基线体系结构特性集,并支持 Armv8-M 的几个可选扩展。所有的 Armv8-M 实现,包括基线和主线,都与 Armv6-M 兼容。然而,只有 Armv8-M 主线实现与 Armv7-M 兼容。
-
Armv8-M Baseline: 没有任何可选扩展的最简单的 Armv8-M 实现是基线实现。
-
Armv8-M Mainline: 即 Armv8-M Main Extension,是 Armv8-M 基线加上主扩展。Main Extension 主要包含以下这些:
-
M:Main Extension
-
FP:Floating-point Extension. Enables support for the floating-point unit in an implementation.
-
MVE:M-Profile Vector Extension. Enables support for the features that are provided by the Armv8.1 M-Profile Vector Extension (MVE). Armv8-M MVE is also referred to as Arm Helium Technology for Armv8-M.
-
MPU:Memory Protection Unit. Enables support for the Memory Protection Unit in an implementation.
-
DSP:Digital Signal Processing Extension. Enables a range of instructions for digital signal processing in an implementation.
-
DB:Debug Extension. Enables additional debug features in an implementation.
-
S:Security Extension. The Armv8-M Security Extension is also referred as TrustZone Technology for Arm Cortex-M processors.
-
RAS:Reliability, Availability, and Serviceability Extension. Enables RAS support in an implementation.
-
2.4 微架构(Micro-Architecture)
ARM 架构不会介绍处理器是如何构建的或它是如何工作的。 处理器的构建和设计称为微架构。 微架构介绍了特定处理器的工作方式。微架构就是对于 ARM 架构的进一步的实现。
微架构就是指的基于 ARM 指令集架构的处理器的功能规范(ARM CPU 架构)。微架构就是对于 ARM 架构的进一步的实现,微架构包括以下内容:
- 管道长度和布局
- 缓存的数量和大小
- 单个指令的循环计数
- 实现了哪些可选功能
一个 ARM 架构可以有多个不同的微架构以实现针对多种应用环境。例如,ARM 自己提供的各种 ARM 核就是一个个不同的微架构。至于某个 ARM 核实现了哪些指令集架构的功能则可以从每个核对应的 Comparison Table 文档中找到
1. Arm Cortex-A Processor Comparison Table
2. Arm Cortex-M Processor Comparison Table
ARM 文档
国外这些大公司对于文档的组织都是比较规范的,例如,ST 的 参考手册、数据手册、应用手册等等,ARM 文档也基本可以分为参考手册、用户指南。这么划分的目的就是为了让各部分更加独立。简单来说,参考手册仅介绍原理,用户指南介绍使用方法,两者相互独立。
- Arm Architecture Reference Manual :架构参考手册描述架构规范。是按照不同的架构版本分开的(如上图是 Armv8-A的架构参考手册),里面会详细介绍对应架构的细节。
- Technical Reference Manual (TRM) :这个是针对 ARM IP 的参考手册。 描述特定于该 ARM IP 的特性。
- Configuration and Integration Manual (CIM) :这个也是针对 ARM IP 的参考手册。描述如何将处理器集成到系统中。一般来说,这些信息只与 SoC 设计相关。仅对被授予了 IP 许可的合作方开放。
下表显示了在不同类型的文档中的内容:
上面说的文档都属于参考手册
ARM 的所有文档都放在专门为开发者提供了网站 Arm developer website 上,除此之外,ARM 的官方社区也是一个宝库,社区包含:博客(ARM 的设计师经常在上面分享一些文章)、论坛(里面有很多专业问题及设计师的解答)。
系统架构(System Architecture)
除了上面说的 ARM 架构之外,ARM 对构成现代芯片上系统(SoC)的许多组件都有类似的规范。ARM 系统架构定义了相关组件和接口,使硬件和软件更容易进行互操作。系统架构的整体框图如下图所示:
规范是软件兼容性的基础。根据规范构建硬件意味着可以编写与之相匹配的软件。根据规范编写软件意味着它可以在兼容的硬件上运行。ARM 架构是基础,通过指令集架构(Instruction Set Architecture,ISA)兼容性提供了一个通用的程序员模型。
基本系统架构(The Base System Architecture,BSA)规范描述了系统软件可以依赖的硬件系统架构。BSA 涵盖了处理器和系统架构的各个方面,例如中断控制器、计时器和操作系统需要的其他常见设备。这为标准操作系统、管理程序和固件提供了可靠的平台。
基本引导需求(The Base Boot Requirements,BBR)规范涵盖了基于 Arm 架构的系统以及操作系统和管理程序可以依赖的系统需求。该规范建立了固件接口要求,如 PSCI、SMCCC、UEFI、ACPI 和 SMBIOS。
其他标准可以建立在 BSA 的基础上,以提供特定于市场的标准化。 例如,服务器基础系统架构 (SBSA) 是针对服务器的 BSA 的补充。 SBSA 描述了服务器操作系统的硬件和功能要求。
- **Generic Interrupt Controller:** 通用中断控制器(GIC) 规范定义了 Armv7-A/R 和 Armv8-A/R 的标准化中断控制器。通用中断控制器(GIC)从外设接收中断,按优先级排列它们,并将它们交付给适当的处理器核心。
目前,GIC 已经发展到了第四代。ARM 官方提供了 《ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification》和《Arm Generic Interrupt Controller Architecture Specification GIC architecture version 3 and 4》这两个文档来介绍 GIC。
注意:M-Profile 使用的是 NVIC 中断控制器。
-
System Memory Management Unit: 系统内存管理单元(SMMU,有时也称为 IOMMU)为非处理器主机提供翻译服务。
目前,SMMU 已经发展到了第三代,ARM 官方提供了 《ARM System Memory Management Unit Architecture Specification - SMMU architecture version 2.0》和《Arm System Memory Management Unit Architecture Specification, SMMU architecture version 3》这两个文档来介绍 SMMU。 -
Generic Timer: 通用定时器为系统中的所有处理器提供公共参考系统计数。 这些计时器提供用于诸如操作系统调度程序滴答之类的功能。 通用定时器是 Arm 架构的一部分,但系统计数器是一个系统组件。
-
Server Base System Architecture and Trusted Base System Architecture: 服务器基础系统架构 (SBSA) 和可信基础系统架构 (TBSA) 为 SoC 开发人员提供系统设计指南。
-
Advanced Microcontroller Bus Architecture: 高级微控制器总线架构 (AMBA) 总线协议系列控制基于 Arm 的系统中组件的连接方式以及这些连接上的协议。
-
CoreSight Architecture: CoreSight 架构为实时调试和收集跟踪信息提供了系统范围的解决方案。
ARM IP
ARM 不仅仅制定规范,还会在规范的基础上进一步设计,这些设计被称为 IP(Intellectual Property,知识产权)。ARM IP 有很多种:Processors(也就是我们平时说 ARM 核)、Graphics and Multimedia、System IP、Physical IP、Security IP、Subsystem。
Processors
Processors 即 ARM 核,也即 ARM CPU,就是一些可重复利用的、具有特定功能的集成电路模块。下图显示了 ARM 架构以及 ARM 核对应的关系(这里并不全,详细的参见 Arm Cortex-A Processor Comparison Table 和 Arm Cortex-M Processor Comparison Table):
从上如图中我们可以不难看出如下几点:
- ARM 架构版本很多,但是并不是每个 ARM 架构都有实际的实现。甚至于 ARM 自己也没有实现部分版本的架构
- 有部分第三方公司也基于 ARM 架构设计了自己的核心,例如苹果公司。这是由于 苹果公司具有 ARM 架构的授权。
ARM 为自己设计的核起了一个统一的品牌名字:Arm Cortex,同时针对不同的应用场景,分为了 Arm Cortex-A(Application Processors,应用处理器)、Arm Cortex-R(Real-time Processors ,实时处理器)、Arm Cortex-M(Microcontroller Processors,微控制器处理器) 三种不同的 Profile 。
除了以上我们比较常见的 ARM 核,ARM 还设计了其他一些处理器
System IP
Arm System IP 使系统设计人员能够配置和构建高性能、高能效的 SoC,同时通过行业标准 AMBA 接口将 Arm 处理器与他们自己的 IP 元素相结合,从而进一步区分。
AMBA(高级微控制器总线架构)是一种免费提供的开放标准,用于连接和管理片上系统 (SoC) 中的功能模块。 它有助于多处理器设计的一次性开发,具有大量控制器和外设。
Physical IP
ARM Physical IP 提供工艺优化的 IP。Arm POP (Processor Optimized Package) IP 以及 Artisan Physical IP 提供业界最全面、最先进的物理 IP 解决方案。使用 Artisan Physical IP 可以有效地实现复杂的 SoC 设计。
- POP IP: 针对给定的细分市场,针对特定的 Arm CPU 或核心集群,在技术流程节点上使用优化的 Arm Artisan Physical IP 集合进行优化
Arm POP IP 是连接 Cortex-A CPU 和硅处理技术的桥梁。它是针对 Cortex-A 处理器系列的高度优化的物理 IP 解决方案,在给定的功率范围内提供了经过验证的高性能或高密度实现解决方案,有助于降低技术和项目风险。 - Arm Artisan Physical IP:包括逻辑 IP 和支持架构产品、嵌入式内存编译器和接口 IP。这些产品共同缓解了高级节点的实施挑战,加快了核心硬化和 SoC 的实施速度。
Arm Artisan Physical IP 为复杂 SoC 集成电路(IC)的设计和制造提供领先的物理 IP 组件。Artisan 的产品针对性能、密度、功率和良率以及从 250nm 到 3nm 的每种铸造和工艺技术进行了优化。
Security IP
Arm 提供一系列安全 IP 产品,旨在防止各种不同的攻击,甚至物理攻击。Arm Security IP 扩展了整个系统的处理器和子系统保护(硬件和软件),以及加速和卸载。
Arm 提供不断扩展的安全 IP、固件和软件组合,与生态系统合作,为设备目前面临的各种威胁提供正确的应对措施。
Graphics and Multimedia
- Arm Mali GPU IP
- Mali Camera Image Signal Processors (ISPs)
授权方式
从很多资料中,我们都能找到这样一句话 “ARM 本身并不制造和销售芯片,而是将设计授权给其他公司”。在多年发展中,ARM 逐渐形成了多种授权方式(等级),不同的授权方式,被授权方的权限不同。
ARM 主要有三种授权等级:使用层级授权、 内核层级授权和架构/指令集层级授权,其中指令集层级授权等级最高,企业可以对 ARM 指令集进行改造以实现自行设计处理器,如苹果在 ARM v7-A 架构基础上开发出苹果 Swift 架构,其他如高通 Krait、Marvell 等都是基于 ARM 指令集或微架构进行的改造所得。
Arm core licensees
前面我们介绍了 ARM 本身设计了很多 ARM 核,Core licensees 就是把这些核授权给购买者,购买者可以使用这些核来构建自己的 MCU、SoC。
Arm architectural licensees
牛逼的公司还可以购买 ARM 架构许可,使用 ARM 指令集设计自己的 CPU 核。这些核心必须完全符合 ARM 架构。其中,最为人所致的就是苹果公司。2013 年,Arm 表示大约有15 家公司被授予架构许可。
Built on ARM Cortex Technology licence
2016 年 2 月,ARM 宣布了 Built on ARM Cortex Technology 许可证,通常简称为 Built on Cortex (BoC) 许可证。该许可证允许授权公司与 ARM 合作,并对 ARM Cortex 的设计进行修改。这些设计修改不会与其他公司共享。其中比较为人所知的就是高通。
ARM Flexible Access
2019 年 7 月16 日,ARM 宣布了 ARM Flexible Access。ARM Flexible Access 为开发提供了对包括 ARM IP 的无限访问。
其他
除了上面说的这些,ARM 自己设计的其他 IP 也有对应的授权方式。例如,Mali licensees 授权给第三方使用 ARM 设计的 GPU。
参考
1、https://blog.csdn.net/ZCShouCSDN/article/details/120351435
2、https://baijiahao.baidu.com/s?id=1768191059704656683&wfr=spider&for=pc
真好呢