关于 CORTEX-M0+ 架构随笔

发布者:糖三角最新更新时间:2015-04-02 来源: eechina关键字:CORTEX-M0+  架构随笔 手机看文章 扫描二维码
随时随地手机看文章
修改历史

08.30, 完成初稿.

09.01, 修改文中错误, 全部的 ARMv7 架构都实现了 Thumb-2 技术. 而作为 ARMv7M 子集 的 ARMv6M, 实现了绝大部分 Thumb, 以及少数几个的 Thumb-2, 因此不能直接称 ARMv6M 实现了 Thumb-2.  并且为了系统概括, 在最后的部分, 增加了来自 ARM info 的构架与产品线对应框图.

ARM Architecture

诚如 ARM 帮助文档所言, 确定所研 uController 的体系构架是第一重要的事情. "因为 ARM 指令集架构被第一个研发出来, 并且会在未来持续被研发".

那么今天(这里指2013年8月间), ARM 架构的版本号从 v1 排到 v8(这是确认无疑的, 因为此刻我们正在注视着, ARM Information Center 的 documentation 部分的 "ARM 体系结构"章节的下拉框).  *o*  

幸运的事情是, 我们不必再关注 ARM 诞生伊始的 v1, v2, v3. 在 arm A-RM document 中, 注明因过时而废止的 ARM架构包括:
ARMv1, ARMv2, ARMv2a, ARMv3, ARMv3G, ARMv3M, ARMv4xM, ARMv4TxM, ARMv5, ARMv5xM, and ARMv5TxM

我们想知道的就是, v1 为啥是 26-bit 的架构, ARM 设计之初面临着一个怎样资源稀缺的生产工艺?

而 ARMv3 作为第一个引入 32-bit 架构设计的时代背景又是如何?

-- 但是 anyway, 这些个 story 都以远去, 我猜她们的剧情都至少超过了 10 years.

对比作为有效的现存架构是:
ARMv4, ARMv4T, ARMv5T, (ARMv5TExP), ARMv5TE, ARMv5TEJ, and ARMv6

ARM7TDMI-S

而 ARM7, 作为 ARM 世界在基础应用中的, 小心翼翼的第一步, 这样进入了我们的视野.

我们最初接触到的 ARM7, 比方以 NXP 的 LPC21XX series 为例, 注意到其ARM core是 ARM7TDMI-S, 其ARM 架构为 ARMv4T(参考源于 ARM7TDMI-S 之 A-RM).

这也是一颗 Von Neumann 架构的 32-bit 的 RISC. 话说 Von Neumann 架构似乎总是为简单或者基础的型号而准备?

因为, 我们往往不稀奇地在 M3 或者 M4(我们把这些比做更高级的应用), 里面发现定义的是哈佛结构. 这可能从另一方面说明了, 这里的 ARM v4T 或者我们后面提到的 Cortex M0/M0+ (v6M) 在 ARM 的设计理念中, 是面向低端市场的存在, 且生产工艺更简单(或者生产成本更低廉).

Thumb

v4T 的这个变量 T, 在 A-RM document 中, 被当作 Thumb 指令集的标志.

关于 Thumb mode, 我想已经可能为我们熟知了, 正是因为其 16-bit 的宽度, 会显著地降低我们 firmware 的 size, 而据说性能同 arm mode 比较没有太大的损失. 但是应该注意的是, Thumb 指令集, 仍然是 ARM 指令集的一个子集, 只是其每条指令, 都被编码为 16-bit.

另外, 虽然没有看见类似的说法, 但我个人是有怀疑, 是否 Thumb 指令集被第一次引入, 就是在 ARMv4T 架构之上呢?

ARM7/ARM9/ARM11

ARM7 series 的 CPU core 包括: ARM7TDMI、ARM7TDMI-S、ARM7EJ-S 和 ARM720T.
ARM9/ARM9E series 的 CPU core 包括: ARM926EJ-S、ARM946E-S、ARM966E-S、ARM968E-S、ARM996HS、ARM920T 和 ARM922T
ARM11 series 的 CPU core 包括: ARM1136JF-S 和 ARM1126J-S、ARM1156T2-S、ARM1156T2F-S、ARM1176JZF、ARM1176JZ-S、ARM1176JZF-S 以及 ARM11 MPCore

