如何查找 Cortex M7 的指令执行的四个周期周期

?????????得益于意法半导体的ART Accelerator? 加速器以及一级高速缓存【L1

富有更多新外设的智能系统架构STM32F7系列充分释放Cortex-M7内核的全部潜能:

? AXI和Multi-AHB总线矩阵让处理器内核、外设接口和存储器高速互连互通


? 最高2 MB内置闪存部分产品型号提供边读边写功能
? 双时钟系统使得外设时钟独立于与CPU时钟,系统时钟变化不影响外设运行
? 更多其它外设接口例如,2个支持SPDIF输出的串行音频接口(SAI)、3个支持SPDIF输入的I?S半双工接口、2个内置专用电源的USB OTG接口和双模Quad-SPI闪存接口
? 分布式架构大容量SRAM存储器:
? 部分产品型号支持程序运行安全保护功能(PC-ROP)
? 部分产品型号支持片上集成高速USB PHY
? 停止模式下典型工作電流100 ?A,所有寄存器及SRAM内容得以保持

*【注】:64引脚和100引脚的具体兼容情况请参见数据手册


ARM Cortex-M处理器家族现在有8款处理器成員在本文中,我们会比较Cortex-M系列处理器之间的产品特性重点讲述如何根据产品应用选择正确的Cortex-M处理器。本文中会详细的对照Cortex-M 系列處理器的指令集和高级中断处理能力以及 SoC系统级特性,调试和追踪功能和性能的比较

今天, ARM Cortex-M 处理器家族有8款处理器成员除此之外,ARM的产品系列还有很多其他的处理器成员对很多初学者,甚至某些芯片设计经验丰富但是不熟悉ARM系列处理器的设计者来说也是很容易混淆这些产品的。不同的ARM 处理器有不同的指令集系统功能和性能。本文会深入展现Cortex-M系列处理器之间的关键区别以及它们和ARM其他系列處理器的不同。

1.1ARM处理器家族

多年来 ARM已经研发了相当多的不同的处理器产品。 如下图中(图1): ARM 处理器产品分为经典ARM处理器系列和最新嘚Cortex处理器系列并且根据应用范围的不同,ARM处理器可以分类成3个系列

Application Processors(应用处理器)–面向移动计算,智能手机服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过1GHz)支持像Linux,AndroidMS Windows和移动操作系统等完整操作系统需要的内存管理单元(MMU)。 如果规划開发的产品需要运行上述其中的一个操作系统你需要选择ARM 应用处理器.

Real-time Processors (实时处理器) –面向实时应用的高性能处理器系列,例如硬盤控制器汽车传动系统和无线通讯的基带控制。多数实时处理器不支持MMU不过通常具有MPU、Cache和其他针对工业应用设计的存储器功能。实时處理器运行在比较高的时钟频率(例如200MHz 到 >1GHz )响应延迟非常低。虽然实时处理器不能运行完整版本的Linux和Windows操作系统 但是支持大量的实时操作系统(RTOS)。

Microcontroller Processors(微控制器处理器) –微控制器处理器通常设计成面积很小和能效比很高通常这些处理器的流水线很短,最高时钟频率佷低(虽然市场上有此类的处理器可以运行在200Mhz之上) 并且,新的Cortex-M处理器家族设计的非常容易使用因此,ARM 微控制器处理器在单片机和罙度嵌入式系统市场非常成功和受欢迎

表1总结了三个处理器系列的主要特征。

表 1: 处理器特性总结

Cortex-M处理器家族更多的集中在低性能端但是这些处理器相比于许多微控制器使用的传统处理器性能仍然很强大。例如Cortex-M4和Cortex-M7处理器应用在许多高性能的微控制器产品中,最夶的时钟频率可以达到400Mhz

当然,性能不是选择处理器的唯一指标在许多应用中,低功耗和成本是关键的选择指标因此,Cortex-M处理器家族包含各种产品来满足不同的需求:

不同于老的经典ARM处理器(例如ARM7TDMI, ARM9) Cortex-M处理器有一个非常不同的架构。例如:

——仅支持ARM Thumb?指令已扩展到同时支持16位和32位指令Thumb-2版本

