嵌入式:ARM体系结构详解

news2024/9/22 9:14:54

文章目录

    • 指令集与指令集架构
    • 主要计算机指令集架构
      • PC及服务器领域
      • 嵌入式领域
      • 新生代
    • ARM体系结构的演变
      • ARM发展的历程

指令集与指令集架构

  • 指令:就是指挥计算机工作的命令,程序就是一系列按一定顺序排列的指令,计算机就是通过执行程序中的指令来完成工作的。
  • 指令集:就是CPU中用来计算和控制计算机系统的一套指令的集合, 每一种CPU在设计时就要规定好它能够执行的一系列的指令系统。在计算机硬件中,每条指令都有与之对应的硬件电路相对应,指令执行的过程,就是这些硬件有序工作的过程。
  • 指令集架构,有时简称为“架构”或者称为“处理器架构”,是处理器设计时制定的指令集以及与指令集相关的数据类型定义、数据存取方式等内容的一系列规划方案。
    一套指令集架构,可以使用不同的处理器硬件实现方案来设计不同性能的处理器(比如多少nm的工艺)。某种处理器的具体硬件实现方案称为微架构( Microarchitecture )。
    不同的微架构实现可能造成性能与成本的差异,但是,软件无须做任何修改便可以完全运行在任何一款遵循同一指令集架构实现的处理器上。
    因此,指令集架构可以理解为一个抽象层,如下图所示:

主要计算机指令集架构

PC及服务器领域

  • Intel: x86—CISC

  • SUN: Sparc —-RISC

  • IBM等:Power — RISC

嵌入式领域

  • ARM——RISC
  • MIPS——RISC

新生代

  • RISC-v

ARM体系结构的演变

ARM发展的历程

ARM体系结构从最初开发到现在有了很大的改进,并仍在完善和发展。