尽管没有明言, 我们敏感地感觉到, 上述过去年代中, 被我们熟知的 ARM7, ARM9, ARM11,
其体系架构可能均属于前面提到的, ARM 架构中的有效部分, 它们是: ARMv4, ARMv4T, ARMv5T, (ARMv5TExP), ARMv5TE, ARMv5TEJ, and ARMv6 (如果我有错请告诉我).

并且令人精神振作且注意力集中的是: ARM documentation 称呼上述 ARMv4 ~ v6, 通称为: ARMv5 架构.

似乎可以简单认为, 超过 v4~v6, 比方说凡是 v7 就是进入 ARM 新时代, 就可以当作 ARM 新系列 cortex 之后的实现架构?
答案并非如此, 因为我们知道, 至少 ARMv6M 还属于新出现的 cortex series.

我想这是不是说, 将对应的产品与架构进行比对才能定论, 比方说, 与上述 ARMv4 ~ v6(通称v5架构) 进行比对, 观察是新时代 cortex 产品, 还是过去的 ARM7/9/11.

ARM 新时代 - CORTEX

不管是从技术引领市场, 还是市场推动技术的哪个观点来看, ARM 的架构进步都让人屏住呼吸.

我很想代表多位工程师, 呼喊出我们的心声, "喂喂, 老兄, 节奏请放慢点儿, 这才2,3年, v4T 我们还熟悉的不够捏!```"
但沉默的工程师, 总是被动于势不可挡的科技进步与市场需求...

观察 ARM 版权所有声明的年限, 我们注意到在 2008 年, cortex 已经进入设计进度或者说可能设计成熟阶段/计划市场推广了.

Anyway, ARM7/9/11 的年代迅速成为记忆中的口号, 我们现在不得不在 ARM 的教育下, 言必称 Cortex.

正如我们近年来熟知的, Cortex 分成 A, R, M 三个 series, 或者我们理解, 这可能勉强对应着, 高端 -> 中端 -> 低端的应用需求.

再来回到我们的思路核心: 以 ARM 处理器架构为核心区分 ARM 产品类型.

那么伴随 cortex 产品系列的出现, 伴随而来的, 新的架构 ARMv7 浮出水面.

P.S, ARM7/9/11 is dead?

似乎不能完全确认, 尽管今天我们称呼 ARM7/9/11 为陈旧概念, 但是在 ARMv7-AR 架构中, 还特别给出章节, 讲解 ARM11 中较新的 ARMv6 的版本.

我们大胆猜测, 这或许是尊重已经投放市场的产品线的继续延续?

还是说, ARMv6 (通常 ARM11 实现的是v6 架构) 处于研发历史阶层的上下衔接阶段? 因为 ARMv6 在通称的 ARMv5 文档中, 以及在 ARMv7-AR 文档中, 都被提及.

ARMv7

Cortex A 与 cortex R 似乎被 ARM 统一对待, 它们两者的指令集架构被放在了一个文档中, ARMv7-AR RM. 我们可以合理想见其架构的相似性.

还有就是, 我们这里重视的基础类型的 application 中常用的 Cortex M 系列实现的架构: ARMv7-M. 而 ARMv7-M 指令集架构一般由 Cortex-M3 实现.

ARMv7-M 仅支持 Thumb-2

任何阅读过 ARMv7-M A-RM document 的同行诸君, 都会如我们般, 立即注意到 ARM 指令集章节消失, 只存在 Thumb 指令集章节.

显然的, ARMv7-M 只支持 Thumb instruction set. 因为全部的 ARMv7 都支持 Thumb-2(包括大量32-bit 指令), 故 ARMv7-M 仅仅支持 Thumb-2 ISA, 而不支持 ARM ISA.

ARMv7类型特点
A, 具备内存管理模块的虚拟地址 -- 我们毫不犹豫将它与影音应用化等号.
R, 有一个实时的 profile -- 我们似乎感觉到路由器转发器之类的应用在招手. 而且我们似乎也对 R 的来由知道了些什么```
M, 至于M -- 我们想忠实翻译出 M 的介绍, "仅仅支持 Thumb, 这里整个儿的 size 和实现操作的确认性, 比纯粹的能力表现来得更重要"... 与闪闪发光 AR 比较, 这个推广似乎有点让人垂头丧气,``` 不过似乎也非常符合 cortex M 的市场策略```  ^&^

对于我们感兴趣的 ARMv7-M 的特性之一是: 异常句柄仅仅用 c/c+ funcitons 就可以实现, 标准调用即可.

我们猜测这可能说明, 类似处理中断之类的 job, 我们或者说 compiler 不需要汇编的代码的参与.

什么是"高度确定性的操作"(Highly deteerministic operation)?[page]

在 ARMv7M A-TM 中, ARM 试图向我们解释, Cotex M series(比如实现 v7M 的 cortex M3), 一个强调的优点就是高度确定性操作, 这可能包括下列优点:

(1) single or low cycle count execution
(2) minimal interrupt latency, with short pipeline
(3) cacheless operation

ARMv7E-M

如果在 ARMv7-M 架构中, 加入 ARM DSP 指令, 可以实现 ARMv7E-M. Cortex M4 实现该架构而为我们所知.

v5 与 v7M Registers

如果要在通称 ARMv5 与 ARMv7M 的 Register 进行一番比较, 我们能够发现一些显著的不同:

ARM registers(通称 v5) 共 37pcs, 包括: 16pcs 通用registers + 15 pcs(异常加速处理专用 registers) + 6pcs 状态 registers(CPSR, 5-SPSR)

这 16pcs 通用 registers 中有 3pcs 是特殊的, 它们是: R13(SP), R14(LP), R15(PC)

ARMv7-M core registers (我们没有提及 v7M 新的 SCS registers 与 CPUID registers, 它们属于 memory mapped system registers)

在 application level 上, (16 + 1)pcs core register, 包括: 13pcs 通用registers + 3pcs specail registers(SP, LR, PC) 以及 application statue register APSR.

在 system level 上, 则增加了 xPCR, MASK, CONTROL registers

如果说 ARMv7-M 的不同特性, 它们或许暗示着:
(1) SP, LP, PC currently is specail register for v7M instead of using as general purpose registers sometimes under v5 Architecture.
(2) xPCR only manage APSR, IRSP and EPSR, which is different from v5 (it will save any PSR with every proess mode).
(3) Add MASK and CONTROL registers. About Control register, we found it should be specail for us to know the privilege mode, sp mode and fp extension.

尽管有这两者我们总结出的上述不同, 但是也让我们感觉到了 arm architecture 的继承性.

另外, 我们隐约意识到, 因为 SCS 与 CPUID registers 的存在, 我们很可能对 ARMv7-M 的实现者(我指 M0 ~ M4) 将有一个更加清晰的了解与支配手段```

Cortex M0/M0+ 实现的架构

Cortex M0/M0+ 实现的架构是 ARMv6-M

ARMv6-M 架构

ARMv6-M 是 ARMv7-M 的一个子集(subset)

ARMv6-M 架构仅支持 Thumb 指令集

ARMv7-M 架构支持Thumb-2(该指令集在 v6T2中引入).

作为 ARMv7-M 的 subset,  v6M 支持全部的来自 ARMv7-M 的 16-bit Thumb instructions(不包括 CBZ, CBNZ, and IT).

此外还支持 32-bit 的 Thumb Instraction 中的 BL, DMB, DSB, ISB, MRS, MSR.

要提及的就是, 作为 v7-M的 subset, 也同样的, 并不支持 ARM 指令集

因此, 在上述角度下, Cortex-M0+ 应该称为 Thumb 支持更合适(实际上, 后面的 ARM info 的 Architecture 框图也说明了此点).

ARMv6-M 只支持特权模式(除非加入拓展)

与 ARMv7-M 不同, v6-M 只支持特权模式.

但是如果增加 Unprivileged/Privileged Extension, v6-M 也可以在这样低的门数上支持特权模式.

解惑1: 为何在开发 Cortex-M0+ uController 开发中无法选择 arm mode?