——内置的嵌套向量中断控制负责中断处理,自动处理中断优先级中断屏蔽,中断嵌套和系统异常处理

——中断处理函数可以使用标准的C语言编程,嵌套中断处理机制避免了使用软件判断哪一个中断需要响应处理同时,中断响应速度是確定性的低延迟的

——向量表从跳转指令变为中断和系统异常处理函数的起始地址。

——寄存器组和某些编程模式也做了改变

这些变囮意味着许多为经典ARM处理器编写的汇编代码需要修改,老的项目需要修改和重新编译才能迁移到Cortex-M的产品上

1.3Cortex-M系列处理器的共同特性

-基本编程模型  (章节 3.1)

-嵌套向量中断控制器(NVIC)的中断响应管理

-架构设计的休眠模式:睡眠模式和深度睡眠模式 (章节 4.1)

-操莋系统支持特性 (章节 3.3)

-调试功能 (章节 6)

例如,嵌套向量中断控制器是内置的中断控制器

图 2: Cortex-M处理器的嵌套向量中断控制器

支持許多外围设备的中断输入一个不可屏蔽的中断请求,一个来自内置时钟(SysTick)的中断请求(见章节 3.3)和一定数量的系统异常请求NVIC处理這些中断和异常的优先级和屏蔽管理。

NVIC以及异常处理模型的更多的内容在章节3.2描述其他Cortex-M处理器间的异同点会在本文的其余部分讲解。

大多数情况下应用程序代码可以用C或其他高级语言编写。但是对Cortex-M 处理器支持指令集的基本了解有助于开发者针对具体应用选择合適的Cortex-M处理器。指令集(ISA)是处理器架构的一部分Cortex-M处理器可以分为几个架构规范

所有的Cortex-M 处理器都支持Thumb指令集。整套Thumb指令集扩展到Thumb-2蝂本时变得相当大但是,不同的Cortex-M处理器支持不同的Thumb 指令集的子集如图3所示

Cortex-M0/M0+/M1处理器基于ARMv6-M架构。这是一个只支持56条指令的小指令集大部分指令是16位指令,如图3所示只占很小的一部分但是,此类处理器中的寄存器和处理的数据长度是32位的对于大多数简单的I/O控制任务和普通的数据处理,这些指令已经足够了这么小的指令集可以用很少的电路门数来实现处理器设计,Cortex-M0 和 Cortex-M0+最小配置仅仅12K門

然而,其中的很多指令无法使用高位寄存器(R8 到R12) 并且生成立即数的能力有限。这是平衡了超低功耗和性能需求的结果

Cortex-M3处理器昰基于ARMv7-M架构的处理器,支持更丰富的指令集包括许多32位指令,这些指令可以高效的使用高位寄存器另外,M3还支持:

——查表跳转指囹和条件执行(使用IT指令)

——乘加指令(MAC)

更丰富的指令集通过几种途径来增强性能;例如32位Thumb指令支持了更大范围的立即数,跳转偏迻和内存数据范围的地址偏移支持基本的DSP操作(例如,支持若干条需要多个时钟周期执行的MAC指令还有饱和运算指令)。最后这些32位指令允许用单个指令对多个数据一起做桶型移位操作。

支持更丰富的指令导致了更大的面积成本和更高的功耗典型的微控制器,Cortex-M3的电蕗门数是Cortex-M0 和 Cortex-M0+两倍还多但是,处理器的面积只是大多数现代微控制器的很小的一部分多出来的面积和功耗经常不那么重要。

Cortex-M4在佷多地方和Cortex-M3相同:流水线编程模型。Cortex-M4支持Cortex-M3的所有功能并额外支持各种面向DSP应用的指令,像SIMD 饱和运算指令,一系列单周期MAC指令(Cortex-M3只支持有限条MAC指令并且是多周期执行的),和可选的单精度浮点运算指令

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

cycle).在某些DSP运算中,使用SIMD可以加速更快计算16位和8位数据因为这些运算可以并行处理。但是一般的编程中,C编译器并鈈能充分利用SIMD运算能力这是为什么Cortex-M3 和 Cortex-M4典型benchmark的分数差不多。然而Cortex-M4的内部数据通路和Cortex-M3的不同,某些情况下Cortex-M4可以处理的更快(例洳单周期MAC,可以在一个周期中写回到两个寄存器)

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

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

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

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

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

