Joseph Yiu, 高级嵌入式技术经理, ARM
William Gao, ARM 中国应用工程师与 Gabriel Wang,ARM 中国嵌入式应用工程师对于本文中文版亦有帮助
概要
ARMCortex-M 处理器家族现在有 8 款处理器成员。在本文中,我们会比较 Cortex-M 系列处理器之间的产品特性,重点讲述如何根据产品应用选择正确的 Cortex-M 处理器。本文中会详细的对照 Cortex-M 系列处理器的指令集和高级中断处理能力,以及 SoC 系统级特性,调试和追踪功能和性能的比较。
1 简介
今天,ARM Cortex-M 处理器家族有 8 款处理器成员。除此之外,ARM 的产品系列还有很多其他的处理器成员。对很多初学者,甚至某些芯片设计经验丰富但是不熟悉 ARM 系列处理器的设计者来说,也是很容易混淆这些产品的。不同的 ARM 处理器有不同的指令集,系统功能和性能。本文会深入展现 Cortex-M 系列处理器之间的关键区别,以及它们和 ARM 其他系列处理器的不同。
1.1ARM 处理器家族
多年来, ARM 已经研发了相当多的不同的处理器产品。 如下图中(图 1): ARM 处理器产品分为经典 ARM 处理器系列和最新的 Cortex 处理器系列。并且根据应用范围的不同,ARM 处理器可以分类成 3 个系列。
Application Processors(应用处理器)–面向移动计算,智能手机,服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过 1GHz),支持像 Linux,Android,MS Windows 和移动操作系统等完整操作系统需要的内存管理单元(MMU)。 如果规划开发的产品需要运行上述其中的一个操作系统,你需要选择 ARM 应用处理器 .
Real-time Processors (实时处理器)–面向实时应用的高性能处理器系列,例如硬盘控制器,汽车传动系统和无线通讯的基带控制。多数实时处理器不支持 MMU,不过通常具有 MPU、Cache 和其他针对工业应用设计的存储器功能。实时处理器运行在比较高的时钟频率(例如 200MHz 到 >1GHz ),响应延迟非常低。虽然实时处理器不能运行完整版本的 Linux 和 Windows 操作系统, 但是支持大量的实时操作系统(RTOS)。
Microcontroller Processors(微控制器处理器)–微控制器处理器通常设计成面积很小和能效比很高。通常这些处理器的流水线很短,最高时钟频率很低(虽然市场上有此类的处理器可以运行在 200Mhz 之上)。 并且,新的 Cortex-M 处理器家族设计的非常容易使用。因此,ARM 微控制器处理器在单片机和深度嵌入式系统市场非常成功和受欢迎。
图 1: 处理器家族
表 1 总结了三个处理器系列的主要特征。
表 1: 处理器特性总结
1.2Cortex-M 处理器家族
Cortex-M 处理器家族更多的集中在低性能端,但是这些处理器相比于许多微控制器使用的传统处理器性能仍然很强大。例如,Cortex-M4 和 Cortex-M7 处理器应用在许多高性能的微控制器产品中,最大的时钟频率可以达到 400Mhz。
当然,性能不是选择处理器的唯一指标。在许多应用中,低功耗和成本是关键的选择指标。因此,Cortex-M 处理器家族包含各种产品来满足不同的需求:
表 2: Cortex-M 处理器家族
不同于老的经典 ARM 处理器(例如,ARM7TDMI, ARM9), Cortex-M 处理器有一个非常不同的架构。例如:
- 仅支持 ARM Thumb®指令,已扩展到同时支持 16 位和 32 位指令 Thumb-2 版本
- 内置的嵌套向量中断控制负责中断处理,自动处理中断优先级,中断屏蔽,中断嵌套和系统异常处理。
- 中断处理函数可以使用标准的 C 语言编程,嵌套中断处理机制避免了使用软件判断哪一个中断需要响应处理。同时,中断响应速度是确定性的,低延迟的
- 向量表从跳转指令变为中断和系统异常处理函数的起始地址。
- 寄存器组和某些编程模式也做了改变。
这些变化意味着许多为经典 ARM 处理器编写的汇编代码需要修改,老的项目需要修改和重新编译才能迁移到 Cortex-M 的产品上。软件移植具体的细节记录在 ARM 文档:
ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers
https://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf
1.3Cortex-M 系列处理器的共同特性
Cortex-M0, M0+, M3, M4 and M7 之间有很多的相似之处,例如:
- 基本编程模型 (章节 3.1)
- 嵌套向量中断控制器(NVIC)的中断响应管理
- 架构设计的休眠模式:睡眠模式和深度睡眠模式 (章节 4.1)
- 操作系统支持特性 (章节 3.3)
- 调试功能 (章节 6)
- 易用性
例如,嵌套向量中断控制器是内置的中断控制器
图 2: Cortex-M 处理器的嵌套向量中断控制器
支持许多外围设备的中断输入,一个不可屏蔽的中断请求,一个来自内置时钟(SysTick)的中断请求(见章节 3.3)和一定数量的系统异常请求。NVIC 处理这些中断和异常的优先级和屏蔽管理。
NVIC 以及异常处理模型的更多的内容在章节 3.2 描述。其他 Cortex-M 处理器间的异同点会在本文的其余部分讲解。
2Cortex-M 处理器指令集
2.1 指令集简介
大多数情况下,应用程序代码可以用 C 或其他高级语言编写。但是,对 Cortex-M 处理器支持指令集的基本了解有助于开发者针对具体应用选择合适的 Cortex-M 处理器。指令集(ISA)是处理器架构的一部分,Cortex-M 处理器可以分为几个架构规范
表 3: Cortex-M 处理器 ARM 架构规范的规范
所有的 Cortex-M 处理器都支持 Thumb 指令集。整套 Thumb 指令集扩展到 Thumb-2 版本时变得相当大。但是,不同的 Cortex-M 处理器支持不同的 Thumb 指令集的子集,如图 3 所示
图 3: Cortex-M 处理器的指令集
2.2Cortex-M0/M0+/M1 指令集
Cortex-M0/M0+/M1 处理器基于 ARMv6-M 架构。这是一个只支持 56 条指令的小指令集,大部分指令是 16 位指令,如图 3 所示只占很小的一部分。但是,此类处理器中的寄存器和处理的数据长度是 32 位的。对于大多数简单的 I/O 控制任务和普通的数据处理,这些指令已经足够了。这么小的指令集可以用很少的电路门数来实现处理器设计,Cortex-M0 和 Cortex-M0+最小配置仅仅 12K 门。然而,其中的很多指令无法使用高位寄存器(R8 到 R12), 并且生成立即数的能力有限。这是平衡了超低功耗和性能需求的结果。
2.3Cortex-M3 指令集
Cortex-M3 处理器是基于 ARMv7-M 架构的处理器,支持更丰富的指令集,包括许多 32 位指令,这些指令可以高效的使用高位寄存器。另外,M3 还支持:
·查表跳转指令和条件执行(使用 IT 指令)
·硬件除法指令
·乘加指令(MAC)
·各种位操作指令
更丰富的指令集通过几种途径来增强性能;例如,32 位 Thumb 指令支持了更大范围的立即数,跳转偏移和内存数据范围的地址偏移。支持基本的 DSP 操作(例如,支持若干条需要多个时钟周期执行的 MAC 指令,还有饱和运算指令)。最后,这些 32 位指令允许用单个指令对多个数据一起做桶型移位操作。
支持更丰富的指令导致了更大的面积成本和更高的功耗。典型的微控制器,Cortex-M3 的电路门数是 Cortex-M0 和 Cortex-M0+两倍还多。但是,处理器的面积只是大多数现代微控制器的很小的一部分,多出来的面积和功耗经常不那么重要。
2.4Cortex-M4 指令集
Cortex-M4 在很多地方和 Cortex-M3 相同:流水线,编程模型。Cortex-M4 支持 Cortex-M3 的所有功能,并额外支持各种面向 DSP 应用的指令,像 SIMD, 饱