- 根据上述分析, 我们已知 Cortex M0/M0+ 实现的是 ARMv6-M 指令集, 它是 ARMv7-M 的一个子集, 同样的 v6M 不支持 ARM 指令集(事实上 M0+ 支持的是 Thumb).

因此, 我们在 build new project 时, 一旦使用了 IDE 选择了 M0+ uController, 我们很可能发现, IDE 的 config page 不再提供 arm or thumb 的选择项给我们, 往往表现为 Thumb 默认必选.

解惑2: 何为 M0+ uController 喜欢宣称自己与 M0 兼容并且可向上升级为 M3/M4?

- 根据上述分析, M0+ 与 M0 拥有同样的 ARMv6-M 指令集架构, 因此在此意义上, 是兼容的.

并且, M3 实现了 ARMv7M, M4 实现了 ARMv7E-M. 而 v6-M 为 v7-M 子集, v7E-M 为 V7 加上 DSP 指令. 均存在子集关系, 从上述角度理解, 这就是为何使用 M0+ 开发的系统, 可以向上移植到 M0, M3, M4.

解惑3: 为何强调 M0+ 的节能特性的最大贡献为 pipeline?

- 严格来说, ARMv6M/AMRv7M/ARMv5 的 A-TM 中没有对 pipeline stage 的定义(更重要的它们定义了指令集架构).

我们不清楚在哪里可以找到, M0/M0+ 约定 2-stage pipeline 的定义, 同行读者们或可告诉我...

但是返回到 uController 的 datasheet, 我们确知,

以 NXP lpc21xx 为例的 ARM7TDMI-S(实现 ARMv4T 架构) 的 pipeline 为 3-stage pipeline.
以 FSL kinetis L KL25Z 为例的 Cortex-M0+(实现 ARMv6M 架构) 的 pipeline 为 2-stage pipeline.

"通过转移到 2-stage pipeline, branch shadow 减少. 作为结果, 访问 flash memory 的次数也降低. 而 flash momery power 常常是一颗 uController 中能耗的大部分, 访问 flash 次数的降低, 将直接影响总体能耗".

回顾

在这份随笔中, 我们在对 cortex-M0+ 了解过程中, 不由得对 ARM uController story 进行了一个简单的追溯.

我们并且非常坚持地使用 ARM Architecture 作为核心判断标准, 从 ARMv4 -> ARMv7-M(与其 subset ARMv6-M) 的架构发展过程进行解读, 并作为 ARM uController 发展的阶段性产品区分标准.

并且根据指令集架构的回溯过程, 我们又对现今流行的 Cortex-M0+ 的标准特性, 如仅仅支持 Thumb 指令集进行了对照理解, 并加深了对所谓 M0+ 为何向 M4 一路顺利迁移的意义的理解.

ARM Architecture 产品类型框图(From ARM Info)

在泛泛随笔, 谈及了 architecture 后, 加上 ARM info 整理的框图, 这篇随笔就几乎完美了, 不是吗?

ARM Architecture 产品类型框图(From ARM Info) 

感想

ARM 架构的延续性, 以及目前市场上对 ARM 的服从性, 似乎第一次使我们工程师直起腰杆... 那在开始的每一份新的 MCU system 设计任务时, 也许我们似乎不用再表现的像个新人?...

*O*
这种感觉, 我们喜欢.
关键字:CORTEX-M0+  架构随笔 引用地址:关于 CORTEX-M0+ 架构随笔

上一篇:基于Cortex M3的嵌入式POS系统设计
下一篇:什么是STM32以及如何学习?

推荐阅读最新更新时间:2024-03-16 13:57

Cortex-M0权威指南》之体系结构---程序映像和启动流程
  我们先来看看程序映像。      通常,Cortex-M0处理器的程序映像时从地址0x00000000处开始的。   程序映像开始处时向量表,其中包含了异常的其实地址(向量),每个中断向量的地址都等于“异常号*4”,比如,外部IRQ0的异常类型为16,因此其向量地址为16*4=0x40。这些向量的最低位都被置为1,以表示使用thumb指令。向量表的大小由实际使用的中断个数决定。   向量表中包含了MSP的初始值,它存储在向量表的头四个字节。   复位时,处理器首先读取向量表的前两个字(8个字节),第一个字为MSP的初始值,第二个字为复位向量,它表示程序执行的起始地址。   例如,如果启动代码位于地址0x000000C0,需要