为了清楚地表达每个ARM应用实例所使用的指令集,ARM公司定义了8种主要的ARM指令集体系结构版本,以版本号V1~V8表示。

  • 版本1,本版本包括下列指令:
    该版架构只在原型机ARM1出现过,只有26位的寻址空间64MB,没有用于商业产品。
    基于字节,字和多字的存储器访问操作指令**(Load/Store)
    子程序调用指令BL在内的跳转指令;
    完成系统调用的
    软件中断指令SWI**。

  • 版本2 ,该版架构对V1版进行了扩展,例如ARM2和ARM3(V2a)架构。包含了对32位乘法指令和协处理器指令的支持。
    版本2a是版本2的变种,ARM3芯片采用了版本2a,是第一片采用片上Cache的ARM处理器。
    同样为26位寻址空间,寻址空间仍为:64MB。现在已经废弃不再使用。
    V2版架构与版本V1相比,增加了以下功能:
    乘法和乘加指令
    支持协处理器操作指令
    快速中断模式;
    SWP/SWPB的最基本存储器与寄存器交换指令;

  • 版本3较以前的版本发生了大的变化
    地址空间扩展到了32位(4GB),但除了版本3G外的其他版本是向前兼容的,也支持26位的地址空间;
    分开的当前程序状态寄存器CPSR(Current Program Status Register)备份的程序状态寄存器SPSR(Saved Program Status Register),SPSR用于在程序异常中断时保存被中断的程序状态;
    增加了三种异常模式,使操作系统代码可以方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常;增加了MRS指令和MSR指令用于完成对CPSR和SPSR寄存器的读写。修改了原来的从异常中返回的指令。

  • 版本4。与版本3相比,版本4增加了下列指令
    有符号、无符号的半字和有符号字节的load和store指令。
    增加了T变种,处理器可以工作于Thumb状态,在该状态下的指令集是16位的Thumb指令集。
    增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。
    完善了软件中断SWI指令的功能;
    把一些未使用的指令空间捕获为未定义指令
    V4版架构是目前应用最广的ARM体系结构之一,ARM7、ARM8、ARM9和StrongARM都采用该架构。

  • 版本5主要由两个变型版本5T、5TE组成
    相比与版本4,版本5的指令集有了如下的变化:
    提高了T变种中ARM/Thumb混合使用的效率。
    增加前导零记数(CLZ)指令,该指令可使整数除法和中断优先级排队操作更为有效;
    带有链接和交换的转移BLX指令;
    BRK中断指令;
    增加了数字信号处理指令(V5TE版); 为协处理器增加更多可选择的指令;
    改进了ARM/Thumb状态之间的切换效率;
    E—增强型DSP指令集,包括全部算法操作和16位乘法操作;
    J----支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能。

  • V6版架构是2001年发布的,首先在2002年春季发布的ARM11处理器中使用。在降低耗电量地同时,还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD(Single Instruction, Multiple Data,单指令多数据 )功能,将语音及图像的处理功能提高到了原型机的4倍。
    此架构在V5版基础上增加了以下功能:
    THUMBTM:35%代码压缩;
    DSP扩充:高性能定点DSP功能;
    JazelleTM:Java性能优化,可提高8倍;
    Media扩充:音/视频性能优化,可提高4倍

  • ARM V7版本:基于ARMv7版本的ARM Cortex系列产品由A、R、M三个系列组成,具体分类延续了一直以来ARM面向具体应用设计CPU的思路。

    ARMv7定义了3种不同的处理器配置(processor profiles):

    • Profile A是面向复杂、基于虚拟内存的OS和应用的
    • Profile R是针对实时系统的
    • Profile M是针对低成本应用的优化的微控制器的。

    所有ARMv7 profiles实现Thumb-2技术,Thumb-2技术比纯32位代码少使用31%的内存,降低了系统开销,同时却能够提供比已有的基于Thumb技术的解决方案高出38%的性能表现。

    同时还包括了NEON™技术的扩展提高DSP和多媒体处理吞吐量400% ,并提供浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。

    NEON 技术是 ARM Cortex™-A 系列处理器的 128 位 SIMD(单指令,多数据)架构扩展,旨在为消费性多媒体应用程序提供灵活、强大的加速功能,从而显著改善用户体验。它具有 32 个寄存器,64 位宽(双倍视图为 16 个寄存器,128 位宽。)

  • ARM v8:ARM体系结构定义了抽象机器的行为,称为处理元素(processing element),通常缩写为PE。

    ARMv8架构支持:

    • A 64-bit Execution state, AArch64.
    • A 32-bit Execution state, AArch32, 这与以前版本的ARM架构兼容

    AArch64是64位执行状态,这意味着地址保存在64位寄存器中,基本指令集中的指令可以使用64位寄存器进行处理。AArch64状态支持A64指令集。

    AArch32是32位执行状态,这意味着地址保存在32位寄存器中,基本指令集中的指令使用32位寄存器进行处理。AArch32状态支持T32和A32指令集。

    AArch64,64位执行状态:

    • 提供31个64位通用寄存器,其中X30用作过程链接寄存器。
      提供64位程序计数器(PC)、堆栈指针(SPs)和异常链接寄存器(ELRs)。
      为SIMD向量和标量浮点支持提供32个128位寄存器
      提供单个指令集A64
      定义了ARMv8异常模型,有四个异常级别,EL0 - EL3,提供了一个执行特权层次结构,
      提供对64位虚拟寻址的支持
      定义许多包含PE状态的进程状态(PSTATE)元素。A64指令集包括直接操作各种PSTATE元素的指令
      使用表示可以访问寄存器的最低异常级别的后缀来命名每个系统寄存器。
  • AArch32,32位执行状态:

    • 提供13个32位通用寄存器,以及一个32位PC、SP和link寄存器(LR)。LR同时用作ELR和过程链接寄存器。其中一些寄存器具有多个存储实例,用于不同的PE模式。
      为从Hyp模式返回的异常提供一个ELR。
      为高级SIMD向量和标量浮点支持提供32个64位寄存器
      提供两个指令集,A32和T32。
      支持基于PE模式的ARMv7-A异常模型,并将其映射到基于异常级别的ARMv8异常模型。
      提供对32位虚拟寻址的支持
      定义许多包含PE状态的进程状态(PSTATE)元素。A32和T32指令集包括直接操作各种PSTATE元素的指令,以及使用应用程序状态寄存器(APSR)或当前程序状态寄存器(CPSR)访问PSTATE的指令。
  • 这些执行状态支持三个主要指令集:

    • A32(或 ARM):32 位固定长度指令集,通过不同架构变体增强部分 32 位架构执行环境现在称为 AArch32。
    • T32 (Thumb) 是以 16 位固定长度指令集的形式引入的,随后在引入 Thumb-2 技术时增强为 16 位和 32 位混合长度指令集。部分 32 位架构执行环境现在称为 AArch32。
    • A64:提供与 ARM 和 Thumb 指令集类似功能的 32 位固定长度指令集。随 ARMv8-A 一起引入,它是一种 AArch64 指令集。
  • ARMv8架构支持以下整数数据类型:

    Byte 8 bits.
    Halfword 16 bits.
    Word 32 bits.
    Doubleword 64 bits.
    Quadword 128 bits.

  • 还支持以下浮点数据类型:

    Half-precision

    Single-precision

    Double-precision

