一文看懂ARM Cortex-M处理器

2019-11-15来源: eefocus关键字:ARM  Cortex-M  处理器

ARM Cortex-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

http://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处理器间的异同点会在本文的其余部分讲解。


2、Cortex-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, 饱和运算指令,一系列单周期MAC指令(Cortex-M3只支持有限条MAC指令,并且是多周期执行的),和可选的单精度浮点运算指令。

Cortex-M4的SIMD操作可以并行处理两个16位数据和4个8位数据。例如,图4展示的QADD8 和 QADD16 操作:

图 4: SIMD指令例子: QADD8 and QADD16

The uses of SIMD enable much faster computation of 16-bit and 8-bit data in certain DSP operations as the calculation can be parallelized. However, in general programming, C compilers are unlikely to utilize the SIMD capability. That is why the typical benchmark results of the Cortex-M3 and Cortex-M4. However, the internal data path of the Cortex-M4 is different from Cortex-M3, which enable faster operations in a few cases (e.g. single cycle MAC, and allow write back of two registers in a single cycle).在某些DSP运算中,使用SIMD可以加速更快计算16位和8位数据,因为这些运算可以并行处理。但是,一般的编程中,C编译器并不能充分利用SIMD运算能力。这是为什么Cortex-M3 和 Cortex-M4典型benchmark的分数差不多。然而,Cortex-M4的内部数据通路和Cortex-M3的不同,某些情况下Cortex-M4可以处理的更快(例如,单周期MAC,可以在一个周期中写回到两个寄存器)。


2.5Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:

  • 浮点数据架构是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持额外浮点指令

  • 可选的双精度浮点数据处理指令

  • 支持缓存数据预取指令(PLD)

Cortex-M7的流水线和Cortex-M4的非常不同。Cortex-M7是6级双发射流水线,可以获得更高的性能。多数为Cortex-M4设计的软件可以直接运行在Cortex-M7上。但是,为了充分利用流水线差异来达到最好的优化,软件需要重新编译,并且在许多情况下,软件需要一些小的升级,以充分利用像Cache这样的新功能。


2.6Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子规范,它是ARMv6-M的超集。扩展的指令包括:

  • 硬件除法指令

  • 比较和跳转指令,32位跳转指令

  • 支持TrustZone安全扩展的指令

  • 互斥数据访问指令(通常用于信号量操作)

  • 16位立即数生成指令

  • 载入获取及存储释放指令(支持C11)

在某些情况下,这些增强的指令集可以提高处理器性能,并且对包含多个处理器的SoC设计有用

[1] [2] [3] [4]
关键字:ARM  Cortex-M  处理器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic480153.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32系统总线
下一篇:STM32总线架构笔记

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Azure ARM (20) 将非托管磁盘虚拟机,迁移成托管磁盘虚拟机
  在笔者之前的文章中,我们如果需要使用Azure虚拟机,必须预先创建一个Azure存储账户(Storage Account),用来保存虚拟机的VHD文件。  这会有几个问题:  1.一个Azure Storage Account存储账户,会有20000个IOPS的性能瓶颈。  如果我们把过多的Azure VHD文件保存在同一个Storage Account,会由于IOPS性能瓶颈造成VM 磁盘吞吐量限制。  我们建议一般40个普通VHD放在同一个存储账户里,每个一个VHD的IOPS为500, 总共的IOPS = 40 X 500 = 20000 IOPS,刚好等于一个存储账户的最大IOPS   2.存储账户的高可用  当
发表于 2019-12-14
Azure ARM (20) 将非托管磁盘虚拟机,迁移成托管磁盘虚拟机
Azure ARM (19) 将传统的ASM VM迁移到ARM VM (2)
  因为我们在上一节中: Azure ARM (18) 将传统的ASM VM迁移到ARM VM (1)  已经创建了Azure Virtual Network,则我们在迁移这个Virtual Network之后,就可以把该VNet里面的所有VM (LeiVM01和LeiVM02) 都迁移到ARM模式。    正式迁移分为两个部分:  1.在Azure PowerShell里,登录ARM模式,然后注册AzureRMResourceProvider,  2.注册成功后,再新来一个Azure PowerShell窗口。登录ASM模式,开始迁移ASM模式下的Virtual Network  3.迁移VNet成功之后,再迁移ASM
发表于 2019-12-14
Azure ARM (19) 将传统的ASM VM迁移到ARM VM (2)
Azure ARM (18) 将传统的ASM VM迁移到ARM VM (1)
  请先确认不要把持久化文件保存在  -Windows的D盘  -Linux的/dev/sdb1  上面的盘符不是持久化盘符,数据库会有丢失风险   目前很多客户陆续的把传统ASM VM迁移至ARM VM。我这里简单介绍一下。   整个迁移过程分为:  1.Validate,Azure平台对需要迁移的资源进行验证  2.Prepare,准备迁移  3.Check Manually,IT运维人员对迁移资源进行检查  4.Commit Or Abort,如果迁移成功则提交事务commit,如果失败则放弃Abort   准备迁移环境:  我们准备了以下需要迁移的ASM资源:  1.创建一个存储账户
发表于 2019-12-14
Azure ARM (18) 将传统的ASM VM迁移到ARM VM (1)
Azure ARM (17) 基于角色的访问控制 - 自定义Role
ARM里面有非常多的服务,比如Azure Storage, Azure Virtual Machine, Azure SQL Database等。  还有非常多的操作,比如Read, Delete, List等等。  如果需要了解具体每一个服务和相应的操作步骤,我们需要查询相应的操作步骤Action。  具体命令如下:#登录Azure China,以Admin身份登录Add-AzureRmAccount -Environment AzureChinaCloud#选择当前订阅Select-AzureRmSubscription -SubscriptionName '[订阅名称]'#获得所有对存储Storage的操作
发表于 2019-12-14
Azure ARM (17) 基于角色的访问控制 - 自定义Role
Azure ARM (16) 基于角色的访问控制 - 使用默认的Role
  熟悉Microsoft Azure平台的读者都知道,在老的Classic Portal里面,我们可以设置共同管理员(Co-admin)。  参考:Windows Azure Active Directory (3) China Azure AD增加新用户    但是Co-Admin和服务管理员(Service Admin)的权限是一样的。  比如上图的admin创建的任何资源,是可以被newuser这个用户删除的。这样不能进行权限控制。   在新的Azure ARM Portal里面,我们是可以根据不同的用户,对资源组(Resource Group)设置基于角色的访问控制 (Role Based Access
发表于 2019-12-14
Azure ARM (16) 基于角色的访问控制 - 使用默认的Role
Azure ARM (15) 根据现有VHD文件,创建ARM VM
  在很多时候,我们需要根据现有VHD文件,创建ARM VM。在这里笔者简单介绍一下相关的Azure PowerShell  这里介绍如何通过现有Linux OS Disk文件,新建ARM Linux VM。  请大家先安装Azure PowerShell:  https://azure.microsoft.com/zh-cn/downloads/  运行以下命令:Add-AzureRmAccount -EnvironmentName AzureChinaCloudSelect-AzureRmSubscription -SubscriptionName 'My Subscription'
发表于 2019-12-14
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved