ARM架构

从单片机转到ARM,ARM相比单片机多了一些外设和总线。在仅仅是裸奔的情况下,如果熟悉了ARM架构,那么我认为使用任何ARM架构的芯片和用单片机将没有区别。ARM架构之所以更复杂,当然是为了跑更快以及更好地支持片上系统,所以在某种程度上来说对片上系统不是很了解的话那对于ARM架构的理解也不会那么深。

ARM架构图

下图所示的是ARM构架图。它由32位ALU、若干个32位通用寄存器以及状态寄存器、32&TImes;8位乘法器、32&TImes;32位桶形移位寄存器、指令译码以及控制逻辑、指令流水线和数据/地址寄存器组成。

  1.ALU:它有两个操作数锁存器、加法器、逻辑功能、结果以及零检测逻辑构成。

  2.桶形移位寄存器:ARM采用了32&TImes;32位的桶形移位寄存器,这样可以使在左移/右移n位、环移n位和算术右移n位等都可以一次完成。

  3.高速乘法器:乘法器一般采用“加一移位”的方法来实现乘法。ARM为了提高运算速度,则采用两位乘法的方法,根据乘数的2位来实现“加一移位”运算;ARM高速乘法器采用32&TImes;8位的结构,这样,可以降低集成度(其相应芯片面积不到并行乘法器的1/3)。

  4.浮点部件:浮点部件是作为选件供ARM构架使用。FPA10浮点加速器是作为协处理方式与ARM相连,并通过协处理指令的解释来执行。

  5.控制器:ARM的控制器采用的是硬接线的可编程逻辑阵列PLA。

      6.寄存器

ARM的各个模式

  ARM有以下7种模式:

  用户模式(User,usr) 正常程序执行的模式

  快速中断模式(FIQ,fiq) 用于高速数据传输和通道处理

  外部中断模式(IRQ,irq) 用于通常的中断处理

  特权模式(Supervisor,svc) 供操作系统使用的一种保护模式

  数据访问中止模式(Abort,abt) 用于虚拟存储及存储保护

  未定义指令中止模式(Undefined,und) 用于支持通过软件方针硬件的协处理器

  系统模式(System,sys) 用于运行特权级的操作系统任务

  其中除了用户模式之外都称之为特权模式(privileged modes),而在privileged modes中除了系统模式其它都称为异常模式,即exception mode。起初关于异常这个词我的理解有些偏差,我认为异常模式就是这个系统出错了,而实际上不是。exception mode的意思是例外,意思是“这模式什么时候会发生不好说……”,比如说来了个外部中断也会进入异常模式,但是此时系统是运行完好的。

  其中SVC用于在系统刚启动的启动文件BOOT程序中,跳转到kernel之前必须为SVC,SVC具有最高权限,可以对任何寄存器进行操作。在裸机程序中我们有时候会一直处于SVC模式下。

       关于什么时候会进入用户模式或者系统模式,以下是我的猜测,比如进入linux kernel之后会设置成sys模式,比如任务调度等等都会在sys模式中,而执行用户编写的应用程序时,系统是处于usr模式中。以上猜测需要在linux中找出证据验证。

  其中FIQ,IRQ为中断模式,有中断发生时会进入FIQ模式或者IRQ模式,至于到底是进入哪个模式是由开发者设定的。理论上FIQ模式的响应速度比IRQ模式要快。

  其中abt模式通常发生于在访问地址没有对齐时的情况,此时会跳转到abt所属的中断向量地址中去。und模式应该是取到指令之后发现指令不能用,,此时会跳转到abt所属的中断向量地址中去。以上两种模式应该是开发过程中出现BUG才会进入的,也是一种调试手段,在版本发行之前应该消除这些错误。

通用寄存器

  R13通常被用作栈指针,进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中;当退出异常吹程序时,将保存在R13所指的栈中的寄存器值弹出。

  R14又被称为连接寄存器(LinkRegister,LR),即PC的返回值。

  R15又被记作PC。ARM指令是字对齐的,PC的值的第0位和第1位总为0。也就是说是32位对齐

