ARM 架构的 MCU 用了好多年,进一步对于 ARM 架构也或多或少的有了一些了解。之前都是遇到啥问题直接去官网找对应的手册,一直没有系统的总结一下。是时候总结一下,以便进行下一步学习了!
总的来说,整个 ARM 的产品可以分为 处理器 IP 相关 和 ARM 平台软件开发工具相关 这两大部分,分别对应了 ARM 芯片设计与 ARM 软件开发。本文重点关注处理器 IP 相关的这一部分。
架构及微架构
我们常说的 ARM 架构在 ARM 官方其实有很多专业术语。ARM 架构通常是指 ARM 指令集架构,指定了处理器的行为方式,例如,它有什么指令以及指令做什么;而处理器的构建和设计称为微架构,微架构介绍了特定处理器的工作方式。
指令集架构
ARM 架构 可以认为就是个专有名词,是 ARM 制定的一些列功能规范的统称。可以将架构看作是硬件和软件之间的契约,描述了软件可以依赖硬件提供哪些功能。大体包含以下内容:
条目 | 说明 |
---|---|
指令集 | 每条指令的功能;指令如何在内存中表示(它的编码) |
寄存器组 | 有多少寄存器;寄存器的大小;寄存器的功能;寄存器的初始状态 |
异常模型 | 不同的权限级别;异常的类型;从异常中获取或返回时会发生什么 |
内存模型 | 内存访问是如何排序的;缓存是如何运作的,什么时候以及软件必须如何执行显式维护 |
调试、跟踪和分析 | 如何设置和触发断点;跟踪工具可以捕获什么信息,以什么格式捕获 |
至今已经有发展了很多版。最初的 ARMv1、ARMv2,后来的 ARMv6、ARMv8;最新的 ARMv9。每一代 ARM 架构 都有一个专门的文档(架构参考手册)来介绍该架构的具体细节。需要注意的是,架构参考手册是根据 Profile 来分开的,并不是一个统一的文档。例如,《Armv8-M Architecture Reference Manual》、《Armv8-A Architecture Reference Manual》等等。
指令集架构(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。
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.
微架构(Micro-Architecture)
ARM 架构不会介绍处理器是如何构建的或它是如何工作的。 处理器的构建和设计称为微架构。 微架构介绍了特定处理器的工作方式。微架构就是对于 ARM 架构的进一步的实现。
微架构就是指的基于 ARM 指令集架构的处理器的功能规范(ARM CPU 架构)。微架构就是对于 ARM 架构的进一步的实现,微架构包括以下内容:
- 管道长度和布局
- 缓存的数量和大小
- 单个指令的循环计数
- 实现了哪些可选功能
一个 ARM 架构可以有多个不同的微架构以实现针对多种应用环境。例如,ARM 自己提供的各种 ARM 核就是一个个不同的微架构。至于某个 ARM 核实现了哪些指令集架构的功能则可以从每个核对应的 Comparison Table 文档中找到
- Arm Cortex-A Processor Comparison Table
- 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,同时针对不同的应用场景,分为了 Application Processors(应用处理器)Arm Cortex-A、Real-time Processors (实时处理器)Arm Cortex-R、Microcontroller Processors(微控制器处理器)Arm Cortex-M 三种不同的 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。
参考
- https://developer.arm.com/
- https://en.wikipedia.org/wiki/ARM_architecture