ARM Cortex

最近因为要为芯片选定核,所以就在了解哪些核合适且性价比好,这是一个需要结合产品各类技术、市场分析的活,看似简单却还是需要一些储备的,今天选了一篇ARM Cortex系列的科普文章与大家分享。

众所周知,英国的ARM公司是嵌入式微处理器世界当中的佼佼者。ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式让ARM公司获得了巨大的成功,使它迅速占据了32位嵌入式微处理器的大部分市场份额。

目前,随着对嵌入式系统的要求越来越高,作为其核心的嵌入式微处理器的综合性能也受到日益严峻的考验,现在一个高端智能手机的处理能力几乎可以和几年前的笔记本电脑相当。为了迎合市场的需求,ARM公司也在加紧研发他们最新的 ARM架构,Cortex系列就是这样的产品。那么我们今天就不妨好好了解一下ARM Cortex系列处理器知识点汇总。

“”

ARM Cortex系列处理器

ARM公司在经典处理器ARM11以后的产品改用Cortex命名,并分成A、R和M三类,旨在为各种不同的市场提供服务。

1、Cortex-A:面向尖端的基于虚拟内存的操作系统和用户应用

2、Cortex-R:针对实时系统

3、Cortex-M:微控制器

“”

ARM Cortex系列处理器——Cortex-A

ARM Cortex-A 系列是一系列用于复杂操作系统和用户应用程序的应用程序处理器。Cortex-A 系列处理器支持 ARM、Thumb 和 Thumb-2 指令集。

RM公司的Cortex-A系列处理器适用于具有高计算要求、运行丰富操作系统以及提供交互媒体和图形体验的应用领域。

“”

如图所示,绿色的部分都是v7-A的架构,蓝色的是v8-A架构,基本上绿色都是可以支持到32和64位的,除了A32,只支持到32位。在右边的每个部分,比如说需要高效能的最上面的A15-A73这个部分是最高效的,接下来就是比较注重整个效率的部分了,中间那个部分是比较高效率的,最下面那栏的是效率最好的,在电池的效能方面达到了最好的标准。

如果非要给他们一个排序的话,从高到低大体上可排序为:Cortex-A73处理器、Cortex-A72处理器、Cortex-A57处理器、Cortex-A53处理器、Cortex-A35处理器、Cortex-A32处理器、Cortex-A17处理器、Cortex-A15处理器、Cortex-A7处理器、Cortex-A9处理器、Cortex-A8处理器、Cortex-A5处理器。
  

“”

ARM Cortex系列处理器——Cortex-M

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

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

“”

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

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

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

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

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

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

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

“”

ARM Cortex系列处理器——Cortex-R

R4:第一个基于ARMv7-R体系的嵌入式实时处理器。专用于大容量深层嵌入式片上系统应用,如硬盘驱动控制器、无限基带处理器、消费产品手机MTK平台和汽车系统的电子控制单元。

R5:2010年推出,基于ARMv7-R体系,扩展了 Cortex-R4 处理器的功能集,支持在可靠的实时系统中获得更高级别的系统性能、提高效率和可靠性并加强错误管理。这些系统级功能包括高优先级的低延迟外设端口 (LLPP) 和加速器一致性端口 (ACP),前者用于快速外设读写,后来用于提高效率并与外部数据源达成更可靠的高速缓存一致性。

基于 40 nm G 工艺,Cortex-R5 处理器可以实现以将近 1 GHz 的频率运行,此时它可提供 1,500 Dhrystone MIPS 的性能。该处理器提供高度灵活且有效的双周期本地内存接口,使 SoC 设计者可以最大限度地降低系统成本和功耗。

R7:Cortex-R7 处理器是性能最高的 Cortex-R 系列处理器。它是高性能实时 SoC 的标准。Cortex-R7 处理器是为基于 65 nm 至 28 nm 的高级芯片工艺的实现而设计的,此外其设计重点在于提升能效、实时响应性、高级功能和简化系统设计。基于 40 nm G 工艺,Cortex-R7 处理器可以实现以超过 1 GHz 的频率运行,此时它可提供 2700 Dhrystone MIPS 的性能。该处理器提供支持紧密耦合内存 (TCM) 本地共享内存和外设端口的灵活的本地内存系统,使 SoC 设计人员可在受限制的芯片资源内达到高标准的硬实时要求。

