【ARM】(1)架构简介

news2024/11/20 6:20:48

前言

        ARM既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。

        ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权(IP供应商,本身不直接从事芯片生产,而是转让设计许可,由合作公司生产各具特色的芯片。

        ARM处理器的内核是统一的,由ARM公司提供,而片内部件则是多样的,由各大半导体公司设计,这使得ARM设计嵌入式系统的时候,可以基于同样的核心,使用不同的片内外设,从而具有很大的优势。

一、ARM内核与架构

        任何一款ARM芯片都由两大部分组成:ARM内核,外设。

ARM内核

        包括了寄存器组、指令集、总线、存储器映射规则、中断逻辑和调试组件等。 内核是由ARM公司设计并以销售方式授权给个芯片厂商使用的(ARM公司本身不做芯片)。 比如为高速度设计的Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(就是内核),后者是指令集的架构(也简称架构)

外设部分 

        包括计时器、A/D转换器、存储器、i2c、UART、SPI、ROM...等等,则完全由各芯片厂商自己设计并与ARM内核衔接配套。不同的芯片厂商就有不同的外设,因此构成了数量和规格庞大的ARM芯片产业。

ARM指令集架构

        指令集的设计是处理器结构中最重要的一个部分,用ARM的术语称之为ISA(Instruction Set Architecture)。

        指令集可以说是cpu设计的灵魂,是打开CPU这个潘多拉魔盒的咒语,要想使用cpu,我们只能通过这些指令来操作cpu。

        对于32位的cpu,这些指令就是一个个32位的01的序列,不同的值就代表了不同的机器指令,cpu的硬件能完美的解析并执行这些指令,比如寻址、运算、异常处理等等。

        当我们用手机玩着王者荣耀的时候,要知道我们的每发的一招,其实最终都是被翻译成了一系列机器指令。

        从1985年ARMv1架构诞生起,到2011年,ARM架构已经发展到了第八代ARMv8。

        Cortex-A32/35/53/57/72/73/77/78采用的都是ARMv8架构,这是ARM公司的首款支持64位指令集的处理器架构。

ARM11之前的处理器和指令集架构

ARM11芯片之前,每一个芯片对应的架构关系如下:

ARM11之后处理器和指令集架构

        ARM11芯片之后,也就是从ARMv7架构开始,ARM的命名方式有所改变。

        新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。

        很巧合,又是这三个字母A、R、M

Cortex-A系列(A:Application)

        针对日益增长的消费娱乐和无线产品设计,用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域,如智能手机、平板电脑、汽车娱乐系统、数字电视,智能本、电子阅读器、家用网络、家用网关和其他各种产品。

Cortex-R系列 (R:Real-time)

        针对需要运行实时操作的系统应用,面向如汽车制动系统、动力传动解决方案、大容量存储控制器等深层嵌入式实时应用。

Cortex-M系列(M:Microcontroller)

        该系列面向微控制器领域,主要针对成本和功耗敏感的应用,如智能测量、人机接口设备、汽车和工业控制系统、家用电器、消费性产品和医疗器械等。

Cortex-SC系列(SC:SecurCore)

        其实,除了上述三大系列之外,还有一个主打安全的Cortex-SC系列(SC:SecurCore),主要用于政府安全芯片。

        ARM11系列包括了ARM11MPCore处理器、ARM1176处理器、ARM1156处理器、ARM1136处理器,它们是基于ARMv6架构。

        ARM Cortex-A5处理器、Cortex-A7处理器、Cortex-A8处理器、Cortex-A9处理器、Cortex-A15处理器隶属于Cortex-A系列,基于ARMv7-A架构。

        Cortex-A53、Cortex-A57两款处理器属于Cortex-A50系列,首次采用64位ARMv8架构。

        2020年ARM最近发布了一款全新的CPU架构Cortex-A78,是基于ARMv8.2指令集。

二、ARM架构演进

ARM架构演进规律主要是:

  • 32位到64位
  • 低功耗到高性能
  • 单核到多核
  • 基本指令集到扩展指令集

ARM公司定义了几种主要的ARM指令集结构版本,以版本号V1-V8表示。

ARM架构在不断演变的同时,仍保持了各个版本之间的兼容性。


ARMv1架构

        1985年,ARMv1架构诞生,该版架构只在原型机ARM1出现过,只有26位的寻址空间(64MB),没有用于商业产品。

ARMv2架构

        1986年,ARMv2架构诞生,该版本架构对V1进行了扩展,首颗量产的ARM处理器ARM2就是基于该架构,包含了对32位乘法指令和协处理器指令的支持,但同样仍为26位寻址空间。其后还出现了变种ARMv2a,ARM3即采用了ARMv2a,是第一片采用Cache的ARM处理器。

ARMv3架构

        1990年,ARMv3架构诞生,第一个采用ARMv3架构的微处理器是ARM6(610)以及ARM7,ARM6作为IP核、独立的处理器、具有片上高速缓存、MMCU和写缓冲的集成CPU,寻址空间增大到32位(4GB)。变种版本有3G和3M。版本3G是不与版本2a相兼容的版本3。版本3M引入了有符号和无符号数乘法和乘加指令。

ARMv4架构

        1993年,ARMv4架构在V3版上作了进一步扩充,是目前应用最广的ARM架构,ARM7(7TDMI)、ARM8、ARM9(9TDMI)和Strong ARM均采用了该架构。ARM在这个系列中引入了T变种指令集,即处理器可工作在Thumb状态,增加了16位Thumb指令集。V4不再强制要求与26位地址空间兼容,而且还明确了哪些指令会引起未定义指令异常。

ARMv5架构

        1998年,ARMv5架构诞生,在V4版基础上增加了一些新的指令,ARM7(EJ)、ARM9(E)、ARM10(E)和Xscale采用了该架构,这版架构改进了ARM/Thumb状态之间的切换效率。这些新增命令有带有链接和交换的转移BLX指令;计数前导零CLZ指令;BRK中断指令;增加了数字信号处理指令(V5TE版);为协处理器增加更多可选择的指令。此外还引入了DSP指令和支持JAVA。

ARMv6架构

        V6版架构于2001年正式发布,首先被应用在ARM11处理器。V6版架构在降低耗电量的同时,还强化了图形处理性能。它还引进了包括单指令多数据(SIMD) 运算在内的一系列新功能。通过追加有效进行多媒体处理的SIMD(Single Instruction,Multiple Data,单指令多数据)功能,将语音及图像的处理功能提高到了原型机的4倍。此外,还引入了混合16位/32位的Thumb-2指令集和Trust Zone技术。

ARMv7架构

        2004年,ARMv7架构诞生,该版本架构采用了Thumb-2技术,它是在ARM的Thumb代码压缩技术的基础上发展出来的,并且保持了对已存ARM解决方案的完整的代码兼容性。此外,ARMv7还支持改良的运行环境,来迎合不断增加的JIT和DAC技术的使用。

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

        从这个时候开始ARM以Cortex来重新命名处理器,Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9/5/7/15/17都是基于该架构。

ARMv6-M架构

        2007年,在ARMv6基础上衍生了ARMv6-M架构,该架构是专门为低成本、高性能设备而设计,向以前由8位设备占主导地位的市场提供32位功能强大的解决方案。Cortex-M0/1/0+即采用的该架构。

ARMv8架构

        2011年,ARMv8架构诞生,Cortex-A32/35/53/57/72/73采用的是该架构,这是ARM公司的首款支持64位指令集的处理器架构。由于ARM处理器的授权内核被广泛用于手机等诸多电子产品,故ARMv8架构作为下一代处理器的核心技术而受到普遍关注。

        ARMv8是在32位ARM架构上进行开发的,主要被用于对扩展虚拟地址和64位数据处理技术有更高要求的产品领域。ARMv8是近20年来,ARM架构变动最大的一次。它引入的Execution State、Exception Level、Security State等新特性,已经颠覆了我们对旧的ARM架构的认知。

        可以看出,从ARMv7架构开始,ARM的命名方式有所改变。新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。

Cortex-A:针对高性能计算。如我们目前手机SoC中常出现的Cortex-A76等。

Cortex-R:针对实时操作处理。主要是面向嵌入式实时处理器。在汽车的电子制动系统,工业控制领域等领域比较常见。

Cortex-M:专为低功耗、低成本系统设计。目前火热的IoT领域常常见到采用Cortex-M架构的处理器。

       

三、ARM授权

        如何来理解ARM授权呢?

        就比如我们制造汽车,ARM公司相当于拥有最先进的的'发动机'设计方案,但是他不'生产发动机',而是把设计方案授权给各大'汽车厂商'生产,赚来的钱继续研发更先进的‘发动机’。

        ARM授权分为ARM架构授权、IP核授权、使用层级授权

        一个公司若想使用ARM的内核来做自己的处理器,比如ST、苹果、三星、TI、高通、华为等等,必须向ARM公司购买其架构下的不同层级授权,根据使用需要购买相应的层级授权。

        架构的授权方式有三种:架构层级授权、内核层级授权(ip核授权)、使用层级授权。

1.架构层级授权,是指可以对ARM架构进行大幅度改造,甚至可以对ARM指令集进行扩展或缩减,苹果就是一个很好的例子,在使用ARMv7-A架构基础上,扩展出了自己的苹果swift架构;

2.内核层级授权,是指可以以一个内核为基础然后在加上自己的外设,比如UART、GPIO、SPI、ADC等等,最后形成了自己的MCU,这种公司很多,比如三星、TI;

3.使用层级授权,要想使用一款处理器,得到使用层级的授权是最基本的,这就意味着你只能拿别人提供的定义好的ip来嵌入在你的设计中,不能更改人家的ip,也不能借助人家的ip创造自己的基于该ip的封装产品。

        因此,如果华为分别拿到架构授权和ip核授权,那么意味着它可以在ARM指令集基础上根据需要创建出自己的内核架构,并可添加各种片内外设比如通信接口、显示器控制接口、GPIO等等,从而生产出自己的“处理器芯片”。

        其实就像我写了一篇文章,我告诉甲,你可以拿去修改后使用,便是架构层级授权,我告诉乙,你可以在你的文章中引用我的文章,便是内核级授权,我告诉丙,你只能对我的文章进行转发,不能更改,不能添油加醋,便是使用层级授权。

三、ARM v8基础知识

  1. 四个异常等级:EL0-EL3
  2. 两种安全状态:安全和非安全
  3. 两种执行状态:AArch64 和 AArch32

异常等级

        在 ARMv8 中,执行发生在四个异常级别之一。在 AArch64 中,异常级别决定了特权级别,类似于 ARMv7中定义的特权级别。异常级别决定特权级别,因此在 ELn 执行对应于特权PLn。类似地,具有比另一个更大的n值的异常级别处于更高的异常级别。一个数字比另一个小的异常级别被描述为处于较低的异常级别。

        异常级别提供了适用于 ARMv8 架构的所有操作状态的软件执行权限的逻辑分离。它类似于并支持计算机科学中常见的分层保护域的概念。

  1. EL0 Normal user applications.
  2. EL1 Operating system kernel typically described as privileged.
  3. EL2 Hypervisor.
  4. EL3 Low-level firmware, including the Secure Monitor.

        通常,一个软件,例如应用程序、操作系统的内核或管理程序,占用一个异常级别。此规则的一个例外是内核中的虚拟机管理程序,例如 KVM,它在EL2和 EL1 上运行。

安全状态

        ARMv8A 提供两种安全状态,安全和非安全。非安全状态也称为正常世界。这使操作系统 (OS) 能够与受信任的操作系统在同一硬件上并行运新g,并提供针对某些软件攻击和硬件攻击的保护。 ARM TrustZone 技术使系统能够在正常和安全世界之间进行分区。与 ARMv7A 架构一样,安全监视器充当在正常和安全世界之间移动的网关。

执行状态

        ARMv8 架构定义了两种执行状态, AArch64和AArch32。每个状态分别用于描述使用 64 位宽通用寄存器或 32 位宽通用寄存器的执行。虽然 ARMv8 AArch32 保留了 ARMv7 对特权的定义,但在 AArch64 中,特权级别由异常级别决定。因此,在 ELn 的执行对应于特权PLn。

当处于 AArch64 状态时,处理器执行 A64 指令集。当处于 AArch32 状态时,处理器可以执行 A32(在早期版本的架构中称为 ARM)或 T32 (Thumb) 指令集。

四、SOC设计

        SoC的全称叫做:System-on-a-Chip,中文的的意思就是“把系统都做在一个芯片上”。

        SoC上集成了很多手机上最关键的部件,比如CPU、GPU、内存、也就说虽然它在主板上的存在是一个芯片,但是它里边可是由很多部件封装组成的。

        比如通常我们所说的高通801,麒麟950.三星的exynos 4412,A6等等都只是系统部件打包封装(SoC)后的总称。然而各家的打包封装的内容则不尽相同,原因也不尽相同。

        经典的ARM系统级芯片或所谓的Soc 包含许多组件,其中只有一些直接源自ARM。首先,核心本身通常深度嵌入在设备内部,在设备范畴内通常不直接可见,而调试端口通常是唯一和核心本身相连的外露部分,有一些粘合逻辑,如时钟和复位集成电路。

        由于 ARM 核心只有两个中断输入,最常见的外设就是某种中断控制器,在外设内部,各组件通过芯片上互联总线架构相互连接,对于极大多数基于ARM的设备而言,这就是标准的 AMBA 互联。

        AMBA 指定了两个总线,称为AXI的高性能系统总线,和称为APB的低功耗外设总线,APB通常用于连接所有外设,AXI则用于存储器和其他发高速设备,大多数设备都有一定数量的芯片上存储以及连接外设存储器设备的接口,但是注意,与设备的外部连接并不是AMBA总线,这仅在设备内部使用,并不外露。

举例:Exynos 4412 SCP

下面我们以 三星的Exynos(猎户座) 4412 SCP为例,来讲解这几个概念。

  1. 三星的Exynos 4412 SCP 是一款基于Cortex-A9的SOC;
  2. 如下图所示,Exynos 4412包含了4个Cortex-A9的处理器(核);
  3. Cortex-A9是基于ARMv7-A架构(指令集)的。

        由上图可知,exynos 4412出了包含4个Cortex-A9核,还包括大量的外设控制器:DRAM Controller、SROM Controller、Camera IF、JPEG、GPS/GLONASS、Power Management、USB Host、I2C、UART、SPI等。

        和三星相同的其他和arm合作的各大厂商通常会把它的CPU和各类外围IP都放到一起,然后自己拿着图纸去流片,生产出来的也是一个正方形,下面有很多引脚,这个东西不仅包含了CPU,还包含了其他的控制器,这个东西就叫做SOC(system on chip)。

        如下图所示,就是三星最终生产的Exynos 4412 ,当然了,光有这个soc还无法运行安卓,还需要借助外围大量的外设才能最终形成一个完整的系统,但是大部分最复杂的硬件部分模块都已经集成到了这个soc中。

        目前各大厂商所做的事情,就是买来ARM的授权,得到ARM处理器的源代码,而后自己搞一些外围IP(或者买或者自己设计),组成一个SOC后,去流片。不同的SOC,架构不同(就是CPU如何和IP联系起来,有的以总线为核心,有的以DDR为核心)。

        海思是拥有自主产权的SOC架构。可是,无论任何厂商,再怎么折腾,都没有怎么动过CPU,ARM核心就好好的呆在那里,那就是中央处理器。

参考链接:

到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念【科普】 - 知乎

ARM架构发展史

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

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

相关文章

加锁常见的问题

锁其是用来控制在某些场景下让代码串行的工具。我们为了充分利用计算机的硬件性能,发明了多线程,多线程有好处,但同时也有它复杂的一面,必须控制好多个线程的执行,才能驯服这个有能力也有脾气的烈马。 一、加锁范围误区…

Java基于SSM+Vue的平时成绩管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

基于SSM+Vue的鲜花销售系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

[每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点

入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-nth-node-from-end…

【CMU15-445 Part-16】Concurrency Control Theory

Part16-Concurrency Control Theory 架构概念 Transcations txn就是通过在数据库系统中执行一系列操作(sql queries)来执行某种更高级的功能(应用程序所执行的功能)。 Transcations in SQL 一个新的事务开始 with BEGIN,txn结束with COMM…

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。本篇介绍常用的adb指令 文章目录 一、启动应用:adb shell am start二、使用浏览器打开指定网址:adb shell am start三、杀死应用进程adb shell am force-stop/adb shell am kill四、删除应用所…

【c++_containers】10分钟带你学会list

前言 链表作为一个像是用“链子”链接起来的容器,在数据的存储等方面极为便捷。虽然单链表单独在实际的应用中没用什么作用,但是当他可以结合其他结构,比如哈希桶之类的。不过今天学习的list其实是一个带头双向链表。 言归正传,让…

FFmpeg 基础模块:容器相关的 API 操作

目录 AVFormat 模块 AVFormat 前处理部分 AVFormat 读写处理部分 小结 思考 FFmpeg 目录中包含了 FFmpeg 库代码目录、构建工程目录、自测子系统目录等,具体内容如下: 现在你知道 FFmpeg 的源代码目录中都包含了哪些内容,在之后使用 FFm…

Springcloud支付模块

客户端消费者80 order 微服务提供者8001 payment 订单模块可以调动支付模块 步骤: 1、建moudle 2、改写pom 3、写yml 4、主启类 5、业务类

overleaf在线编辑工具使用教程

文章目录 1 用 orcid注册overleaf获取模板2 使用模板 1 用 orcid注册overleaf获取模板 通常来说,在期刊投稿网站information for author中找template 。下载压缩包后上传到over leaf中。 加入找不到官方模板,用overleaf中的 2 使用模板 .bib文件&…

Go语言中的指针介绍

Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址(Pointer Address)1.4.2 指针类型(Pointer Type)1.4.3 指针取值(Poi…

【CMU15-445 Part-15】Query Planning Optimization II

Part15-Query Planning & Optimization II Selection Statistics 维护每张表中的基本主要信息也就是tuple数量 N R N_R NR​以及每个属性中不同值的数量 V ( A , R ) V(A,R) V(A,R), N R N_R NR​关系R中的元组数量,单独维护,不能用pag…

Elasticsearch:ES|QL 查询语言简介

警告:此功能处于技术预览阶段,可能会在未来版本中更改或删除。 Elastic 将尽最大努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。在目前的 Elastic Stack 8.10 中此功能还没有提供。 Elasticsearch 查询语言 (ES|…

3D孪生场景搭建:3D漫游

上一篇 文章介绍了如何使用 NSDT 编辑器 制作模拟仿真应用场景,今天这篇文章将介绍如何使用NSDT 编辑器 设置3D漫游。 1、什么是3D漫游 3D漫游是指基于3D技术,将用户带入一个虚拟的三维环境中,通过交互式的手段,让用户可以自由地…

RK3568平台开发系列讲解(AI篇)车辆检测车道线识别可行驶区域分割 模型对比检测结果

🚀返回专栏总目录 文章目录 模型对比检测结果 沉淀、分享、成长,让自己和他人都能有所收获!😄 📢在当今的自动驾驶领域,车辆检测、车道线识别,可行驶区域分割等任务起着至关重要的作用。车辆检测…

Labview 实战 99乘法表

基于新手小白,使用Labview实现99乘法表,敢于发表自己的一点方法,还请各位大侠放过! 如下: 运行效果如下: 思路为:将要显示出来的数据,全部转换为字符串形式,再塞入到数组…

搭建在线python运行环境

常遇到需要一个小工具,比如生成作息时间表,今天就搭建一个可在线使用的python运行环境 当然也可以交给ChatGPT完成 1、安装canda wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.03-Linux-x86_64.shyum install -y bzi…

黑马点评-01基于Redis实现短信登陆的功能

环境准备 当前模型 nginx服务器的作用 手机或者app端向nginx服务器发起请求,nginx基于七层模型走的是HTTP协议,可以实现基于Lua直接绕开tomcat访问Redis nginx也可以作为静态资源服务器,轻松扛下上万并发并负载均衡到下游的tomcat服务器,利用集群支撑起整个项目 使用nginx部…

volatile使用方法

volatile使用方法 编译优化。使用等级3的话,可能将优化了一些变量。 这为什么会开启等第三呢?这是关于单片机的内存容量比较小,所以开启优化的话,可以可以省一些空间,但是如果。会出现些变量的问题,需要通过…

基于A4988/DRV8825的四路步进电机驱动器

概述 简化板的CNC sheild V3.0,仅保留步进电机速度与方向的控制引脚STEP/DIR、使能端EN、芯片供电VCC\GND,共计11个引脚。PCB四周开设四个M3通孔,以便于安装固定。此外,将板载的焊死的保险丝更改为可更换的保险座保险丝&#xff…