就Cortex-M3来说,拥有R0-R15的寄存器组。其中R13作为堆栈指针SP。SP有两个,分别为R13(MSP)和R13(PSP)即主堆栈指针(MSP)和进程堆栈指针(PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。这些寄存器都是32位的。

时钟以及总线概念

  FCLK, HCLK, andPCLK

  FCLK is used byARM920T.

  HCLK is used forAHB bus, which is used by the ARM920T, the memory controller, the interruptcontroller, the LCD controller, the DMA and USB host block.

  PCLK is used forAPB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMCinterface,ADC, UART, GPIO, RTC and SPI.

  What is AHB/APB?

  InternalAdvanced Microcontroller Bus Architecture(AMBA)是一种总线标准,以下两项都符合此标准。

  AHB(AdvancedHigh performance Bus),主要用于系统高性能、高时速速率模块间通信。

  APB(AdvancedPeripheral Bus),主要用于慢速片上外设与ARM核的通讯。

  AHB私有外设总线,只用于CM3内部的AHB外设,它们是:NVIC,FPB, DWT和ITM。

  APB私有外设总线,既用于CM3内部的APB设备,也用于外部设备(这里的“外部”是对内核而言)。CM3允许器件制造商再添加一些片上APB外设到APB私有总线上,它们通过APB接口来访问。

arm处理器架构详解

  那架构呢?再来看一张图。

  

其中左侧的就是架构,右侧的是处理器,也可以叫核。arm首个最成功的cpu是ARM7TDMI,是基于ARMv4的。

ARM架构包含了下述RISC特性:

 

  读取/储存 架构

  不支援地址不对齐内存存取(ARMv6内核现已支援)

  正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instrucTIon set)

  大量的16 &TImes; 32-bit 寄存器阵列(register file)

  固定的32 bits 操作码(opcode)长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。

  大多均为一个CPU周期执行。

  不同版本的架构会有所调整。

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

  所以目前各大厂商所做的事情,就是买来ARM的授权,得到ARM处理器的源代码,而后自己搞一些外围IP(或者买或者自己设计),组成一个SOC后,去流片。不同的SOC,架构不同(就是CPU如何和IP联系起来,有的以总线为核心,有的以DDR为核心),所以,海思是拥有自主产权的SOC架构。可是,无论任何厂商,再怎么折腾,都没有怎么动过CPU,ARM核心就好好的呆在那里,那就是中央处理器。

ARM命名规则:

  第一个数字:系列名称:eg.ARM7、ARM9

  第二个数字:Memory system

  2:带有MMU

  4:带有MPU

  6:无MMU与MPU

  第三个数字:Memory size

  0:标准Cache(4-128k)

  2:减小的Cache

  6:可变的Cache

  第四个字符:T:表示支持Thumb指令集

  D:表示支持片上调试(Debug)

  M:表示内嵌硬件乘法器(MulTIplier)

  I :支持片上断点和调试点

  E:表示支持增强型DSP功能

  J :表示支持Jazelle技术,即Java加速器

  S:表示全合成式

流水线的概念与原理

处理器按照一系列步骤来执行每一条指令,典型的步骤如下:

①  从存储器读取指令(fetch);

②  译码(以鉴别它属于哪一种指令)(dec);

③  从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(reg);

④  如将操作数进行组合以得到结果或存储器地址(ALU);

⑤  如果需要,则访问存储器以存储数据(mem);

⑥  将结果写回到寄存器堆(res)。

并不是所有指令 都需要上面所有的步骤,但是多数指令需要其中多个步骤。在执行每一步指令时,只有少量的硬件处于工作状态,这种资源的浪费是不可容忍的。有一种方法可以明显改善硬件资源利用情况,这就是当前一条指令结束之前就开始执行下一条指令,即我们常说的流水线。可以把上面的六个步骤想象成是汽车工厂流水线上的六个工人,每个人负责汽车生产的一个步骤,在第一个工人完成自己的工作之后无需等待整个汽车生产完毕再开始下一辆车的工作,每个工人至始至终都在做自己分内的工作,这样有效的提高了工作效率。类比回来,硬件使用的效率和处理器的吞吐量大大提高。有一点需要注意:从原理上说,上述流水线可将工作效率提高到六倍,但是由于硬件本身的一些限制,实际情况会少一些。

二. 流水线的分类

1.     三级流水线ARM组织

2.      五级流水线ARM组织

3.      六级流水线ARM组织

取址——发射——译码——执行——存储——回写

三. 影响流水线性能的因素

 

1.      互锁

在典型的程序处理过程中,经常会遇到这样的情形,即一条指令的结果被用作下一条指令的操作数。

【例】

LDR   r0,[R0,#0]

ADD  r0,r0,r1

该程序会在流水线上产生互锁,流水线的操作产生中断,因为第一条指令的结果在第二条指令取数时还没有产生。第二条指令必须停止,知道r0产生结果为止。

 

2.      跳转指令

跳转指令也会破坏流水线的行为,因为后续指令的取址步骤收到跳转目标计算的影响,因而必须推迟。但是,当跳转指令被译码时,在它被确认时跳转指令之前,后续的操作已经发生。这样一来已经被预取进流水线的指令不得不被丢弃。

尽管有些技术可以减少这些流水线问题的影响,但是不能完全消除这些困难。流水线级数越多,问题就越严重。对于相对简单的处理器,使用三到五级的流水线效果最好。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值