“”

“”

“”

本文转载自:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 40

全新MCU产品群为IoT应用带来多种通信功能选项、灵活的内存架构和强大的安全性,成为现场固件更新应用的理想之选

瑞萨电子集团(TSE:6723)今日宣布,新增20款RA6M5群微控制器(MCU),扩展RA6系列MCU,完善主流产品线。新产品提供丰富的通信功能选项、大容量片上存储器和瑞萨卓越的安全功能,帮助客户开发创新的物联网(IoT)设计。

“”

瑞萨电子RA产品家族MCU

RA6M5产品群为IoT系统产品设计人员在共享关键数据时提供卓越的灵活性。全新MCU具备多种通信接口选项,包括CAN FD、带DMA的以太网MAC、全速和高速USB以及多个串行接口。

全新MCU集成高达2MB片上闪存和512KB片上RAM,广泛支持各种应用。同时提供OctaSPI接口,使设计人员能够进一步扩展闪存与RAM。产品还支持ECC RAM。闪存块交换功能与RA系列产品内置的固有安全性相结合,使RA6M5产品群成为需要现场固件更新功能应用的理想选择。在使用后台运行功能(BGO)将新固件写入闪存后,可将选定数量的闪存块(每块32KB)进行交换,成为新固件的一部分。

“”

RA6M5 MCU采用基于Armv8-M架构的Arm® Cortex®-M33内核,并支持Arm TrustZone®技术和瑞萨安全加密引擎。安全加密引擎包含多个对称和非对称加密加速器、高级密钥管理、安全的产品生命周期管理、抵抗功耗分析攻击以及篡改检测功能。全新RA6M5产品群提供与瑞萨RA6M4 MCU相同的安全功能和软件支持(RA6M4已通过PSA 2级认证和SESIP1认证)。这一功能组合使客户能够实现安全芯片功能,为高度互联的IoT设备提供高效的安全和保密功能。

瑞萨电子物联网及基础设施事业本部高级副总裁Roger Wendelken表示:“RA6M5 MCU为我们的客户提供丰富的通信功能选择,能够灵活地以多种方式共享数据,满足众多IoT应用的需求。此功能与大容量片上存储器以及我们卓越的安全功能相结合,为IoT设计赋能。”

RA6M5产品群的关键特性

  • 运行模式下,仅107μA/MHz超低功耗(以200MHz在闪存运行CoreMark算法时);唤醒时间30μs
  • 支持TrustZone技术的200MHz主频Arm Cortex-M33内核
  • 包含瑞萨安全加密引擎的完整安全解决方案
  • 100引脚至176引脚的LQFP封装,也可提供176BGA封装
  • 片上集成1MB、1.5MB或2MB闪存;512KB SRAM(包括64KB ECC RAM)
  • 电容式触摸感应单元
  • 闪存后台运行功能(BGO)/闪存块交换功能
  • CAN FD或CAN接口
  • 带有独立DMA的以太网MAC
  • 全速及高速USB 2.0,无需外接专用晶体
  • 高级模拟工厂,支持两个ADC(模数转换器)单元
  • QuadSPI和OctaSPI接口
  • SDHI

RA6M5产品群搭配易用的灵活配置软件包(FSP),其中包括了一流的HAL驱动程序。FSP通过GUI工具来简化工作流程并显著加快开发进程,也使客户可以轻松地转移原有的8/16位MCU设计。选用RA6M5 MCU的设计人员还可充分利用强大的Arm合作伙伴生态系统,获得丰富工具以加快产品上市速度。

RA6M5 MCU可与瑞萨模拟和电源产品无缝结合使用,以创建适用于各类应用的综合解决方案。多款“成功产品组合”展示了RA6M5 MCU的独特功能以及瑞萨产品阵容的广度和深度。例如,集成了RA6M5与瑞萨电源、收发器和隔离器件的语音识别和智能控制“成功产品组合”。了解采用RA MCU的多种应用,以及瑞萨众多其它解决方案,请访问:http://www.renesas.com/win

供货信息

RA6M5 MCU和EK-RA6M5评估套件(型号:RTK7EKA6M5S00001BE)现可从瑞萨全球经销商处购买。更多信息,请访问:renesas.com/ra6m5。

关于瑞萨电子集团

瑞萨电子集团 (TSE: 6723) ,提供专业可信的创新嵌入式设计和完整的半导体解决方案,旨在通过使用其产品的数十亿联网智能设备改善人们的工作和生活方式。作为全球微控制器、模拟功率器件和SoC产品供应商,瑞萨电子为汽车、工业、家居、基础设施及物联网等各种应用提供综合解决方案,期待与您携手共创无限未来。更多信息,敬请访问renesas.com。

围观 51

英国的ARM公司是嵌入式微处理器世界当中的佼佼者。ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个 芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式让ARM公司获得了巨大的成功,使他迅速占据了32位嵌入式微处理器的大部分市场份额,甚 至现在,ARM芯片在上网本市场的也大有与INTEL的ATOM处理器一较高低的实力。

目前,随着对嵌入式系统的要求越来越高,作为其核心的嵌入式微处理器的综合性能也受到日益严峻的考验,最典型的例子就是伴随3G网络的推广,对手机 的本地处理能力要求很高,现在一个高端的智能手机的处理能力几乎可以和几年前的笔记本电脑相当。为了迎合市场的需求,ARM公司也在加紧研发他们最新的 ARM架构,Cortex系列就是这样的产品。在Cortex之前,ARM核都是以ARM为前缀命名的,从ARM1一直到ARM11,之后就是 Cortex系列了。Cortex在英语中有大脑皮层的意思,而大脑皮层正是人脑最核心的部分,估计ARM公司如此命名正有此含义吧。

一.ARMv7架构特点

下表列出了ARM微处理器核心以及体系结构的发展历史:

表一: ARM微处理器核心以及体系结构的发展历史

我们可以看到,Cortex系列属于ARMv7架构,这是ARM公司最新的指令集架构,而我们比较熟悉的三星的S3C2410芯片是ARMv4架构,ATMEL公司的AT91SAM9261芯片则是ARMv5架构。

ARMv7架构是在ARMv6架构的基础上诞生的。该架构采用了Thumb-2技术,Thumb-2技术是在ARM的Thumb代码压缩技术的基础 上发展起来的,并且保持了对现存ARM解决方案的完整的代码兼容性。Thumb-2技术比纯32位代码少使用 31%的内存,减小了系统开销。同时能够提供比已有的基于Thumb技术的解决方案高出38%的性能。ARMv7架构还采用了NEON技术,将DSP和媒 体处理能力提高了近4倍,并支持改良的浮点运算,满足下一代3D图形、游戏物理应用以及传统嵌入式控制应用的需求。此外,ARMv7还支持改良的运行环 境,以迎合不断增加的JIT(Just In Time)和DAC(DynamicAdaptive Compilation)技术的使用。另外,ARMv7架构对于早期的ARM处理器软件也提供很好的兼容性。

ARMv7架构定义了三大分工明确的系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器和低成本应用提供优化。下图为v5至v7架构比较:

图一:v5至v7架构比较

由于应用领域不同,基于v7架构的Cortex处理器系列所采用的技术也不相同,基于v7A的称为Cortex-A系列,基于v7R的称为Cortex-R系列,基于v7M的称为Cortex-M系列。下面一一介绍。

二.Cortex-A8

Cortex-A8第一款基于ARMv7构架的应用处理器。Cortex-A8是ARM公司有史以来性能最强劲的一款处理器,主频为600MHz到1GHz。A8可以满足各种移动设备的需求,其功耗低于300毫瓦,而性能却高达2000MIPS。
Cortex-A8也是ARM公司第一款超级标量处理器。在该处理器的设计当中,采用了新的技术以提高代码效率和性能,采用了专门针对多媒体和信号处理的NEON技术。同时,还采用了Jazelle RCT技术,可以支持JAVA程序的预编译与实时编译。

针对Cortex-A8,ARM公司专门提供了新的函数库(Artisan Advantage-CE)。新的库函数可以有效的提高异常处理的速度并降低功耗。同时,新的库函数还提供了高级内存泄漏控制机制。

Cortex-A8处理器使用了先进的分支预测技术,并且具有专用的NEON整型和浮点型流水线进行媒体和信号处理。在使用小于4 mm2的硅片及低功耗的65 nm工艺的情况下,Cortex-A8处理器的运行频率将高于600MHz(不包括NEON追踪技术和二级高速缓冲存储器)。在高性能的90 nm和65 nm工艺下,Cortex-A8处理器运行频率最高可达1 GHz,能够满足高性能消费产品设计的需要。

Cortex-A8第一次为低费用、高容量的产品带来了台式机级别的性能。当前最新的IPHONE手机和ANDROID手机里的处理器就是基于Cortex-A8内核的芯片。

Cortex-A8的系统框图如下:

图二:Cortex-A8的系统框图

更详细的框图如下:

图三:Cortex-A8的详细系统框图

三.Cortex-R4

Cortex-R4是ARM开发的超标量结构的ARM内核,主要面向实时控制领域,如汽车刹车控制等,这一领域要求处理器响应中断的实时性高,并且 要尽可能的节约成本,而很多客户要求不需过多提高工作频率,就能提高运算性能,因此在Cortex-R4的设计过程中,工作频率的最佳点位是 300MHz。再高的话,不仅需要高速内存,而且时钟树的设计也更为复杂。结果,判断合理的做法就是采用超标量结构,增加单位周期所执行的指令平均数。 Cortex-R4单位工作频率的运算性能为 1.62MIPS(按Dhrystone换算)/MHz,比ARM9的约1.2MIPS/MHz大幅提高。Cortex-R4电路规模只是比ARM9略有 增加,但是可以实现更接近于Cortex-A8的运算性能。
Cortex-R4系统框图如下所示:

图四:Cortex-R3系统框图

四.Cortex-M3

ARM Cortex-M系列则是为那些对开发费用非常敏感同时对性能要求小断增加的嵌入式应用(如微控制器、汽车车身控制系统和各种大型家电)所设计的,主要面向单片机领域,可以说是51单品机的完美替代品。

Cortex-M3系统框图如下所示:

图五:Cortex-M3系统框图

Cortex-M3的速度比ARM7快三分之一,功耗低四分之三,并且能实现更小芯片面积,利于将更多功能整合在更小的芯片尺寸中。Cortex- M3处理器结合了执行Thumb-2指令的32位哈佛微体系结构和系统外设,包括Nested Vec-tored Interrupt Controller和Arbiter总线。该技术方案在测试和实例应用中表现出较高的性能:在台机电180 nm工艺下,芯片性能达1.2 DMIPS/MHz,时钟频率高达100 MHz。

在工控领域,用户要求具有更快的中断速度,Cortex-M3采用了Tail-Chaining中断技术,完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少 70%中断。

五.总结

ARM Cortex处理器系列都是基于ARMv7架构的产品,从尺寸和性能方而来看,既有少于33000个门电路的Cortex-M系列,也有高性能的 Cortex-A系列。其中,Cortex-A系列是针对日益增长的,运行包括Linux、Windows,CE和Symbian操作系统在内的消费娱乐 和无线产品设计的;ARM Cortex-R系列针对的是需要运行实时操作系统来进行控制应用的系统,包括汽车电子、网络和影像系统;ARM Cortex-M系列则面向微控制器领域,为那些对开发费用非常敏感同时对性能要求不断增加的嵌入式应用所设计的。可见随着在各种不同领域应用需求的增 加,微处理器市场也在趋于多样化。

来源:互联网(版权归原著作者所有)

围观 523

Cortex-A32是ARM架构中独一无二的产品,拥有重要地位。Cortex-A32基于ARMv8-A架构,却是针对32位设计的处理器。下图介绍了Cortex-A32与ARMv8-A架构的匹配程度,并与Cortex-A35进行了对比。

图一:Cortex-A32和ARMv8-A

基于上述,Cortex-A35可以实现两种执行态,分别为32位AArch32及64位AArch64,从而充分发挥ARMv8-A架构的64位操作能力;相对比,Cortex-A32仅支持32位AArch32执行态,这一决定不仅进一步压缩产品面积,对于不需要64位操作能力的用例,还可以带来显著的功耗优化。

无可否认,部分嵌入式应用可以从64位获益,但许多其他应用都是32位的,将来很长一段时间市场也会依旧如此,Cortex-A32则专为这些应用程序量身打造。

AArch32执行态是早期Cortex-A处理器所用ARMv7-A架构的升级版。尽管不具备64位功能,但在其它某些功能却得到显著增强,使Cortex-A32与Cortex-A7和Cortex-A5相比更加高效;对基于更早ARM处理器的设计演变,或聚焦嵌入式市场的全新设计来说,都是理想的选择。

