简介
从事嵌入式领域软件开发近五年,几乎都是ARM Cortex M核系列的微控制器。这五年,多亏有C语言编译器的存在,我不用碰汇编也能开发,但我好像错过了一些风景,编译器的美和CPU的美都没有领域,所以我决定度过无聊的周末假期。查找信息、动手实验和结论,以探索 ARM CPU 架构的美妙之处和 C 编译器的秘密。 (因为我个人不认同学校计算机原理课的教学方式)。
一、Arm 指令集架构
ARM指令集架构简称ISA,支持三种指令集:A64、A32、T32。
A32 指令集
A32指令集,在armv8之前的架构中也称为“ARM指令集,固定32位指令长度和4字节对齐”。
T32 指令集
T32 指令集,在 armv8 之前的架构中称为 Thumb 指令集。
最初,ARM 指令集的长度固定为 32 位。为了提高用户代码的代码密度,“Thumb 指令集被设计为 16 位指令集”,开发者可以同时使用 ARM 指令集和 Thumb 指令集来减少代码大小。但是这是两组指令,两种操作状态,在ARM状态和Thumb状态之间来回切换非常麻烦。
随着时间的推移和Thumb-2技术的引入,“作为对Thumb指令集的补充,ARM指令集的大部分功能已经被纳入到Thumb指令中16/32位微机原理,汇编语言及接口技术教程,而Thumb指令集已经演变成16位和32位混合长度的指令集,称为“Thumb-2指令集”。
Thumb-2 指令集的诞生使编译器能够在单个指令集中平衡性能和代码大小,提供出色的代码密度并最大限度地减少系统内存大小和成本。
二、Arm 架构扩展
ARM 还提供了一系列架构扩展以满足下一代处理器的需求,为 ARM 处理器提供了新的功能。
DSP 扩展
DSP for Cortex-M 为 ARM Cortex-M 处理器提供高性能“信号处理能力”,用于声音、音频、传感器集线器和机器学习等场景。无需额外的 DSP 设备即可完成信号处理。处理工作。
具有 DSP 扩展的处理器包括 Cortex-M4、Cortex-M7、Cortex-M33、Cortex-M35P、Cortex-M55 处理器。
在Thumb指令集和可选浮点运算单元的基础上增加了DSP扩展指令,使得在保持原有Cortex-M易用性的同时16/32位微机原理,汇编语言及接口技术教程,可以在Cortex-M处理器中加入数字信号处理编程模型性。
SIMD 指令
这些带有 DSP 扩展的 Cortex-M 处理器还提供“SIMD 指令”以对 8 位或 16 位整数进行操作。
SIMD 代表单指令多数据。在所有寄存器仍为 32 位的基础上,“SIMD 指令可以同时操作两个 16 位值或四个 8 位值”。
处理 8 位或 16 位数据的指令在处理视频或音频数据等数据时非常有用,因为这些数据不需要 32 位的宽度。 SIMD 指令提供了并行处理这些数据的能力。
浮点单元
ARM 浮点单元技术为“半精度、单精度和双精度浮点运算”提供了高性能和高效的硬件支持。
Arm浮点单元使用完整的软件库支持,完全兼容IEEE-754标准,特别适合对浮点计算精度要求高的应用场景。
浮点数据类型的应用场景如下:
氦
ARM Helium技术是ARM Cortex-M处理器家族的M配置向量扩展,简称MVE。该技术是 Armv8.1-M 架构的扩展,为小型嵌入式设备提供机器学习应用。显着的性能提升。
Cortex-M55 是第一个具有此扩展的处理器。
Helium 技术增加了 150 多个新的标量和向量指令,其中整数 Helium 技术可以高效计算 8 位、16 位、32 位定点数据、16 位和 32 位定点数据传统格式广泛用于信号处理,如音频处理,8位定点格式在机器学习处理中很重要,如神经网络计算、图像处理等。
同样,Helium 支持浮点数据类型,包括单精度浮点数(32 位)和半精度浮点数(16 位)。
三、Cortex-M 使用什么指令集
介绍了ARM的基本指令集和扩展指令集。是时候回答我们的问题了:ARM Cortex-M 使用什么指令集?
“整个ARM Cortex-M家族只支持一种指令集:Thumb指令集或Thumb-2指令集,准确的说是支持T32指令集。”
在 Cortex-M 阵营的众多成员中,每个处理器都以不同的方式支持 Thumb/Thumb-2 指令集。 “大多数处理器支持 Thumb/Thumb-2 指令集的子集。”
Cortex-M0、Cortex M3、Cortex M4、Cortex M7系列支持的Thumb指令集如图所示。
Cortex-M23 和 Cortex-M33 内核支持的 Thumb 指令如下图所示。图中黄色部分为ArmV8-M系列新指令:
至此,ARM 探索之旅的第二站就结束了!下一站见!
请登录后发表评论
注册
社交帐号登录