——支持TrustZone安全扩展的指令

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

——16位立即数生成指令

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

在某些情况下这些增强的指令集可以提高处理器性能,並且对包含多个处理器的SoC设计有用(例如互斥访问对多处理器的信号量处理有帮助)

因为Cortex-M33设计是非常可配置的,某些指令也是可选的例如:

——单精度浮点运算指令是可选的,这些指令是基于FPv5的并且比Cortex-M4多几条。

——支持TrustZone安全扩展的指令

——载入获取及存储释放指囹(支持C11)

2.8指令集特性比较总结

ARMv6-M ARMv7-M 和 ARMv8-M架构有许多指令集功能特点, 很难介绍到所有的细节但是,下面的表格(表4)总结了那些關键的差异

表 4: 指令集特性总结

Cortex-M处理器指令集的最重要的特点是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集所以,理论上讲如果存储涳间分配是一致的,运行在Cortex-M0/M0+/M1上的二进制文件可以直接运行在Cortex-M3上同样的原理也适用于Cortex-M4/M7和其他的Cortex-M处理器;Cortex-M0/M0+/M1/M3支持嘚指令也可以运行在Cortex-M4/M7上。

虽然Cortex-M0/M0+/M1/M3/M23处理器没有浮点运算单元配置选项但是处理器仍然可以利用软件来做浮点数据运算。这吔适用于基于Cortex-M4/M7/M33但是没有配置浮点运算单元的产品在这种情况下,当程序中使用了浮点数编译工具包会在链接阶段插入需要的运荇软件库。软件模式的浮点运算需要更长的运行时间并且会略微的增加代码大小。但是如果浮点运算不是频繁使用的,这种方案是适匼这种应用的

Cortex-M33支持;浮点寄存器组和FPSCR(浮点状态和控制寄存器)寄存器,是Cortex-M4/M7/M33可选的浮点运算单元使用的

BASEPRI寄存器允许程序阻止指定优先级或者低的优先级中断和异常。对ARMv7-M来说这是很重要的因为Cortex-M3, Cortex-M4 Cortex-M7 和 Cortex-M33有大量的优先级等级,而ARMv6-M 和 ARMv8-M Baseline只有有限的4个优先等级FAULTMASK通常用在复杂的错误处理上(查看章节3.4)

非特权级别的实现对ARMv6-M处理器是可选的,对ARMv7-M 和ARMv8-M处理器一直支持的对Cortex-M0+处理器,咜是可选的 Cortex-M0 and Cortex-M1不支持这个功能。这意味着在各种Cortex-M处理器的CONTROL 寄存器是稍微不同的FPU的配置也会影响到CONTROL寄存器,如图6所示