[单片机]
《<font color='red'>Cortex-M0</font>权威指南》之体系结构---程序映像和启动流程
东芝推出搭载嵌入式USB设备控制器的Cortex-M0微控制器
东京 东芝公司(TOKYO:6502)今日宣布推出三款新的微控制器 TMPM066FWUG 、 TMPM067FWQG 和 TMPM068FWXBG ,作为其ARM Cortex -M0内核 TX00系列 最新产品。该新IC经过优化,适用于USB设备。样品发货将于今年10月中旬启动。 这些新设备支持各种串行接口功能,包括USB、SPI 和I2C (快速模式Plus(Fast-mode Plus) ),并可作为传感器中枢向主要控制器设备或PC传输多个传感器信息。为了满足市场对更小系统的需求,三款设备均采用小型封装。BGA封装:5mm 5mm(57-引脚外部连接引脚);QFN封装:7mm 7 mm(48-引脚外部连
[手机便携]
东芝推出搭载嵌入式USB设备控制器的<font color='red'>Cortex-M0</font>微控制器
MDK5新建stm32l0xx(Cortex-M0)工程步骤
目前,网络上关于stm32l0xx系列mcu的资料比较少,l0低功耗系列普遍应用了st公司新出的HAL库,由于没有中文资料,并且HAL库与原来的标准库有一些区别,因此开发起来有一定的难度。本文先从最基本的新建工程入手,后续将陆续记录关于stm32l051c8x的一些应用过程,记录开发过程中遇到的一些问题、思考及心得,以期在做导师项目的过程中最大限度的增添一些乐趣。给做项目的过程增加一点乐趣。新手记录,错误难免,也欢迎高手批评指正 第一步:ST官网下载固件库文件 首先从官网下载固件库文件包,顺便可以把datasheet等一并下载。文件包名称:en.stm32cubel0,drivers文件夹中,包含有Low Layer (LL)
[单片机]
MDK5新建stm32l0xx(<font color='red'>Cortex-M0</font>)工程步骤
恩智浦推出低成本Cortex-M0微控制器
恩智浦半导体(NXP Semiconductors)日前宣布,旗下基于ARM® Cortex™-M0的LPC1100微控制器系列产品将于12月分销上市。恩智浦LPC1100是市场上定价最低的32位微控制器解决方案,其价值和易用性比现有的8/16位微控制器更胜一筹。该控制器性能卓越、简单易用、功耗低,更重要的是,它能显著降低所有8/16位应用的代码长度。初期面市的LPC1100系列有15种产品,能满足所有那些寻求用可扩展ARM架构来进行整个产品开发过程的8/16位用户,满足其产品开发无缝整合需求。 恩智浦半导体副总裁微控制器部门兼总经理Geoff Lees先生表示:“现有的8位架构萌生于早期的半导体业有很多局限:地址范围
[嵌入式]
Cortex—M0单片机二-十进制整数转换的快速算法
引言 在单片机应用系统中,一般都需要高效快速地完成系统所需要的任务,并在任务完成后使系统进入睡眠或低功耗状态,以便最大限度地节省系统功耗,增强系统的抗干扰能力。因此,必须优化和提高系统中各个模块的运算速度,以最大限度地压缩软件运行时间。许多单片机应用系统中都需要进行二进制整数转换为十进制BCD码的操作,以便实现系统信息的显示。对于Cortex—M0系列单片机,由于其指令系统中没有十进制调整指令和除法指令,使得一些文献中提供的高效算法和技巧不再适用于这类单片机,从而造成上述转换操作成为影响系统性能的重要因素,因此提高上述数制转换速度对于提高系统运行效率有极大的促进作用。 1 传统的实现方法 要实现快速运算,很自然地想到经典
[单片机]
Cortex—M0单片机二-十进制整数转换的快速算法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved