【ARM编程】ARM介绍

01.ARM目录

02.前言

本文不涉及ARM编程(代码),此文仅仅是对ARM做一个了解,康康他是一个什么东西。
想要做好一件事的必要前提是:工欲善其事,必先利其器。
这也就是我为啥要写这篇不涉及编程的文章的原因,知道(了解)ARM,会让我们后面的学习有一个更加直观的认识。

03.计算机体系结构分类

计算机的发展有两种主流体系结构:

  • 冯·诺依曼结构
    冯·诺依曼机:将数据和指令都存储在存储器中的计算机。
    计算系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。因此程序指令和数据的宽度相同;如:Intel 8086、ARM7、MIPS处理器等
  • 哈佛体系结构
    哈佛机:为数据和程序提供了各自独立的存储器。
    程序计数器只指向程序存储器而不指向数据存储器,这样做的后果是很难在哈佛机上编写出一个自修改的程序。
    独立的程序存储器和数据存储器为数字信号处理提供了较高的性能。
    指令和数据可以有不同的数据宽度;具有较高的效率;如摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ARM10系列等

ps: ARM 7使用冯·诺依曼体系结构,ARM 9使用哈佛体系结构。

04.ARM公司

既然我们要了解ARM,那么就一定要了解一下ARM的提出者,ARM公司。

ARM是Advanced RISC Machines的缩写,它是一家微处理器行业的知名企业,该企业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。

1985年第一个ARM原型在英国剑桥诞生。
公司的特点是只设计芯片,而不生产。它提供ARM技术知识产权(IP)核,将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。

有ARM7/ARM9等多个版本。除了一些Unix图形工作站外,大多数ARM核心的处理器都使用在嵌入领域。
ARM,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。

05.ARM应用领域

最主要的一个领域:嵌入式领域,主要服务于嵌入式微处理器.

到目前为止,基于ARM技术的微处理器应用约占据了32位嵌入式微处理器75%以上的市场份额。
全球80%的GSM/3G手机、99%的CDMA手机以及绝大多数PDA产品均采用ARM体系的嵌入式处理器。
“掌上计算”相关的所有领域皆为其所主宰。
主要应用:消费类电子,无线、图像应用开放平台、存储、自动化、智能卡、SIM卡等。
ARM处理器的三大特点:耗电少功能强、16位/32位双指令集、众多合作伙伴。

06.ARM基本架构

首先,我们看一张ARM嵌入式架构图,例:
嵌入式ARM架构图

这里是应用软件(Apply software) 在ARM硬件设备上的抽象图:
抽象图

07.ARM各体系架构版本

7.1 ARM版本Ⅰ:V1版架构

该版架构只在原型机ARM1出现过,只有26位的寻址空间,没有用于商业产品。
其基本性能有:
基本的数据处理指令(无乘法);
基于字节、半字和字的Load/Store指令;
转移指令,包括子程序调用及链接指令;
供操作系统使用的软件中断指令SWI;
寻址空间:64MB(226)。

7.2 ARM版本 Ⅱ:V2版架构

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

7.3 ARM版本 Ⅲ:V3版架构

ARM作为独立的公司,在1990年设计的第一个微处理器采用的是版本3的ARM6。它作为IP核、独立的处理器、具有片上高速缓存、MMU和写缓冲的集成CPU。
变种版本有3G和3M。版本3G是不与版本2a向前兼容的版本3,版本3M引入了有符号和无符号数乘法和乘加指令,这些指令产生全部64位结果。
V3版架构(目前已废弃)对ARM体系结构作了较大的改动:

寻址空间增至32位(4GB);
当前程序状态信息从原来的R15寄存器移到当前程序状态寄存器CPSR中(Current Program Status Register);
增加了程序状态保存寄存器SPSR(Saved Program Status Register);
增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常。;
增加了MRS/MSR指令,以访问新增的CPSR/SPSR寄存器;
增加了从异常处理返回的指令功能。

7.4 ARM版本 Ⅳ: V4版架构

V4版架构在V3版上作了进一步扩充,V4版架构是目前应用最广的ARM体系结构,ARM7、ARM8、ARM9和StrongARM都采用该架构。
V4不再强制要求与26位地址空间兼容,而且还明确了哪些指令会引起未定义指令异常。
指令集中增加了以下功能:
符号化和非符号化半字及符号化字节的存/取指令;
增加了T变种,处理器可工作在Thumb状态,增加了16位Thumb指令集;
完善了软件中断SWI指令的功能;
处理器系统模式引进特权方式时使用用户寄存器操作;
把一些未使用的指令空间捕获为未定义指令

7.5 ARM版本 Ⅴ: V5版架构

V5版架构是在V4版基础上增加了一些新的指令,ARM10和Xscale都采用该版架构。
这些新增命令有:
带有链接和交换的转移BLX指令;
计数前导零CLZ指令;
BRK中断指令;
增加了数字信号处理指令(V5TE版);为协处理器增加更多可选择的指令;
改进了ARM/Thumb状态之间的切换效率;
E—增强型DSP指令集,包括全部算法操作和16位乘法操作;
J----支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能。

7.6 ARM版本 Ⅵ: V6版架构

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

08.ARM处理器系列

ARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11。
ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列。
每一个系列提供一套相对独特的性能来满足不同应用领域的需求。
ARM7系列
ARM9系列
ARM9E系列
ARM10E系列
ARM11系列
SecurCore系列
Intel的Xscale
Intel的StrongARM

09.ARM处理器结构

  • ARM和Thumb状态
  • RISC技术
  • 流水线技术
  • 超标量技术
9.1 ARM和Thumb状态

V4版以后有:
(1)32位ARM指令集
(2)16位Thumb指令集,功能是ARM指令集的功能子集。
ARM7TDMI核以后,T变种的ARM微处理器有两种工作状态:
(1)ARM状态
(2)Thumb状态。
当ARM微处理器执行32位的ARM指令集时,工作在ARM状态;
当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态

Thumb技术介绍
ARM7体系结构被广泛应用的时候,嵌入式控制器的市场仍然由8位、16位处理器占领。这些产品不能满足高端应用。这些应用需要32位RISC处理器的性能和更优于16位CISC处理器的代码密度。
为了解决代码密度的问题,ARM增加了T变种。
Thumb从32位ARM指令集中抽出来的36条指令格式,可重新编成16位的操作码。
在运行时,16位的Thumb指令又由处理器解压成32位指令。
Thumb核有2套独立的指令集,它使设计者得到ARM32位指令性能的同时,又能享有Thumb指令集产生的代码方面的优势,在性能和代码大小之间取得平衡。
和ARM指令集相比,Thumb指令集具有以下的局限:
完成相同的操作,Thumb指令通常需要更多的指令,因此在对系统运行时间要求苛刻的场合,ARM指令集更为合适。
Thumb指令集没有包含进行异常处理时需要的一些指令,因此在异常中断时,还是需要使用ARM指令,这种限制决定了Thumb指令需要与ARM指令配合使用。

ARM与Thumb状态转换
在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且该转变不影响处理器的工作模式和相应寄存器中的内容。
进入Thumb状态:当操作数寄存器的状态位(位[0])为1时,执行BX指令。
进入ARM状态:当操作数寄存器的状态位(位[0])为0时,执行BX指令。

9.2 RISC技术

嵌入式微处理器可以分为两类:CISC和RISC;
CISC(Complex Instruction Set Computer):复杂指令系统计算机;随着计算机技术的发展而不断引入新的复杂的指令集,计算机的体系结构会越来越复杂。
大约有20%的指令会被反复使用,占整个程序代码的80%,而余下的80%的指令却不经常使用,在程序设计中只占20%。
RISC(Reduced Instruction Set Computer):精简指令系统计算机;-采用固定长度的指令格式
-使用单周期指令
-大量使用寄存器
-可用加载/存储指令批量传输数据
-在循环处理中使用地址的自动增减

RISC技术与CISC技术比较

RISC技术

ARM处理器采用加载/存储(Load/Store)体系结构是典型的RISC处理器,即只有Load/Store的存/取指令可以访问存储器,其余指令都不允许进行存储器操作。
RISC体系结构基本特点:
(1)大多数指令只需要执行简单和基本的功能,其执行过程在一个机器周期内完成。
(2)只保留加载/存储指令。操作数由加载/存储指令从存储器取出放寄存器内操作。
(3)芯片逻辑不采用或少采用微码技术,而采用硬布线逻辑。
(4)减少指令数和寻址方式。
(5)指令格式固定,指令译码简化。
(6)优化编译。

CISC技术

ARM体系结构还采用了一些特别的技术:
所有的指令都可根据前面的执行结果决定是否被执行,提高了指令的执行效率。
可用Load/Store指令批量传输数据,以提高数据的传输效率。
可在一条数据处理指令中同时完成逻辑处理和移位处理。
RISC和CISC各有优势,界限并不那么明显。
现代的CPU往往采用CISC的外围,内部加入了RISC的特性,如超常指令集CPU就是融合了RISC和CISC的优势,成为未来的CPU发展方向之一。

9.3 流水线技术

是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术;
程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤,从而可加快程序的运行速度;

开发和设计嵌入式系统的过程中,CPU的性能是一个非常重要的考虑因素。
流水线技术是在本质上影响程序执行速度的因素。
由于计算机中一条指令的各个执行阶段相对独立,因此,现代CPU大多设计成流水线型的机器,在这种类型机器中几个指令可以并行执行。采用流水线的重叠技术大大提高了CPU的运行效率。
当流水线内部的信息通畅流动时,CPU流水线能够工作得最好。
但实际应用中,指令各执行阶段的操作时间长短不同,有一些指令序列可能会打断流水线内的信息流,所以有时流水线操作不十分通畅,会暂时降低CPU的执行速度。

10.ARM内存映射

内存映射图(memroy remap)
内存映射图

ARM内容数据流模型:
ARM内容数据流模型

arm在用户模式下可用的寄存器:
寄存器

图解状态寄存器:
状态寄存器

完整的arm寄存器集合:
在这里插入图片描述

ARM指令执行的例子:
在这里插入图片描述

arm向量表 :
在这里插入图片描述

arm中的高速缓冲存储器cache:
在这里插入图片描述
这里是引用

11.ARM高速缓存(Cache)的分类

1.统一Cache和独立的数据/程序Cache
2.写通Cache和写回Cache
3.读操作分配Cache和写操作分配Cache
4.Cache的工作原理
5.Cache地址映像和变换方式
6.Cache的替换算法

1)统一Cache和独立的数据/程序Cache

统一Cache:一个存储系统中指令预取时使用的Cache和数据读写时使用的Cache是同一个Cache。
独立的Cache:一个存储系统中指令预取时使用的Cache和数据读写时使用的Cache是各自独立的。
用于指令预取的Cache称为指令Cache。
用于数据读写的Cache称为数据Cache。
使用独立的数据Cache和指令Cache,可以在同一个时钟周期中读取指令和数据,而不需要双端口的Cache。但此时要注意保证指令和数据的一致性。

(2)写通Cache和写回Cache

当CPU更新了Cache的内容时,要将结果写回到主存中。
写通法: write-throught,指CPU在执行写操作时,必须把数据同时写入Cache和主存。
写回法: write-back,指CPU在执行写操作时,被写的数据只写入Cache,不写入主存。仅当需要替换时,才把已经修改的Cache块写回到主存中。

(3)读操作分配Cache和写操作分配Cache

当进行数据写操作时,可能Cache未命中,这时根据Cache执行的操作不同。
读操作分配Cache:当进行数据写操作时,如果Cache未命中,只是简单地将数据写入主存中。主要在数据读取时,才进行Cache内容预取。
写操作分配Cache:当进行数据写操作时,如果Cache未命中,Cache系统将会进行Cache内容预取,从主存中将相应的块读取到Cache中相应的位置,并执行写操作,把数据写入到Cache中。
对于写通类型的Cache,数据将会同时被写入到主存中,对于写回类型的Cache数据将在合适的时候写回到主存中。

4.Cache的工作原理

在Cache存储系统当中,把主存储器和Cache都划分成相同大小的块。
主存地址可以由块号M和块内地址N两部分组成。
同样,Cache的地址也由块号m和块内地址n组成。

5.Cache地址映像和变换方式

1)直接映像
快,造价低。
但由于映射策略简单,所以有一定的局限性。
如果访问频繁的块正好被映射到同一个块,就不能充分利用高速缓存的好处。
(2)组相联映像
组相联映像由组的个数来标识,每个组被实现为一个直接映射高速缓存。
高速缓存请求同时广播到所有的组。如果某组中有这个单元,该高速缓存便报告命中。
比直接映射慢,命中率较高。
(3)全相联映像
主存中任意一个块都可以映射到Cache中的任意一个块的位置上。
不同的ARM有不同大小的高速缓存和组织结构。

6.Cache的替换算法

(1)轮转法
维护一个逻辑计数器,利用该计数器依次选择将要被替换出去的Cache块。
这种算法容易预测最坏情况下Cache的性能。
缺点:在程序发生很小的变化时,可能造成Cache平均性能急剧的变化。
(2)随机替换算法
通过一个伪随机数发生器产生一个伪随机数,用新块将编号为该伪随机数的Cache块替换掉。
算法简单,易于实现。
没有考虑程序的局部性特点,也没有利用以前块地址分布情况,因而效果较差。
不易预测最坏情况下Cache的性能。

12.储存管理单元MMU

12.1 储存管理单元MMU

存储管理单元在CPU和物理内存之间进行地址转换。
由于是将地址从逻辑空间映射到物理空间,因此这个转换过程一般称为内存映射。
在ARM系统中,存储管理单元MMU主要工作:
(1)虚拟存储空间到物理存储空间的映射。在ARM中采用了页式虚拟存储管理。
(2)存储器访问权限的控制。
(3)设置虚拟存储空间的缓冲的特性

12.2 MMU的页表

页表是实现上述功能的一个重要手段,它实际上是位于内存中的一个对照表。
为了实现不同层次的管理,系统提供了基于段或页的存储器访问方式

  1. 段(section):由1MB 的存储器块构成
  2. 大页(large page):由64KB 的存储器块构成
  3. 小页(small page):由4KB 的存储器块构成
  4. 极小页(tiny page):由1KB 的存储器块构成
12.3 MMU的页表续

地址变换条目:页表的每一行对应与虚拟地址空间的一个页,该行同时包含了该虚拟内存页对应的物理内存页的地址、该页的访问权限以及缓冲特性等。我们将页表中的一行称为地址变换条目。
页表:存放在内存中,系统通常有一个寄存器来保存页表的基地址。ARM系统中使用的就是CP15的寄存器C2。
快表:从虚拟地址到物理地址的转换实际上就是查询页表的过程。由于程序在执行过程中具有局部性,即在一段时间内只是局限在少数几个单元,为了加快页表的查询速度,在系统中通常使用一个容量更小、速度更快的存储器件来保存当前需要访问的地址变换条目,这个容量小的页表又称作快表(TLB)。

12.4 快表的使用

更新:当CPU需要访问内存时,首先在TLB中查找需要的地址变换条目。若不存在则在内存页表中查询,并把查询的结果添加到TLB中。
清除:当内存中页表的内容改变或者使用新的页表时,TLB中的内容需要清空。CP15的寄存器8用于完成该功能。
锁定:可以将一个地址变换条目锁定在TLB中,以加快访问速度,CP15的寄存器10用于完成该功能。

13.总结

上面有 很多东西我省掉了,因为概念的东西可以看懂,但是涉及到实际操作的如果只是说的话,也是一知半解,还不如以后学习再研究。
借鉴文章:
ARM学习之图解ARM
ARM详细介绍
版权声明:转载请注明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值