ARM概论(Advanced RISC Machines)

Posted Bingghost

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ARM概论(Advanced RISC Machines)相关的知识,希望对你有一定的参考价值。


简介

ARM7是32 位通用微处理器ARM(Advanced RISC Machines)家族中的一员,具有比较低的电源消耗和良好的性价比,
基于(精简指令)RISC结构,指令集和相关的译码机制与微程序控制的复杂指令系统的计算机相比要相对简单,
这使得它拥有比较高的指令处理能力和实时中断响应能力。

指令集包含11种基本类型:
    两种类型用于偏上算术逻辑单元,在31个寄存器(32位)间执行高速操作
                桶式移位器
                乘法器
    三种类型的指令控制数据在存储器和寄存器之间传送,
                一种用于弹性地址
                一种用于高速内容切换
                一种用于交换数据

    三种类型的指令用于控制流程和特权级执行
    三种专门用于控制外部的协处理器,此种协处理器允许指令集的功能以开放和统一的格式扩展到片外

特性:
●适用于高级语言
ARM指令集对不同高级语言的编译器来讲都比较适用,需要临界的代码段,汇编语言的编程也很简单,
不像其它的微处理器,需要依靠复杂的编译器来管理指令。

流水线技术
指令处理和存储系统的各个部分都可以连续运行。 典型的例子,一条指令正在执行,下一条指令正被译码,
第三条指令同时从存储器中取出。在存储系统中,存储接口的设计可以最大限度地发挥性能潜力而不需要花费很大的代价,
度敏感信号做成流水线方式,允许系统控制功能应用于标准的低电压逻辑,这些控制信号推动了由工业DRAM提供的快速局部访问模式

●兼容性
ARM7有32位的地址总线,所有的ARM处理器共享同一个指令集,ARM7可以配制成26位地址线,向下兼容其它早期的处理器。

●CMOS
ARM7是全静态CMOS,允许时钟在周期的任意部分被停止,但不丢失状态。

应用:
ARM7适用于那些需要紧凑且功能强大的RISC处理器系统
    电讯 GSM终端控制
    数据通信 协议转换
    便携式计算机 掌上电脑
    自动控制系统 发动机管理单元
    信息存贮系统 存储卡
    图像处理 JOEG控制器


二. 编程模式
ARM7支持不同的操作配置
    硬件配置,由输入信号控制
    其他为软件控制,称为操作模式

硬件配置信号
ARM7提供了三个硬件配置信号,处理器正在运行的时候可以改变,具体如下:
1. big and little endian  (bigend 位)
ARM7 依据BIGNED 信号为高或者低,将MEM中的数据当作Big Endian 或 Little Endian 格式,
MEM 被看作字节线性存储,序号从0向上排列,字节0到3为第一个存储字,4 到 7为第二个,以此类推

在LittleEndian格式,一个字的最小号字节被当作最低字节,最大号字节被当作最高字节。
字节0将被连结到数据线D[7:0]


在Big Endian 格式下,最高字节被存在MEM中的最低地址,最低字节被存在MEM的最高地
址。MEM中字节0对应数据线D[31:24],endianism只影响加载和存储指令。




操作模式选择
ARM7有32位地址和32位数据线。处理器支持字节(8位),字(32位)数据类型,字必须四个字节对齐。
指令按字执行,数据操作(比如加法)以字为单位执行,加载和存储操作可以为字或字节传送。

ARM7支持六种操作模式:
(1)用户模式(usr):正常的程序执行状态
(2) FIQ模式(fiq): 支持数据传送或通道处理
(3) IRQ模式(irq): 用于通用的中断处理
(4) 管理模式(svc):用于操作系统的保护模式
(5) 异常模式(abt):数据或者指令预取异常时进入
(6) 无定义模式(und):当无定义指令被执行时进入软件控制,外部中断,
           异常处理都可以改变操作模式。 大部分的应用程序在用户模式下执行。
(7)其他模式,比如管理模式,在中断、异常服务、或者访问被保护资源时进入。


寄存器
ARM7处理器共有37个寄存器
        ●31个(32位)通用寄存器
        6个状态寄存器
在任意时候16个通用寄存器(R0-R15)和一个或者两个状态寄存器对处理器来讲是可见的。
可见寄存器依据处理器模式和其它寄存器(banked registers)将被切换去支持IRQ, FIQ,管理, 异常,无定义模式的处理。异常模式,非定义模式。