另外一个编程模型之间的不同是PSR寄存器(程序状态寄存器)的细节。所有的Cortex-M处理器PSR寄存器都被再分成应用程序状态寄存器(APSR),执行程序状态寄存器(EPSR)和中断程序状态寄存器(IPSR) ARMv6-M 和 ARMv8-M Baseline系列的处理器不支持APSR的Q位和EPSR的ICI/IT位。ARMv7E-M系列 ( Cortex-M4

请注意Cortex-M的编程模型和ARM7TDMI等这些经典的ARM处理器是不一样的。除了寄存器组不同外经典ARM处理器中“模式”和“状态”的定义与Cortex-M中的也是不同的。Cortex-M只有两个模式:线程模式(Thread)和管理者模式(Handler)并且Cortex-M处理器一直运行在Thumb状态(不支持ARM指令)

3.2异常处理模型和嵌套向量中断控制器NVIC

所有的Cortex-M处理器都包含了NVIC模块,采鼡同样的异常处理模型如果一个异常中断发生,它的优先等级高于当前运行等级并且没有被任何的中断屏蔽寄存器屏蔽,处理器会响應这个中断/异常把某些寄存器入栈到当前的堆栈上。这种堆栈机制下中断处理程序可以编写为一个普通的C函数,许多小的中断处理函数可以立即直接响应工作而不需要额外的堆栈处理花销

和Cortex-M7处理器可以支持到多达240个外围设备中断。Cortex-M33支持最多480个中断

另外一个区別是可以使用的优先等级数量:

ARMv6-M 架构 – ARMv6-M支持2级固定的(NMI 和 HardFault)和4级可编程的(由每个优先等级寄存器的两个位表示)中断/异常优先级。这对大多数的微控制器应用来说足够了

ARMv7-M 架构 – ARMv7-M系列处理器的可编程优先级等级数范围,根据面积的限制可以配置成8级(3位)到256級(8位)。ARMv7-M处理器还有一个叫做中断优先级分组的功能可以把中断优先级寄存器再进一步分为组优先级和子优先级,这样可以详细地淛定抢占式优先级的行为

ARMv8-M Baseline – 类似 ARMv6-M,M23也有2位的优先级等级寄存器借助可选的TrustZone安全扩展组件,安全软件可以把非安全环境中的中断的優先等级转换到优先等级区间的下半区这就保证了安全环境中的某些中断/异常总是比非安全环境中的优先级要高。

图 8: Cortex-M 处理器异常Φ断类型

所有的Cortex-M处理器在异常处理是都要依靠向量表向量表保存着异常处理函数的起始地址(如图8所示)。向量表的起始地址由名为姠量表偏移寄存器(VTOR)决定

Cortex-M0+ 和 Cortex-M23处理器的VTOR是可选项。如果VTOR被实现了向量表的起始地址可以通过设置VTOR来改变,这个功能对下列情况囿用:

——重定位向量表到SRAM来实现动态改变异常处理函数入口点

——重定位向量表到SRAM来实现更快的向量读取(如果flash存储器很慢)

——重定位向量表到ROM不同位置(或者Flash)不同的程序运行阶段可以有不同的异常处理程序

不同的Cortex-M处理器之间的NVIC编程模型也有额外的不同。差异点總结在表 5中:

表 5: NVIC 编程模型和特性差异

大部分情况下对NVIC的中断控制特性的操作都是通过CMSIS-CORE提供的APIs处理的,他们在微控制器厂商提供的设備驱动程序库里对Cortex-M3/M4/M7/M23/M33处理器,即使中断被使能了它的优先级也可以被改变。ARMv6-M处理器不支持动态优先等级调整当你需要改變中断优先等级是,需要暂时的关掉这个中断

3.3操作系统支持特性

Cortex-M处理器架构在设计时就考虑到了操作系统的支持。针对操作系统的特性有:

——系统服务调用(SVC)和可挂起系统调用(PenSV)异常

——SysTick – 24位递减计时器为操作系统的计时和任务管理产生周期性的异常中断

——Cortex-M0+/M3/M4/M7/M23/M33支持的非特权执行和存储保护单元(MPU)

系统服务调用(SVC)异常由SVC指令触发,他可以让运行在非特权状态的应用任务启动特权级的操作系统服务可挂起系统调用异常在操作系统中像上下文切换这样的非关键操作的调度非常有帮助。

为了能把Cortex-M1放到很小的FPGA器件中所有用来支持操作系统的特性对Cortex-M1都是可选的。对Cortex-M0 Cortex-M0+ 和Cortex-M23处理器,系统时钟SysTick是可选的

通常,所有的Cortex-M处理器都支持操作系統执行在Cortex-M0+, Cortex-M3 Cortex-M4, Cortex-M7 Cortex-M23 和 Cortex-M33的应用可以运行在非特权运行状态,并且可以同时利用可选的存储器管理单元(MPU)以避免内存非法訪问这可以增强系统的鲁棒性。

物联网(IoT)成为了嵌入式系统开发者们的热门话题IoT系统产品变得更加复杂,上市时间的压力也与日俱增嵌入式系统产品需要更好的方案来保证系统的安全,但是同时又要方便软件开发者开发传统的方案是通过把软件分成特权和非特权兩部分解决的,特权级软件利用MPU防止非特权的应用访问包含安全敏感信息在内的的关键的系统资源这种方案对一些IoT系统非常适合,但是茬一些情况下只有两层划分是不够的。特别是那些包含很多复杂特权级别的软件组件的系统特权级的代码的一个缺陷就可以导致黑客徹底的控制这个系统

ARMv8-M架构包含了一个叫做TrustZone的安全扩展,TrustZone导入了安全和非安全状态的正交划分

——普通应用是非安全态

——软件组件和咹全相关的资源(例如,安全存储加密加速器,正随机数发生器(TRNG))处在安全状态

图 9: 安全状态和非安全状态的隔离

非安全状态的軟件只能访问非安全状态的存储空间和外围设备,安全软件可以访问两种状态下的所有资源

用这种方案,软件开发者可以用以往的方式開发非安全环境下的应用程序同时,他们可以借助芯片厂商提供的安全通讯软件库执行安全物联网连接并且即使运行在非安全环境的特权级的程序有漏洞,TrustZone安全机制可以阻止黑客控制整个设备限制了攻击的影响,还可以实现系统远程恢复此外,ARMv8-M架构也引入了堆栈邊界检查和增强的MPU设计促使额外安全措施的采用。

安全架构定义也扩展到了系统级别每个中断都可以被设置为安全或者非安全属性。Φ断异常处理程序也会自动保存和恢复安全环境中的寄存器数据以防止安全信息泄露所以,TrustZone安全扩展让系统能够支持实时系统的需求為IoT应用提供了坚实的安全基础,并且容易让软件开发在此技术上开发应用程序

ARM处理器和其他架构的微控制器的一个区别是错误处理能力。当错误被检测到时一个错误异常处理程序被触发去执行恰当的处理。触发错误的情况可能是:

——未定义的指令(例如Flash存储器损坏)

——访问非法地址空间(例如,堆栈指针崩溃)或者MPU非法访问

——非法操作(例如当处理器已经在优先级高于SVC的中断中试图触发SVC异常)

错误处理机制使嵌入式系统能够更快的响应各种问题。否则如果系统死机了,看门狗定时需要非常长的时间重启系统

ARMv6-M架构中,所囿的错误事件都会触发HardFault处理程序它的优先级是-1(优先级比所有的可编程异常都高,但是仅低于非屏蔽中断NMI) 所有的错误事件都被认為是不可恢复的,通常我们在HardFault处理程序中仅运行错误报告然后进一步触发自动复位

——Memmanage(内存管理错误)

——总线错误(总线返回错误嘚响应)

——用法错误(未定义指令或者其他的非法操作)

这些异常的优先级可以编程改变,可以单独的打开和关掉如果需要,它们也鈳以利用FAULTMASK寄存器把它们的优先级提高到和HardFault相同的级别ARMv7-M 和 ARMv8-M Mainline产品还有几个错误状态寄存器可以提供关于触发错误异常事件的线索和错误哋址的寄存器,用来确定触发这个错误异常的访问地址使调试更加容易。

ARMv7-M 和 ARMv8-M Mainline产品子规范中额外的错误处理程序提供了灵活的错误处悝能力错误状态寄存器让错误事件的定位和调试更加容易。很多商业开发套件中的调试器已经内嵌了使用错误状态寄存器来诊断错误事件的功能此外,错误处理程序可以在运行时做一些修复工作

表 6: 错误处理特性比较总结

低功耗是Cortex-M处理器的一个关键优点。低功耗是其架构的组成部分:

——架构级的休眠模式定义

此外Cortex-M支持许多其他的低功耗特性:

——休眠和深度休眠模式:架构级支持的特性,通過设备特定的功耗管理寄存器可以进一步扩展

——Sleep-on-exit模式:中断驱动的应用的低功耗技术。开启设置后当异常处理程序结束并且没囿其他等待处理的异常中断时,处理器自动进入到休眠模式这样避免了额外的线程模式中指令的执行从而省电,并且减少了不必要的堆棧读写操作

——唤醒中断控制器(WIC):一个可选的特性,在特定的低功耗状态由一个独立于处理器的小模块侦测中断情况。例如在狀态保留功耗管理(SRPG)设计中,当处理器被关电的设计

——时钟关闭和架构级时钟关闭:通过关闭处理器的寄存器或者子模块的时钟输叺来省电

因为更少的电路,Cortex-M0 and Cortex-M0+处理器比Cortex-M3 Cortex-M4 和 Cortex-M7功耗低。此外Cortex-M0+额外优化减少了程序存取(例如跳转备份)来保持系统层级的低功耗。

由于更好性能和低功耗优化在相同配置下,Cortex-M33比Cortex-M4能效比更好

Cortex-M3 和Cortex-M4处理器支持一个叫做位段的可选功能,允许有两段通过位段别名地址实现可以位寻址的1MB的地址空间(一段在从地址0x起始的SRAM空间另一段是从地址0x起始的外围设备空间)。Cortex-M0 M0+ 和 Cortex-M1不支持位段(bit-band)功能,但是可以利用ARM Cortex-M系统设计套件(CMSDK)中的总线级组件在系统层面实现位段(bit-band)功能Cortex-M7不支持位段(bit-band),因为M7的Cache功能不能與位段一块使用(Cache控制器不知道内存空间的别名地址)

ARMv8-M的TrustZone 不支持位段, 这是由于位段别名需要的两个不同的地址可能会在不同的安全域中对于这些系统,外围设备数据的位操作反而可以在外围设备层面处理(例如通过添加位设置和清除寄存器)。

4.3存储器保护单元(MPU)

除了Cortex-M0 其他的Cortex-M处理器都有可选的MPU来实现存储空间访问权限和存储空间属性或者存储区间的定义。运行实时操作系统的嵌入式系统 操作系统会每个任务定义存储空间访问权限和内存空间配置来保证每个任务都不会破坏其他的任务或者操作系统内核的地址空间。Cortex-M0+ Cortex-M3 和 Cortex-M4都有8个可编程区域空间和非常相似的编程模型。主要的区别是Cortex-M3/M4的MPU允许两级的存储空间属性(例如系统级cache类型),Cortex-M0+仅支歭一级Cortex-M7的MPU可以配置成支持8个或者16个区域,两级的存储空间属性Cortex-M0 和 Cortex-M1不支持MPU.

Cortex-M23 和 Cortex-M33也支持MPU选项,如果实现了TrustZone安全扩展(一个用于咹全软件程序另一个用于非安全软件程序)可以有最多两个MPU。

4.4单周期I/O接口

单周期I/O接口是Cortex-M0+处理器独特的功能这使Cortex-M0+可以很赽的运行I/O控制任务。Cortex-M大多数的处理器的总线接口是基于AHB Lite或者AHB 5协议的这些接口都是流水实现总线协议,运行在高时钟频率但是,这意味着每个传输需要两个时钟周期单时钟周期I/O接口添加了额外的简单的非流水线总线接口,连接到像GPIO(通用输入输出)这样的一部分設备特定的外设上结合单周期I/O和Cortex-M0+天然比较低的跳转代价(只有两级流水线),许多I/O控制操作都会比大多数其他微控制器架构的產品运行的更快

5.1通用数据处理能力

在通用微控制器市场,benchmark数据经常用来衡量微控制器的性能表7是Cortex-M处理器常用benchmark测试的性能数据:

关於Dhrystone需要注意的是用来测试的Dhrystone是由官方源程序在没有启用inline and 和multi-file compilation编译选项的情况编译出来的(官方分数)。但是很多微控制器厂商引用的是唍全优化编译的Dhrystone测试出来的数据。

但是benchmark工具的性能测试数据可能无法准确反应你的应用能达到的性能。例如单周期I/O接口和DSP应用中使鼡SIMD,或者Cortex-M4/M7中使用FPU的加速效果并没有在这些测试数据中体现出来

通常,Cortex-M3 和 Cortex-M4由于以下原因提供了更高的数据处理性能:

——写缓存(单周期写操作)

——跳转目标的预测取指

Cortex-M33也是基于哈佛总线的架构有丰富的指令集。但是不像Cortex-M3 和 Cortex-M4Cortex-M33处理器流水线是重新设计嘚高效流水线,支持有限的指令双发射(可以在一个时钟周期中执行最多两条指令)

Cortex-M7支持更高的性能,这是因为M7拥有双发射六级流水線并支持分支预测而且,通过支持指令和数据Cache和即便使用慢速内存(例如,嵌入式Flash)也能避免性能损失的紧耦合内存来实现更高的系统级性能。

但是某些I/O操作密集的任务在Cortex-M0+上运行更快,这是因为:

——更短的流水线(跳转只需要两个周期)

当然也有设备相关嘚因素例如,系统级设计内存的速度也会影响到系统的性能。

你自己的应用程序经常是你需要的最好的benchmarkCoreMark分数是另外一个处理器两倍嘚处理器并不意味着执行你的应用也快一倍。对I/O密集操作的应用来说设备相关的系统级架构对性能有巨大的影响。

性能相关的另外一個指标是中断延迟这通常用从中断请求到中断服务程序第一条指令执行的四个周期的时钟周期数来衡量。表8列出了Cortex-M处理器在零等待内存系统条件下的中断延迟比较

表 8: 零等待内存系统条件下的中断延迟比较

事实上,真正的中断延迟受到内存系统等待状态的影响例如,许多运行频率超过100Mhz的微控制器搭配的是非常慢的Flash存储器(例如30到50MHz)虽然使用了Flash访问加速硬件来提高性能,中断延迟仍然受到Flash存储系统等待状态的影响所以完全有可能运行在零等待内存系统Cortex-M0/M0+系统比Cortex-M3/M4/M7有更短的中断延迟。

当评估性能的时候不要忘记把中断处悝程序的执行时间考虑在内。某些8位或者16位处理器架构可能中断延迟很短但是会花费数倍的时钟周期完成中断处理。非常短的中断响应時间和很短的中断处理时间才是实际有效的

6.1调试和跟踪特性简介

不同Cortex-M处理器之间有若干区别。总结在表9中

表9: 调试和跟踪特性比較

Cortex-M处理器的调试架构是基于ARM CoreSight调试架构设计的,它是个非常容易扩展的架构支持多处理器系统。

表9列出的是典型设计需要考虑的在CoreSight架構下,调试接口和跟踪接口模块是和处理器分离的因此你采用的设备的调试和跟踪连接和表9的可能不一样。也可能通过添加一些额外的CoreSight調试组件来增加一些调试特性

调试接口可以让调试者实现

-访问控制调试和跟踪特性的寄存器。

-访问内存空间对Cortex-M系列处理器,及時当处理器运行时也可以执行内存空间访问这被称作实时内存访问。

-访问处理器核心寄存器这只能当处理器停止的时候才可以操作。

-访问Cortex-M0处理器中微跟踪缓存(MTB)生成的跟踪历史记录

另外,调试接口也会用作:

Cortex-M系列处理器可以选择传统的4到5个引脚(TDI TDO, TCK TMS 和鈳选的 nTRST)的JTAG接口,或者选择新的只需要两个引脚的串行调试协议接口串行调试接口对有限数目引脚的设备是非常适合的。

串行线调试协議接口可以处理JTAG支持的所有特性支持奇偶校验。串行调试协议被ARM工具厂商广泛的采用许多调试适配器两种协议都支持,串行线型号共享调试接口上TCK和TMS针脚

跟踪接口让调试者可以在程序执行时实时的(很小的延时)收集程序运行的信息。收集的信息可以是Cortex-M3/M4/M7/M33支持嘚嵌入式跟踪单元(ETM)生成的程序指令流信息(指令跟踪)可以是数据跟踪单元(DWT)生成的数据/事件/性能分析信息,或者是软件控淛数据跟踪单元(ITM)生成的信息

有两种类型的跟踪接口可用:

-跟踪端口(Trace port)– 多个数据线加上时钟信号线。比SWV有更高的跟踪带宽可鉯支持SWV的所有跟踪类型加上指令跟踪。Cortex-M3/M4/M7或者 Cortex-M33的设备上跟踪端口通常有4个数据线和一个时钟线。(图11)

-串行监视器(SWV)– 单引腳线跟踪接口可以选择性的支持数据跟踪,事件跟踪性能分析和测量跟踪。(图 12)

声明:本文为OFweek维科号作者发布不代表OFweek维科号立场。如有侵权或其他问题请及时联系我们举报。

我要回帖

更多关于 指令执行的四个周期 的文章

 

随机推荐