对比ARMv7-A,AArch32在如下方面得到强化:

  • 添加多项新指令,密码函数性能提高
  • 全新的负载获取及存储释放(Load Acquire and Store Release)指令,让访存排序更高效,与全新C++11访存排序语义匹配
  • 额外的标量和单指令多数据结构(SIMD)浮点指令
  • 更丰富的系统控制指令
  • 对比早期的32位ARMv7-A处理器,Arrch32这些额外特性使其具备更佳的性能。

    Cortex-A32总线接口上的高级一致性扩展(Advanced Coherency Extensions,ACE)使其可以利用Cortex-A32构建支持完全一致的多处理器系统,按需升级,以实现更高的性能。不过,如果产品面积与功耗是最主要的限制因素,Cortex-A32也提供专门针对单处理器应用优化的版本, 移除一致性逻辑,实现更高功效。

    经过大物理地址扩展(Large Physical Address Extension,LPAE),Cortex-A32的可寻址内存空间得到扩展,超过Cortex-A5的32位(4GB),达到40位物理地址空间。

    核心本身配置了额外的高级功能,进一步提高效率。其中包括更灵活的功耗管理、更优化的电源域和保留电源门控(retention power gating)的延伸使用(。

    ARMv7-M 主要特性

    ARM Cortex-M处理器基于ARMv7-M架构(Cortex-M0和Cortex-M0+ 采用类似的ARMv6-M架构)。虽然与早期的ARM架构有众多相似之处,但ARMv7-M经过专门打造,更适合深度嵌入、低成本的实时微处理器应用。因此,早期架构的很多功能被删除,并添加了新的特性,以构建更符合“微控制器”环境的编程模式。

    对比前代处理器(例如备受欢迎的ARM7TDMI),变化具体如下:

    1、操作模式数量显著减少,从7种甚至更多减至2种:仅保留处理器模式与线程模式。其中一种模式(处理器模式)可以默认为优先采用。

    2、寄存器文件简化。虽然编程器可用的寄存器数量实质上仍然是16个,但前代架构使用的分组寄存器机制明显减少,因此两种操作模式寄存的只有栈指针(r13)。是否使用寄存拷贝可自行设置。

    3、异常模式的变化最为明显。由于典型的微控制器应用可能会出现大量的芯片外设中断,基于此,全新架构中的所有Cortex-M核心都配置了标准嵌套中断向量控制器(Nested Vectored Interrupt Controller,NVIC)。类似的,根据记载处理器地址的向量表,异常处理模式也被标准化。上下文保存和恢复操作完全在硬件中实现,进一步简化编写中断处理器的软件任务。基于上述,实现过程中的干扰性延迟发生几率被降到极低,且高度可预测。

    4、与前代ARM处理器类似,ARMv7-M定义了可选内存保护架构。同时,因为裸金属系统或在实时操作系统(RTOS)下运行的系统通常不需要虚拟内存,ARMv7-M并不为其提供支持。

    5、为协助实时操作系统(RTOS)的实现和移植,一些标准的片上外围设备也在架构中获得定义,例如SysTick timer。

    6、为进一步缩小处理器核心面积,ARMv7-M处理器仅采用Thumb指令集(包括Thumb-2指令集扩展)。

    ARMv8-A AArch32 主要特性

    Cortex-A处理器基于ARMv7-A或ARMv8-A架构。ARMv8-A处理器支持AArch32执行态,是32位ARMv7-A架构的兼容升级。这些架构的设计添加了专属特性,比如虚拟内存环境,以支持包括Linux、Android、Windows等的平台操作系统。

    对比Cortex-M处理器核心,Cortex-A独特之处包括:

    1、拥有7种或更多操作模式:用户、管理器、IRQ、FIQ、未定义、中止、系统。每种模式都可以处理一项具体事件,例如,IRQ模式被用于处理IRQ中断。AArch32还支持另外两种模式:Hyp 和监视器,这两种模式分别用于虚拟化及ARM TrustZone。

    2、虽然可以使用的寄存器数量同样是16个,但AArch32有许多与上述操作模式相对应的“分组”(banked)寄存器。一旦进入特定操作模式,这些寄存器就会取代对应的用户模式。这使异常处理的许多方面得到简化,但也意味着需要提高机器管理能力,并在初始化上花更大的功夫。

    3、异常模式有显著差别,与最初的ARM架构设备一脉相承。具体来说,向量表是由一组可执行的指令组成,而不是地址,并且保存和恢复上下文的任务几乎完全由编程器承担。

    4、还有一个重要差别是内存管理单元(Memory Management Unit ,MMU),内存管理单元会编译核心提交的虚拟地址以及存储系统需要的物理地址。针对Linux一样的平台操作系统所使用的完整需求分页虚拟存储器环境,Cortex-A也可以提供支持。

    ARMv7-M 与 AArch32 的不同之处

    从基于Cortex-M处理器的系统迁移到基于Cortex-A32处理器的系统时,许多新特性也有必要了解。尽管这两种架构之间有许多相似之处(如寄存器组和指令集存在多种共性),但仍然需要清楚一点,ARMv8-A架构在AArch32执行态下的许多特性是基于早期架构的。本节将详细介绍AArch32的特性,这些特性在ARMv7-M中不具备,或者实现方式极其不同。

    操作模式

    如2图所示,ARMv7-M仅定义两种操作模式,线程模式与处理器模式。处理器模式可以设置为普通模式,也就是说,在不需要时,软件可以不启用该特性。处理器模式主要被用于处理异常情况,线性模式则用于用户进程。模式间的转化基本上是自动的,发生条件如图所示。如异常情况发生,处理器模式自动启用,异常处理完成后,处理器模式自动退出。SVCall指令是软件进入处理器模式的主要方法(将启动的IRQ设定为未决,可令处理器执行异常操作)。

    图2: ARMv7-M操作模式

    对比图3,图2显示的是AArch32执行态下支持的操作模式。基本的操作模式有七种,其中五种用于处理特定异常。如发生快速中断(Fast Interrupt,FIQ)异常,则会进入FIQ模式;如出现未定义指令,则进入Undef模式,诸如此类。

    图3: AArch32操作模式

    模式间的转换通常自动执行,但是如果在现程序状态寄存器(Current Program Status Register,CPSR)中写入模式字段,则可完全由软件控制进行模式转换,具体细节稍后再做说明。与SVCall指令类似,SVC指令可以支持软件处理SVC异常,并进入SVC模式。

    AArch32还支持其他两种模式,但未在图中显示(仅为节省版面空间)。它们分别是Hyp模式(用于管理程序)和监控模式(用于TrustZone)。

    寄存器组

    图4及图5分别介绍了ARMv7-M 和 AArch32寄存器组。从图中可以看出,两种寄存器有许多相似之处,这是因为两者皆承袭了ARMv6及早期架构的共同特性。

    多数指令可以访问13个通用寄存器(r0至r12)。两种架构下,r13预设为栈指针(SP),r14预设为连接寄存器(LR),r15预设为程序计数器(PC)。ARMv7-M架构下,访问专用寄存器受到严格限制;AArch32下,可以用与其他通用寄存器相同的方式访问这些寄存器;不过无需多言,擅自修改PC值可能会产生不良后果!

    图4:ARMv7-M寄存器组 图5- AArch32寄存器组

    ARMv7-M是一小组其他专用寄存器,包括PRIMASK、FAULTMASK、xPSR、CONTROL及BASEPRI,用于控制、配置处理器及处理异常情况。

    指令集

    如图5所示,AArch32还有一些与特定操作模式相关的寄存器。如进入对应的模式下,这些寄存器会与相应的用户模式切换。只有极少数特殊指令能够访问,并且还无法直接访问。这些数值随着模式变化被保存,以辅助异常处理。特别值得指出的是,每种异常模式都对应独立的栈指针,从而能够在单独堆栈上解决每个异常状况。这就让异常处理程序更可靠、防御性更强。异常出现后,相关模式的连接寄存器会被设定为异常返回地址。

    每种异常模式都对应一个附加寄存器,即程序保护状态寄存器(SPSR)。程序保护状态寄存器用于出现异常时及时记录当前的程序状态寄存器数值以及LR,从而自动保存相关数据。另外,AArch32的图示中未显示Mon与Hyp模式。与其他模式一样,它们分别支持R13与R14分组寄存器。

    Cortex-A架构下,有一个与ARM NEON SIMD指令集相关的独立寄存器组,包含32个128位宽寄存器。每个寄存器都可作为单字、双字或四倍字寻址,NEON指令集也支持依据字节或四倍字进行向量运算。

    异常模型

    上述两个架构的异常模型具有显著差异,但两者都支持因系统事件或外围中断引起的内部及外部异常。

    ARMv7-M支持与传统微控制器上发现的异常更相近的模型,所有外部中断都通过含有处理器地址的向量表单独进行向量处理。

    AArch32与早期ARM架构中的异常模型更相近,早期的ARM架构中仅有8种异常类型,向量也各不相同。向量表由可执行指令组成,通常是特定异常处理器的分支指令。仅支持两种外部中断源,即FIQ和IRQ。通常,一个高优先级中断会连接FIQ,其他则连接IRQ。这意味着系统要么装有软件调度程序,要么就要和现代系统一样装有中断向量控制器(Vectored Interrupt Controller,VIC),可以利用单一向量地址进行编程。

    多数Cortex-A系统装有基于ARM的通用中断控制器(Generic Interrupt Controller,GIC)。GIC是许多物理中断和ARM核心中断输入(FIQ和IRQ)的接口,处理优先次序、遮蔽、单一中断启用或禁止,及优先权。欲了解更多信息,请参考《GIC架构参考手册》。

    虚拟内存支持

    支持完全虚拟内存环境是ARMv8-A的一个主要特性,使设备可以支持Linux和Android等平台操作系统。同样,虚拟内存能力通常也是客户选择核心的重要依据。

    虚拟内存环境使操作系统能够以更加灵活的方式管理内存,例如,允许单独处理动态扩展栈区域,按照需求将单个代码和数据区域调入和调出外部存储页面,并使每个用户处理系统内存映射的相同视图。

    图6:虚拟内存

    为此,如图6所示,虚拟内存在处理器提供的每个地址上进行“转换”。软件在“虚拟地址空间”和称为内存管理单元(Memory Management Unit,MMU)的模块中运行,并将其转换为“物理地址空间”,为系统中的每个用户任务以及操作系统本身创建新的虚拟内存映射,还使操作系统完全控制访问权限等。每项任务都可以在自身的虚拟内存空间中执行,就像是系统中的唯一任务。只有操作系统知道外部物理内存中该任务的代码和数据区域的真实物理位置。

    任务切换时,操作系统的其中一项工作就是重新配置MMU,使代码和数据能被输入任务使用,同时让输出任务的存储器可以暂时访问。这进一步增强了任务之间的分离,构建安全可靠的系统。

    这里我们不再深入研究所有细节。简而言之,ARM处理器的MMU使用了“页面表”(外部存储器中)的数据,驱动并控制转换。系统已经经过一系列优化(如转换查找缓冲器(TLBs),缓存通过转换降低读取页面表的功耗),让转换过程的功耗降到最低。

    文章来源:ARM微信公众号

    围观 420

    自25年前ARM1的诞生起,ARM指令集便不断演变。Cortex-A处理器实际支持两个指令集,每个指令集都有各自的扩展。

    ARM指令集

    ARM指令集基于首款ARM处理器支持的原始指令集。该指令集已经过了数次扩展。简而言之,这是一个负载-存储指令集,拥有不同指令组,主要用于数据处理、存储访问、系统控制和控制流程。现代的ARM指令集非常强大,适用范围非常广泛。在指令集内,所有指令被编码为32位固定长度的字,并且必须与字边界一致。

    Thumb指令集

    Thumb指令集是ARM指令集的子集,其中每个指令被编码为16位半字,并且必须与半字边界一致。Thumb指令集最初的依据是,在编译高级语言(如C语言)时,减小最常用的指令的大小,从而提高代码密度。由于指令越小,会有更多指令可以汇集在给定的高速缓存,对运行指令的高速缓存就越有利。

    高级SIMD扩展

    高级SIMD扩展也被称为NEON,是一组庞大的指令集,通过扩充寄存器集实现SIMD向量处理能力。

    向量浮点(VFP)

    VFP指令集实用与NEON的相同的寄存器分组,是符合IEEE-754单、双精度浮点的运算指令。

    Thumb-2技术

    Thumb-2是一个扩展集的总称,起初为ARMv6T2(第一款,使用ARM1156T2-S处理器)的Thumb指令集。由此生成一个混合长度指令集,同时具备Thumb的高代码密度和ARM指令集的高性能和高灵活性。

    如果使用过Cortex-M微控制器,您一定会对Thumb-2非常熟悉。在最小(Cortex-M0和Cortex-M0+)到最大(Cortex-M7中)的各种子集中,核心仅支持Thumb-2。你会发现,使用Cortex-A处理器可以生成更多的代码。

    一般来说,为Cortex-A编译的大部分高级代码都是针对Thumb(及Thumb-2)的。这使编译器能够在最大程度上做出明智的判断,从多种选择中选取需要的指令,并实现代码空间编译和性能编译之间的差异最大化。

    ARM指令集通常被用于代码段,性能至关重要。有时,这些代码段需要通过手工在汇编器上编码,ARM指令集也因此成为最佳选择。

    NEON指令集可通过多种方式访问:

    1、支持常用数学、分析函数和算法的库。

    2、编译器可以为多种内在函数集提供支持,允许直接使用C语言访问几乎整个NEON指令集。通过这种方法,可以用最简便的方式将NEON操作插入C语言。

    3、可以直接在汇编器上手工实现NEON。

    4、编译器还支持迭代循环的自动向量化。将代码写入一些简单指令,编译器会非常有效地展开极其复杂的循环,并进行向量化。

    如果对ARMv7-A处理器很熟悉,您还会注意到作为ARMv8-A也在使用的一些其它指令。

    加密扩展

    这些是ARMv8-A中的新指令,运行在NEON寄存器组,旨在有效地执行密码函数的算法。

    负载获取和存储释放(Load Acquire and Store Release)

    这些新指令匹配C++11访存排序语义,编译非常高效。它们还可用于降低对数据端内存屏障的需求,部分消除与其有关的能耗支出。

    另外,还有其它一些浮点和屏障指令的扩展。

    文章来源:ARM微信公众号

    围观 954

    当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是:

    IMPORT main

    B main

    直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户随便定义。

    在ARM ADS环境中,还另外提供了一套系统级的呼叫机制。

    IMPORT __main

    B __main

    __main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()。所以说,前者是库函数,后者就是我们自己编写的main()主函数;

    因此我们用的B __main其实是执行库函数,然后该库函数再调用我们的main() 函数,因此在单步调试时会看到先要跑一段程序(其实是库函数),然后再单步到我们自己的main函数(这个同时也说明如果有B __main 则就对应必须有main函数,否则编译出错),如果我们用 B main来进入我们的主函数的话,那在单步调试时就看到直接进入到我们自己的main函数了,中间不会看到其他程序;

    那么用B __main和用B main 这两这进入我们的main函数方式有什么不同呢?

    如果采用前者则会由编译器加入一段"段拷贝"程序,即我们说的从加载域到执行域转化程序;而采用后者就没有这个了,因此如果要进行 "段拷贝"只能自己动手编写程序来实现了,完成段拷贝后就可以进入我们的主函数了,当然这个主函数不一定是叫做main(),可以起个其他好听的名字,这个有别于使用B __main方式;不管采用哪种方式进入我们的程序,都要有一段"段拷贝"程序,跑完了段拷贝后才能可以进入我们主程序了!(顺便提一下:startup.s这个文件并没有所谓的"段拷贝"功能,再看也无益!)

    对含有启动程序来说,“执行地址与加载地址相同”不容易实现:

    如果执行地址与加载地址相同哪当然不需要做“段拷贝”,但是个人理解编译器还会加入“段拷贝”程序(如果用B __main 的话),只是因为条件不满足而不执行而已;但是对含有启动程序来说,“执行地址与加载地址相同”就不容易了。因为启动程序是要烧到非易失存储器里,用来在上电执行的,而这个程序必定会有RW段,如果RW放在非易失存储器,如FLASH,那就不好实现RW功能了,因此要给RW移动到能够实现RW功能的存储器,如SRAM等。因此,对含有启动程序来说,“执行地址与加载地址相同”就不容易实现;程序的入口点在C 库中的__main 处,在该点,库代码执行以下操作:

    1、将非零(只读和读写)运行区域从其载入地址复制到运行地址。

    2、清零ZI 区域。

    3、跳转到__rt_entry。

    文章来源 :畅学电子网

    围观 651
    订阅 RSS - ARM Cortex