在所有的模式中,16个寄存器(R0-R15)都可以直接访问。除过R15,其他的寄存器都是通用寄存器,可以用来保存数据和地址。R15保存可编程计数器PC的值,当R15被读时,位[1:0]为’0’,位[31:2]保存计数器的值。第十七个寄存器(CPSR-当前程序状态寄存器)也是可以访问的。它包括了条件代码标位和当前模式位,可以当作是PC 的扩展。R14可以当作子程序连接寄存器,当执行一个分支或者连接指令时,可以保存R15的值。在其它情况下, 可以当作通用寄存器用。R14_svc, R14_irq, R14_fiq, R14_abt, R14_und与R14相似,当中断或者异常发生时,或者是中断和异常程序中,分支和分支连接指令被执行时,可以保存R15 的返回值


FIQ模式有7个Banked 寄存器,映射到R8-14(R8_fiq- R14_fiq)。有些FIQ程序不需要存储任何寄存器。用户模式,IRQ模式,管理模式,无定义模式都有两个Banked寄存器,映射到R13和R14。这两个Banked寄存器允许每个模式有自己的堆栈指针和l链接寄存器。管理模式,IRQ模式,异常模式和无定义模式的程序(需要不止两个Banked寄存器)能够在它们自己的堆栈中存储部分或者全部的调用程序的寄存器(R0-R12),这样就可以无限制地用这些寄存器(R0-R12),这些寄存器在调用程序返回之前被恢复。另外,有5 个SPSRs寄存器(存储可编程状态寄存器),当异常发生时拷贝CPSR 。每一个特权级模式有一个SPSR



可编程状态寄存器的格式在图6中显示,N,Z,C,和V位条件代码标志位。当作处理器的算术或者逻辑运算结束时这些条件代码标志位可能被改变,也可以在程序中以此作为条件来判断指令是否被执行。I 和 F 位为中断禁止位。当I置’1’时,禁止IRQ中断,当F置’1’时,禁止FIQ中断。M[4:0]为模式位,这些位决定了处理器的操作模式。表2解释了模式位M[4:0]。并不是所有的组合都表示了有效的操作,只有那些明确定义的组合才有效。PSR寄存器的低28位(包括I,F,M[4:0])全部作为控制位。如果有异常产生这些控制位将改变,或者在管理模式,通过软件改变控制位。没有用到的位为保留位,它们的状态在在控制
位和标志位改变时可以保留。当检查PSR状态时,程序并不需要依靠保留位的值来判断,因为它们在将来的处理器中中可能为’1’或者’0’。


异常
当正常的程序流程需要被中断时,异常产生,使得处理器可以执行外设产生(例)的中断。进入异常处理之前,处理器的状态必须保存,以便异常处理完之后源程序可以继续执行。可能会有几个异常同时产生。

ARM7处理异常时,通过banked寄存器保存状态。PC和CPSR寄存器中的内容被拷贝到相应的R14和SPSR中,PC 和CPSR中的模式位M[0:4]根据异常类型被强制改变。在异常断处理中,如果要禁止其它难以管理异常的嵌套,可以置位中断禁止标志位。在需要重复进入中断处理程序的情况下,R14和SPSR应该在中断被使能之前保存到主MEM的堆栈中;当传送SPSR寄存器到堆栈或者从堆栈传送时,需要注意的是必须传送整个字(32位),而不只是标志位或者控制位。当多个异常同时产生时,固定的优先级决定异常响应的顺序。优先级将在以后章节中说明

FIQ
FIQ(快速中断请求)异常是由外部产生,将Nfiq输入拉低。此输入可以接受异步转换,在影响处理器的执行流程之前,会被延迟一个时钟周期,以便与处理器保持同步。此设计支持数据传输或者通道处理,有足够的私有寄存器转移在某些应用中需要保存的值(最小化切换成本) 。 可以置位在CPSR中的F标志位屏蔽FIQ异常 (除过用户模式) , 如果F位清零, ARM7在每一条指令结束时会检查FIQ同步器的输出是否为低电平。当检测到有FIQ低电平输入时,ARM7执行以下步骤:
(1) 将下一条将要执行的指令地址+4,保存到R14_fiq,保存CPSR的值到SPSR_fiq
(2) 强制M[4:0]=10001(FIQ模式),置位CPSR中的F,I
(3) 强制PC从地址0X1C取下一条指令

为了从FIQ返回,执行 SUBS PC,R14_fiq,#4 将恢复PC(从R14)和CPSR(从SPSR_fiq)并继续执行的被中断的程序。

IRQ
IRQ(中断请求)为普通异常,当 nIRQ 输入位低电平时产生IRQ。它的优先级低于FIQ,并且当进入FIQ异常处理程序时,它被屏蔽。在任何时候将CPSR中I 位置1,都可以屏蔽此中断(用户模式除外)。当I 位清零时,ARM7在每一条指令结束时会检查IRQ同步器的输出是否有低电平。当检测到有IRQ输入时ARM7执行以下步骤:
(1) 将下一条将要执行的指令地址+4,保存到R14_fiq,保存CPSR的值到SPSR_fiq
(2) 强制M[4:0]=10010(IRQ模式),置位CPSR中的I
(3) 强制PC从地址0X18取下一条指令

为了从IRQ状态恢复正常,执行SUBS PC,R14_fiq,#4 将恢复PC(从R14)和CPSR(从SPSR_fiq)并继续执行的被中断的程序。

异常中断
异常中断由外部的ABORT输入产生。ABORT表示当前存储器访问没有完成。举例来讲,在虚拟存储器系统中,当前地址上相应的数据可能已经从存储器被移到disc, 在访问完成之前,可能要求处理器动作以恢复这些数据。Arm7在存储器访问周期检查ABORT信号,如果有异
常产生,ARM7将执行以下两种步骤之一:
(1) 如果异常在指令预取时产生(预取异常),预取的指令被标志为无效,但是异常中断并不立即产生。如果指令没有被执行,举例来讲,在流水线中的一个分支指令,将不会产生异常,如果指令到流水线的出口并将要被执行时,异常产生。
(2) 如果异常在数据访问时产生(数据异常),ARM7的动作将依靠指令类型
        (A) 单次数据传输指令(LDR,STR)将回写改变过的基址寄存器,异常处理程序必
                   须注意到这一点。
        (B) 交换指令异常(SWP),虽然外部的读写访问可能发生,但就好像此指令没有
                    被执行一样
        (C) 块数据传输指令完成(LDM,STM),如果回写位置1,基址将改变。如果正常情况下,指令回写基址寄存器(LDM传输列表中的基址),
                    则回写被禁止。当异常产生时,所有寄存器回写都被禁止。这就意味着当LDM指令异常时,R15(总是最后一个被传送)将保留。

在指令预取异常或数据异常发生,ARM7进行以下操作:
(1) 保存地址 (异常指令地址 加4 for 指令预取异常, 加8 for 数据异常) 到R14_abt,保存CPSR到SPSR_abt
(2) 强制M[4:0]=10111(异常模式),置位CPSR中的I
(3) 强制PC从地址0X0C(预取异常)或0X10(数据异常)取下一条指令

为了从异常返回,执行SUBS PC,R14_abt,#4 (预取异常)或SUBS PC,R14_abt,#8 (数据异常),恢复PC和CPSR并继续执行被异常的指令。
当适当的MEM管理软件有效时,异常机制允许执行錀需要的页式虚拟MEM系统鐀。处理器可以产生任意地址,如果地址中的数据无效时,MMU产生异常。处理器进入系统软件陷阱,系统软件必须找出异常原因,使请求的数据有效,重新执行被异常的指令。应用程序不需要知道它用到的有效MEM的总量,也不需要异常时的状态。

软件中断
软件中断指令(SWI)从其它模式进入管理模式。通常情况下,请求一个特殊的管理函数。
当SWI指令被执行时,ARM7执行以下动作:
(1) 将SWI指令地址加4保存到R14_svc,保存CPSR的值到SPSR_svc
(2) 强制M[4:0]=10011(管理模式),置位CPSR中的 I
(3) 强制PC在地址0X80取下一条指令
为了从SWI返回,执行指令MOVS PC,R14_svc,恢复PC和CPSR的值,返回到SWI的下一条指令。

无定义的指令陷阱
当ARM7遇到自己没有办法处理的指令(第四章:指令集),它将此指令提供给现场的协处理器。如果协处理器可以执行此指令,但当时又比较忙,ARM7将进入等待状态,直到协处理器准备好或者中断产生。如果没有协处理器可以处理此指令,ARM7将进入无定义指令陷阱。

当系统中没有协处理器硬件时,陷阱可以用来做协处理器的软件仿真,或者通过软件仿真用于通用指令集扩展。
当ARM7接收到无定义指令陷阱时,执行以下步骤:
(1) 将无定义指令或协处理器指令加4保存到R14_und;保存CPSR到SPSR_und.
(2) 强制M[4:0]=11011(无定义模式),置位CPSR中的 I
(3) 强制PC在地址0X04取下一条指令
在仿真失败的指令之后,为了从陷阱返回,执行MOVS PC,R14_und,恢复CPSR并返回到无定义指令的下一条指令。








以上是关于ARM概论(Advanced RISC Machines)的主要内容,如果未能解决你的问题,请参考以下文章

ARM基础教程 | ARM与RISC-V架构的区别

苹果进军RISC-V,Arm真的不行了吗?

iOS 指令集架构 armv6armv7armv7sarm64x86_64i386

嵌入式常用的英文缩写词汇

中国芯推动RISC-V出货突破百亿颗,ARM已经后悔莫及

arm指令系统(RISC|CISC)