ARM V7与V8的比较

ARM V7与V8的CPU核

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11. softmax回归的简洁实现

通过深度学习框架的高级API也能更方便地实现softmax回归模型。 继续使用Fashion-MNIST数据集,并保持批量大小为256。 import torch from torch import nn from d2l import torch as d2lbatch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch…

在IDEA中配置Maven

文章目录Maven 简介Maven 下载与安装修改Maven配置文件Maven文件目录的含义配置IDEA的MavenMaven 简介 Maven 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以程序构建能力为特色之外&#x…

数据库审核工具SQLE接口调用

点击上方蓝字关注我接上文数据库审核接口SQLE的探索使用,本次自定义接口进行调用,实现需求。1、创建自定义审核接口因直接调用SQLE的审核接口,会出现token过期,且审核及结果查询接口是分开的,因此,出于以上…

Mock模拟数据动态字节码编译插件优化

模块介绍 dmc-plugin-java 动态编译字节码 关于动态编译字节码技术参考: https://blog.csdn.net/huxiang19851114/article/details/127881616 优化如下: 动态文本类改为界面配置及数据库保存 数据库表结构: DROP TABLE IF EXISTS compi…

leetcode刷题 log day56(编辑距离总结篇~

583. 两个字符串的删除操作 【思路】这道题只有删除操作,两个字符串相等时,步数不变,不相等时,只能做删除操作,删除有三种情况:删除 word1 或删除 word2 或者两个字符串都删除,取三种情况的最小…

sytem clock for ctrl ms task and us/ms delay

Cortex-M3 的内核中包含一个 SysTick 时钟。SysTick 为一个 24 位递减计数器,SysTick 设定初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。计数到 0 时,SysTick 计数器自动重装初值并继续计数,同时内部的 COUNTF…

网页性能优化

网页性能优化 文章目录网页性能优化[TOC](文章目录)前言1.前端脚本优化1.1 减少重绘、回流1.2 缓存dom选择与计算1.3 使用事件委托而不是批量绑定2.渲染优化2.1 使用CSS3开启GPU硬件加速提升网站动画渲染性能2.2 touchmove、scroll、input事件添加防抖3.加载优化3.1 合并小图片…

怎么修改图片分辨率提高清晰度?如何调整图片dpi分辨率?

下载的图片有时候会比较模糊,想要改变图片清晰度的话就需要调整图片分辨率,很多小伙伴都不知道怎么去修改分辨率(在线修改照片分辨率(DPI) 调整图片DPI 照片dpi修改工具-压缩图)。今天小编就教大家一个非常…

关系抽取(三)实体关系联合抽取:TPlinker

参考: NLP系列之封闭域联合抽取:CasRel、TPLinker、PRGC、PURE、OneRel,实在是太卷了! - 知乎 (zhihu.com)NLP 关系抽取 — 概念、入门、论文、总结 TPlinker 论文:PLinker: Single-stage Joint Extraction of Entit…

乐观锁思想在 JAVA 中的实现——CAS

前言 生活中我们看待一个事物总有不同的态度,比如半瓶水,悲观的人会觉得只有半瓶水了,而乐观的人则会认为还有半瓶水呢。很多技术思想往往源于生活,因此在多个线程并发访问数据的时候,有了悲观锁和乐观锁。 悲观锁认为…

FinClip11月产品更新:FIDE 插件开发功能优化;开发者文档英文版上线

不知不觉 22 年进入尾声,通过一年的不断打磨,FinClip 也在不断成长,现在,让我们看看过去的 11 月,FinClip 又有了哪些新的变化。 产品方面的相关动向👇👇👇 FIDE 插件开发功能优化…

【LeetCode每日一题:1775. 通过最少操作次数使数组的和相等~~~贪心+思维题】

题目描述 给你两个长度可能不等的整数数组 nums1 和 nums2 。两个数组中的所有值都在 1 到 6 之间(包含 1 和 6)。 每次操作中,你可以选择 任意 数组中的任意一个整数,将它变成 1 到 6 之间 任意 的值(包含 1 和 6&a…

另一种在ARM/x86架构处理器上部署WebDAV服务器的方法

引言 最近搞了个矿渣,处理器是国产的RK3328,四核A53架构,64位的,性能太好了,装了个OpenWRT,想用来当nas用,但是我发现,竟然没有合适的文件服务器,局域网内用SMB确实可以…

Java并发编程—CompletableFuture的常用方法(建议收藏)

在过去的一段时间里,博主一直在给大家分享多线程并发编程里面的关键CompletableFfuture类的各种技术点,并发编程作为java开发里面关键点之一,也是大家向上提升重要的一点;对于CompletableFuture的学习一定要学到位,前面…

盘点 JDK 中基于 CAS 实现的原子类

前言 JDK 中提供了一系列的基于 CAS 实现的原子类,CAS 的全称是Compare-And-Swap,底层是lock cmpxchg指令,可以在单核和多核 CPU 下都能够保证比较交换的原子性。所以说,这些原子类都是线程安全的,而且是无锁并发&…

第4季5:图像sensor的驱动源码的编译

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 本文演示如何修改sensor的驱动源码,修改之后如何编译与运行。 一、sensor的注册接口分析 这部分内容见第4季4:图像sensor的驱动源码解析。 二、黑电平 关于黑电平的概念&a…

[附源码]计算机毕业设计抗疫医疗用品销售平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【电巢】电源管理芯片:国产化替代厂家竞逐千亿黄金赛道

前言 整个2022年三季度,全国新能源电动车的起火已高达600多起,同比上升了30%多,如果具体到每天来看,平均每天都有超过7起新能源电动车火灾发生。 7月22日,台湾省专业赛车手林某颖驾驶着一辆白色特斯拉Model X&#xff…

es与mysql之间的数据同步

常见的数据同步方案有三种: 同步调用 异步通知 监听binlog 方案一:同步调用(基本不会用,问题太多) 基本步骤如下: hotel-demo对外提供接口,用来修改elasticsearch中的数据 酒店管理服务在完成…

活动预告 | DataFunSummit 2022-MLOps 及 AI 工程化落地论坛

11月19日 13:30-17:30,OpenMLDB 项目发起人、第四范式技术副总裁 郑曌作为出品人发起 DataFunSummit 2022 MLOps 及 AI 工程化落地论坛。OpenMLDB PMC、第四范式资深系统架构科师 卢冕,将在论坛中为大家带来议题为《开源机器学习数据库 OpenM…