简介
本章介绍 Armv8 架构、其定义的各架构 Profile(architecture profile),以及本手册所定义的 Armv8-M 架构 Profile。
1. 架构参考手册的布局与术语¶
本节描述本架构参考手册(Architecture Reference Manual)的结构与范围,并描述本架构参考手册所使用的术语。本节不构成架构参考手册的一部分,不得被解读为实现指导。
1.1. 架构参考手册的结构¶
本架构参考手册将处理元件(Processing Element,PE)的行为描述为一组独立的规则(rule)。
每条规则都由字母 R 后跟一组随机的下标字母明确标识,这些下标字母不反映任何预期的顺序或优先级,例如 R_BSHJ。在下例中,R_BSHJ 只是一个随机的规则标识符,除唯一标识本手册中的一条规则外没有任何含义。
下图给出了该规则示例。

不得孤立地理解规则;当某一特性存在多条相关规则时,各条规则会被归入节与小节中以提供恰当的上下文。在适当情况下,这些节会包含一段简短的介绍以帮助读者。
符合本手册所述全部规则的实现(implementation)即为符合 Armv8-M 的实现。行为偏离这些规则的实现不符合 Armv8-M 架构。
某些节包含不构成规则的附加信息与指导。这些信息与指导纯粹用于帮助理解架构。信息语句(information statement)由字母 I 后跟一组随机的下标字母明确标识,例如 IPRTD。
每条规则或信息语句下方的一行文字给出附加信息,指明架构版本、该规则或信息语句适用所必需的扩展(extension),以及其他注释。某些扩展依赖于其他扩展的实现,例如 FP。
注意:
Arm 强烈建议实现者阅读本架构参考手册的所有章与节,以确保实现符合架构。
符合本架构参考手册所述全部规则、但选择忽略任何附加信息与指导的实现,仍符合 Armv8-M 架构。
在本架构参考手册的以下部分中,架构规则不由特定前缀和一组随机的下标字母标识:
- 第 B15 章《性能监控扩展》(The Performance Monitors Extension)的部分内容。
适用于 Armv8.1-M 及以后架构版本的实现。
- Part C《Armv8-M 指令集》(Armv8-M Instruction Set)的部分内容。
- Part D《Armv8-M 寄存器与有效载荷规范》(Armv8-M Register and Payload Specification)。
- Part E《Armv8-M 伪代码》(Armv8-M Pseudocode)。
- Part F《Armv8-M 调试包协议》(Armv8-M Debug Packet Protocols)。
1.2. 架构参考手册的范围¶
本架构参考手册只包含专门与 Armv8-M 架构相关的规则与信息。它不包含有关其他 Arm 架构的任何信息,也不描述 Armv8-M 与其他架构之间的相似之处。
读者不得假定本手册给出的规则适用于 Armv7-M 或 Armv6-M 实现,也不得假定适用于 Armv7-M 或 Armv6-M 实现的规则同样适用于 Armv8-M 实现。
1.3. 目标读者¶
本手册面向希望设计、实现或编程 Armv8-M PE 的用户,涵盖从简单的单处理器实现到复杂的多处理器系统等各种符合 Arm 架构的实现。本手册不假定读者熟悉 M-Profile 架构的早期版本。
本架构参考手册给出一组精确、准确且正确的规则,Armv8-M 实现必须遵循这些规则才能在架构上合规。它是一本明确的参考手册,而不是 Armv8-M 架构的通用入门或用户指南。
1.4. 术语与表述¶
本小节列出 Arm 架构文档中使用的一些标准词汇与短语。这些词汇与短语具有 Arm 专有的定义,本节予以说明。
架构可见(Architecturally visible)
对控制主体(controlling agent)可见的事物。控制主体可以是软件。
Arm 建议(Arm recommends)
一种可确保一致性与可用性的特定用法。遵循本手册列出的全部规则可得到符合架构的可预测结果,但可能产生非预期的输出。遵循建议可确保输出符合预期。
Arm 强烈建议(Arm strongly recommends)
本质上属于强制要求、但超出本手册所述架构范围的事项。不遵循强烈建议可能破坏系统,尽管 PE 本身仍符合本手册所述的架构。
有限时间(Finite time)
某个动作将在未来的某个时刻发生。有限时间不对所涉及的时间作出任何陈述。但是,将动作延迟到超过绝对必要的程度可能对性能产生不利影响。
允许(Permitted)
被允许的行为。
要求(Required)
强制的行为。
支持(Support)
该实现已实现某一特定特性。
1.5. 术语,Armv8-M 专用术语¶
Armv8-M 专用术语的定义请参见术语表(Glossary)。
2. 关于 Armv8 架构与架构 Profile¶
Armv8-M 作为一组架构 Profile 之一进行描述。
Arm 定义了三种架构 Profile:
应用 Profile(Application profile)
- 支持基于内存管理单元(Memory Management Unit,MMU)的虚拟内存系统架构(Virtual Memory System Architecture,VMSA)。
- 支持 A64、A32 和 T32 指令集。
实时 Profile(Real-time profile)
- 支持 AArch64 或 AArch32 执行状态(Execution state)。
- 支持 A64,或 A32 和 T32 指令集。
- 支持基于内存保护单元(Memory Protection Unit,MPU)的受保护内存系统架构(Protected Memory System Architecture,PMSA)。
- 支持 VMSA。
微控制器 Profile(本手册所述,Microcontroller profile)
- 实现为低延迟中断处理而设计的程序员模型,支持寄存器硬件堆叠,并支持用高级语言编写中断处理程序。
- 可选实现基于 MPU 的 PMSA 变体。
- 支持 T32 指令集的变体。
本架构参考手册只描述 Armv8-M Profile。
3. Armv8-M 架构 Profile¶
M-Profile 架构包含:
- 可采用简单的流水线设计,在广泛的市场与应用中提供领先的系统性能水平。
-
高度确定性的操作:
-
单周期或低周期数执行。
- 采用短流水线,实现极小的中断延迟。
-
能够在无缓存的情况下运行。
-
对 C/C++ 代码的良好支持。这与 Arm 在该领域的编程标准一致:
-
异常处理程序是标准的 C/C++ 函数,使用标准调用约定进入。
-
面向深度嵌入式系统的设计支持:
-
低引脚数器件。
-
支持事件驱动系统的调试与软件性能分析。
3.1. Armv8-M 指令集¶
Armv8-M 只支持 T32 指令的执行。
有关指令的更多信息,请参见第 C1 章《指令集概述》(Instruction Set Overview)和第 C2 章《指令规范》(Instruction Specification)。
3.2. 基线实现¶
不带有任何可选扩展的最简单 Armv8.0-M 实现称为基线实现(Baseline implementation)。Armv8.0-M 基线在以下方面较先前的 M-Profile 架构有所改进:
- 改进的内存保护单元(MPU)模型。
- 与 Armv8-A 和 Armv8-R 内存类型对齐。
- 栈指针限制检查。
- 改进的多处理支持。
- 与 C11 和 C11++ 标准更好地对齐。
- 增强的调试能力。
在本架构参考手册中,基线实现指不带有主扩展(Main Extension)的实现。
如果实现不包含主扩展,则 CPUID.Architecture 读回 0b1100。
适用于 Armv8.0-M 及以后架构版本的实现。
3.3. 嵌套向量中断控制器¶
嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)最多可支持 496 个外部中断。NVIC 始终被实现,用于:
- 集成中断。
- 异常处理。
- 优先级管理。
- 自动向量化。
- 自动状态保存。
更多信息请参见第 B12 章《嵌套向量中断控制器》(Nested Vectored Interrupt Controller)。
4. 可选扩展¶
4.1. CDE —— 自定义数据通路扩展¶
自定义数据通路扩展(Custom Datapath Extension,CDE)是 Armv8-M 架构提供的可选(OPTIONAL)特性。包含自定义数据通路扩展的实现必须实现主扩展(Main Extension,M)所要求的全部特性,并可实现以下可选特性:
- 浮点扩展(Floating-point Extension,FP)所提供的特性。
- Armv8.1-M 向量扩展(M Vector Extension,MVE)所提供的特性。
操作 S 或 D 寄存器组的 CDE 指令要求实现 FP 或 MVE。操作 Q 寄存器组的 CDE 指令要求实现 MVE。
更多信息请参见 B3.37《自定义数据通路扩展》(The Custom Datapath Extension)。
注意: 自定义数据通路扩展也可称为面向 Armv8-M 的 Arm 自定义指令(Arm Custom Instructions for Armv8-M)。
适用于 Armv8.0-M 及以后架构版本的实现。
4.2. 调试¶
Armv8-M 架构引入了:
- 增强的断点和观察点功能。
- 对插桩跟踪宏单元(Instrumentation Trace Macrocell,ITM)的改进。
- 全面的跟踪与自托管调试扩展,使嵌入式软件更易于调试和跟踪。
停机调试(Halting debug,HDBG)是一项可选特性,允许调试器暂停 PE。
可实现以下可选外设:
-
数据跟踪与观察点单元 —— 一个存储器映射外设,提供两种选项:
-
用于数据、指令和地址匹配的比较器与观察点(DWTD)。
-
跟踪包生成(DWTT)。
-
嵌入式跟踪宏单元 —— 提供跟踪信息的存储器映射外设(ETM)。
- 插桩跟踪宏单元 —— 用于生成插桩跟踪包的存储器映射接口(ITM)。
- Flash 补丁与断点单元 —— 提供断点的存储器映射外设(FPB)。
- 跟踪端口接口单元 —— 为 DWT、ETM 和 ITM 提供输出路径与跟踪接收端的存储器映射外设(TPIU)。
生成跟踪包要求实现主扩展。
对 Armv8-M 调试架构的支持由 ID_DFR0.MProfDbg 指示。
更多信息请参见 B13.1《调试特性概述》(Debug feature overview)。
适用于 Armv8.0-M 及以后架构版本的实现。
在 Armv8.1-M 实现中,可选的非特权调试扩展(Unprivileged Debug Extension,UDE)增加了对非特权调试的支持。UDE 要求实现主扩展(M)。
对若干寄存器的访问限制被放宽,允许调试器在 PE 不处于调试状态(Debug state)时写入这些寄存器。
对 Armv8-M 调试架构的支持由 ID_DFR0.UDE 指示。
适用于 Armv8.1-M 及以后架构版本的实现。
有关调试的更多信息,请参见第 B13 章《调试》(Debug)和第 B14 章《调试与跟踪组件》(Debug and Trace Components)。
4.3. DSP —— 数字信号处理扩展¶
数字信号处理扩展(Digital Signal Processing Extension,DSP)是一项可选特性。DSP 增加了对 SIMD 指令的支持。
实现 DSP 扩展的 PE 必须实现主扩展(M)。
对 DSP 的支持由以下寄存器指示:
ID_ISAR1。ID_ISAR2。ID_ISAR3。
适用于 Armv8.0-M 及以后架构版本的实现。
4.4. DSP 调试扩展¶
Armv8.1-M 为 DSP 增加了可选的调试支持。
如果实现了 DSP 调试扩展(DSP Debug Extension,DSPDE),则还必须实现以下特性:
- 停机调试(HDBG)。
- 主扩展(M)。
- 数字信号处理扩展(DSP)。
如果实现了 MVE 和 DWTD,则必须实现 DSPDE。
适用于 Armv8.1-M 及以后架构版本的实现。
4.5. 浮点扩展¶
实现浮点扩展的 PE 必须实现主扩展(M)。
浮点扩展支持单精度浮点指令,或同时支持单精度与双精度浮点指令。
适用于 Armv8.0-M 及以后架构版本的实现。
HP —— 半精度浮点指令
Armv8.1-M 架构扩展了浮点扩展以包含半精度数据类型。如果实现了单精度数据类型,则也必须实现半精度数据类型。
适用于 Armv8.1-M 及以后架构版本的实现。
4.6. 主扩展¶
实现主扩展的 PE 也实现系统定时器扩展(System Timer Extension)。
注意:
- 带有主扩展的 PE 也称为 Mainline 实现(Mainline implementation)。
- 不带主扩展的 PE 也称为基线实现(Baseline implementation)。基线实现拥有 Mainline 实现的指令、寄存器和特性的一个子集。
- Armv7-M 兼容性要求主扩展。
- Armv6-M 兼容性由所有 Armv8-M 实现提供。
对主扩展的支持由 CPUID.Architecture 指示。
适用于 Armv8.0-M 及以后架构版本的实现。
4.7. MPU 模型¶
Armv8-M 架构提供系统地址映射,并允许实现包含一个可选的 MPU。该可选 MPU 使用受保护内存系统架构(Protected Memory System Architecture,PMSAv8),并在 MPU 区域定义上提供更高的灵活性。
Armv8.1-M 架构为 MPU 区域引入了一个进一步的属性 MPU_RLAR.PXN。
适用于 Armv8.1-M 及以后架构版本的实现。
更多信息请参见第 B10 章《Armv8-M 受保护内存系统架构》(The Armv8-M Protected Memory System Architecture)。
4.8. M-Profile 向量扩展,MVE¶
该扩展提供对各种 SIMD 数据类型的操作。
它由 MVE-I(整数)和 MVE-F(浮点)组成。
实现 MVE-I 的 PE 要求具备主扩展(M)和数字信号处理扩展(DSP)所提供的特性。
实现 MVE-F 的 PE 要求实现浮点扩展(FP)和 MVE-I。
更多信息请参见第 B5 章《向量扩展》(Vector Extension)。
对 MVE 的支持由 ID_MVFR1.MVE 指示。
注意: Armv8-M 的 MVE 也可称为面向 Armv8-M 的 Arm Helium™(Arm Helium™ for Armv8-M)。
适用于 Armv8.1-M 及以后架构版本的实现。
4.9. 指针认证与分支目标识别扩展¶
Armv8.1-M 的可选指针认证与分支目标识别扩展(Pointer Authentication and Branch Target Identification Extension,PACBTI)增加了以下支持:在寄存器被用作加载地址或间接分支目标之前对其内容进行认证,以及对栈指针进行认证。
更多信息请参见第 B6 章《指针认证与分支目标识别扩展》(Pointer authentication and branch target identification Extension)。
对 PACBTI 扩展的支持由 ID_ISAR5.PACBTI 指示。
适用于 Armv8.1-M 及以后架构版本的实现。
4.10. 性能监控扩展¶
在 Armv8.1-M 实现中,可选的性能监控扩展(Performance Monitors Extension)增加了对性能监控单元(Performance Monitor Unit,PMU)的支持。
更多信息请参见第 B15 章《性能监控扩展》(The Performance Monitors Extension)。
对性能监控扩展的支持由 PMU_TYPE.N 指示。
适用于 Armv8.1-M 及以后架构版本的实现。
4.11. 可靠性、可用性与可服务性¶
在 Armv8.1-M 实现中,可靠性、可用性与可服务性(Reliability, Availability, and Serviceability,RAS)扩展增加了额外的调试支持。最小 RAS 扩展在 Armv8.1-M 实现中是强制要求的。
更多信息请参见第 B16 章《可靠性、可用性与可服务性(RAS)扩展》(Reliability, Availability, and Serviceability (RAS) Extension)。
对 RAS 的支持由 ID_PFR0.RAS 指示。
适用于 Armv8.1-M 及以后架构版本的实现。
4.12. 安全扩展¶
Armv8-M 架构引入了可选的安全扩展(Security Extension),它提供一种机制来保护敏感数据、内存区域和其他资源。这通过指令和硬件创建安全状态(Secure state)来实现,该状态受到保护,免受非安全状态(Non-secure state)的影响。
从 Armv8.1-M 起,SG 指令上的 Thread 模式可重入性可以被禁用。
适用于 Armv8.1-M 及以后架构版本的实现。
在带有主扩展的 PE 中,对安全扩展的支持由 ID_PFR1.Security 指示。
注意: Armv8-M 安全扩展也可称为面向 Armv8-M 的 Arm TrustZone(Arm TrustZone for Armv8-M)。
4.13. 系统定时器扩展¶
系统定时器扩展(System Timer Extension,也称为 SysTick)提供一个递减、归零回绕、写清零的计数器。
对于不带主扩展的 PE,它是一项可选特性;实现零个、一个还是两个计数器是 IMPLEMENTATION DEFINED。如果实现一个定时器,则在实现了安全扩展时由各安全状态共享;如果实现两个定时器,则每个安全状态拥有一个专用定时器。
在带有主扩展的实现中,每个安全状态实现一个定时器。
更多信息请参见第 B11 章《系统定时器,SysTick》(The System Timer, SysTick)。