Cortex-M3与ARM7优势比较
要使用低成本的 32 位处理器,开发人员面临两种选择基于Cortex-M3 内核或者ARM7TDMI 内核的处理器。如何做出选择?选择标准又是什么?
这里的ARM7TDMI指的是
TDMI 的基本含义为:
T-支持16 位压缩指令集Thumb
D-支持片上Debug
M-内嵌硬件乘法器(Multiplier)
I-嵌入式ICE,支持片上辅助调试
区别1:ARM实现方法不同
ARM Cortex-M3 是一种基于 ARM V7 架构的最新 ARM 嵌入式内核, 它采用哈佛结构,使用指令和数据分离的总线;
ARM7 是冯诺伊曼结构 冯诺伊曼结构下,数据和指令共用一条总线 。
一、哈佛结构:
哈佛(英语:Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。*处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点:
1) 使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;
2) 使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径, 而这两条总线之间毫无关联。
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令。目前使用哈佛结构的*处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11。
二、冯·诺依曼结构
冯·诺依曼结构(von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。本词描述的是一种实作通用图灵机的计算装置,以及一种相对于平行计算的序列式结构参考模型(referential model)。
本结构隐约指导了将储存装置与*处理器分开的概念,因此依本结构设计出的计算机又称储存程式型电脑。
冯.诺曼结构处理器具有以下几个特点:必须有一个存储器;必须有一个控制器;必须有一个运算器,用于完成算术运算和逻辑运算;必须有输入和输出设备,用于进行人机通信。例如 Internet 的X86 CPU。
区别二:支持的指令格式不同
ARM7 支持ARM和Thumb
Cortex-M3 支持最新的Thum-2
Cortex-M3这样设计相比于ARM7的优势有以下这些:
1) 免去Thumb和ARM代码的互相转换,对于早期处理器来说,这种状态会降低性能;
2) Thumb-2指令集的设计是专门面向C语言的,且包括If/Then结构(预测接下来的四条语句的执行条件),硬件除法以及本地位域操作;
3) Thumb-2 指令集允许用户在 C 代码层面维护和修改应用程序, C 代码部分非常易于重用;
4) Thumb-2 指令集也包含了调用汇编代码的功能;
5) 综合以上这些优势,新产品的开发将更易于实现,上市时间也大为缩
区别三:中断
Cortex-M3使用嵌套向量中断控制器NVIC( Nested Vector Interrupt Controller);
ARM7 使用外部中断控制器
两者具体差别如下:
1) 针对业界对ARM处理器中断响应的问题,Cortex-M3首次在内核上集成了嵌套向量中断控制器(NVIC),Cortex-M3的中断延迟只有12个时钟周期(ARM7需要24-42个周期);
2) Cortex-M3使用尾链技术,使得背靠背(back-to-back)中断的响应只需要6个时钟周期(ARM7需要大于30个周期);
3) Cortex-M3采用了基于栈的异常模式,使得芯片初始化的封装更为简单;
4) ARM7TDMI内核不带中断控制器,具体MCU的中断控制器是各芯片厂商自己加入的,这使得各厂商的ARM7 MCU中断控制部分都不一样,给用户使用及程序移植带来了很多麻烦。Cortex-M3内核集成NVIC,各厂商生产的基于Cortex-M3内核的MCU都具有统一的中断控制器,对用户使用各种Cortex-M3 MCU,特别是中断编程带来了很大的便利。
区别四:睡眠模式
Cortex-M3的电源管理方案通过NVIC支持Sleep Now, Sleep on Exit (退出最低优先级的ISR) and SLEEPDEEP modes这三种睡眠模式。为了产生定期的中断时间间隔, NVIC还集成了系统节拍计时器,这个计时器也可以作为RTOS和调度任务的心跳。这种做法与先前的ARM架构的不同之处就在于不需要外部时钟。
区别五:存储器保护单元
存储器保护单元是一个可选组件。选用了这个选项,内存区域就可以与应用程序特定进程按照其他进程所定义的规则联系在一起。例如,一些内存可以完全被其他进程阻止,而另外一部分内存能对某些进程表现为只读。还可以禁止进程进入存储器区域。可靠性,特别是实时性因此得到重大改进。
区别六:调试
对 Cortex-M3 处理器系统进行调试和追踪是通过调试访问端口( Debug Access Port )来实现的。调试访问端口可以是一个 2针的串行调试端口( Serial Wire Debug Port )或者串行 JTAG调试端口( Serial Wire JTAG Debug Port )。通过 Flash片、断点单元、数据观察点、跟踪单元,以及可选的嵌入式跟踪宏单元( Embedded Trace Macrocell )和指令跟踪宏单元( Instrumentation Trace Macrocell )等一系列功能相结合,在内核部分就可以采用多种类型的调试方法及监控函数。例如,可以设置断点、观察点、定义缺省条件或执行调试请求、监控停止操作或继续操作。所有的这些功能在 ARM架构的产品中已经实现,只是 Cortex-M3 将这些功能整合起来,方便开发人员使用。
区别七:应用范围
虽然 ARM7内核并没有像Cortex系列那样集成很多外设,但是大量的基于ARM7的器件,从通用MCU,到面向应用的MCU、SOC甚至是Actel公司基于ARM7内核的FPGA,都拥有更为众多的外围设备。大约有150种MCU是基于ARM7内核的(根据不同的统计方法,这个数字可能会更高)。
你会发现 ARM7都可以实现几乎所有的嵌入式应用,或采用定制的方式来满足需求。基于标准内核,芯片厂商可以加入不同类型、大小的存储器和其他外围设备,比如串行接口、总线控制器、存储器控制器和图形单元,并针对工业、汽车或者其他要求苛刻的领域,使用不同的芯片封装,提供不同温度范围的芯片版本。芯片厂商也可能绑定特定的软件,比如TCP/IP协议栈或面向特定应用的软件。
例如, STMicroelectronics公司的STR7产品线有三个主要系列共45个成员,具有不同的封装和存储器。每一个系列都针对特定的应用领域,具有不同外设集合。比如STR730家族是专为工业和汽车应用设计的,因此具有可扩展的温度范围,包括多个I/O口和3个CAN总线接口。STR710则是面向于消费市场以及高端的工业应用,它具有多个通信接口,比如USB, CAN, ISO7816以及4个UART,还有大容量的存储器和一个外部存储器接口。
芯片厂商也可以选择利于开发人员开发产品的措施,比如采用 ARM的嵌入式跟踪宏单元 ETM( Embedded Trace Macrocell ),并提供开发和调试工具。
区别八:配套工具
对于目前Cortex-M3和ARM7而言在相关的配套工具比如:下载程序的接口,调试工具以及外部设备的驱动都已经比较成熟,都很方便开发人员正常的开发使用,二者差异性不大;
软件开发工具范围很广:从建模到可视化设计,到编译器。现在很多的产品也用到实时操作系统( RTOS)和中间件,以加速开发进程、降低开发难度。相比而言在操作系统的使用方面ARM7会比较Cortex-M3更加方便(在移植操作系统方面,ARM7需要做相关的重定义,而Cortex-M3则需要修改相关的接口文件,并且按需裁剪内核功能,相对而言ARM7的使用会方便些)。
如何决策二者的选择?
如果在低成本的情况下寻求更好的性能和改进功耗,最好考虑选用Cortex-M3;由于 Cortex-M3内核中的多种集成元素以及采用Thumb-2指令集,其开发和调试比ARM7TDMI要简单快捷。
然而,由于重定义 ARM7TDMI的应用不是一件困难的事,特别是在使用了RTOS的情况下。保守者可能会沿用ARM7TDMI内核的芯片,并避免使用那些会使重定义变得复杂的功能。
比较项目 |
ARM7 |
Cortex-M3 |
架构 |
ARMv4T (冯诺依曼)指令和数据总线共用,会出现瓶颈 |
ARMv7-M(哈佛)指令和数据总线分开,无瓶颈 |
指令集 |
32位ARM指令+16位Thumb指令,两套指令之间需要进行状态切换 |
Thumb/Thumb-2指令集 16 位和32位指令可直接混写,无需状态切换 |
流水线 |
3级流水线若出现转移则需要刷新流水线,损失惨重 |
3级流水线 +分支预测出现转移时流水线无需刷新,几乎无损失 |
性能 |
0.95DMIPS/MHz (ARM模式) |
1.25DMIPS/MHz |
功耗 |
0.28mW/MHz |
0.19mW/MHz |
低功耗模式 |
无 |
0.19mW/MHz |
面积 |
0.62mm2(仅内核) |
0.86mm2(内核 +外设) |
中断 |
普通中断 IRQ和快速中断 FIQ太少,大量外设不得不复用中断 |
不可屏蔽中断NMI+1-240个物理中断每个外设都可以独占一个中断,效率高 |
中断延时 |
24-42个时钟周期,缓慢 |
12个时钟周期,最快只需 6个 |
中断压栈 |
软件手工压栈,代码长且效率低 |
硬件自动压栈,无需代码且效率高 |
存储器保护 |
无 |
8段存储器保护单元( MPU) |
内核寄存器 |
寄存器分为多组、结构复杂、占核面积多 |
寄存器不分组(SP除外),结构简单
|
工作模式 |
7种工作模式,比较复杂 |
只有线程模式和处理模式两种,简单 |
乘除法指令 |
多周期乘法指令,无除法指令 |
单周期乘法指令, 2-12周期除法指令 |
位操作 |
无访问外设寄存器需分“读 - 改- 写” 3步走 |
先进的 Bit-band 位操作技术,可直接访问外设寄存器的某个值 |