1TM139v11TheARMArchitectureARM体系结构2TM239v11TheARMArchitectureARMLtdARM-AdvancedRICSMachinesARM即可以认为是公司的名字,也可以认为是对一类微处理器的通称,也可以认为是一种技术的名字,还可以认为它是一种商业思想,1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权3TM339v11TheARMArchitectureARM公司简介ARM公司作为32位处理器内核的提供者,拥有100多家办导体合作伙伴,拥有100多家半导体合作伙伴,ARMcore是目前消费类电子市场中占有量第一的CPU体系ARM是一个CPU内核。ARM公司自己并不生产或销售芯片,它采用技术授权模式,通过出售芯片技术授权,收取授权费与技术转让费随着ARM、MIPS、ARC等成熟内核的推出,很多过去没有32位CPU研发能力的半导体公司进入这一行列。4TM439v11TheARMArchitectureARM全球分布EnglandCambridge,Maidenhead,Sheffield,BlackburnGermanyMunichFranceParis,SophiaAntipolisKoreaSeoulUSSeattle,LosGatos,WalnutCreek,Austin,Boston,SanDiegoAsiaTaiwanJapanShin-Yokohama(Tokyo)5TM539v11TheARMArchitectureARM合作伙伴6TM639v11TheARMArchitectureARMLtd世界各大半导体商场商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。基于ARM技术的微处理器应用约占据了32位RICS微处理器80%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。7TM739v11TheARMArchitecture将技术授权给其它芯片厂商形成各具特色的ARM芯片...8TM839v11TheARMArchitectureARM微处理器的特点低功耗、低成本、高性能采用RICS指令集使用大量的寄存器ARM/THUMB指令支持三/五级流水线9TM939v11TheARMArchitectureARM微处理器的特点采用RICS体系结构•固定长度的指令格式、指令简单、基本寻找方式有2-3种•使用单周期指令,便于流水线操作执行•大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率大量使用寄存器•31个通用寄存器,包括程序计数器(PC指针)均为32位寄存器•6个状态寄存器,用以表示CPU的工作状态及程序运行状态,均为32位高效的指令系统•ARM处理器支持两种指令集:ARM指令集和THUMB指令集•ARM指令为32位的长度、THUMB指令为16位长度。THUMB指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%-40%以上的存储空间,同时具备32位代码的所有优点。10TM1039v11TheARMArchitectureARM微处理器的特点ARM体系结构还采用一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗所有的ARM指令都可以根据前面的执行结果决定是否被执行,从而提高指令的执行效率可用加载/存储指令批量传输数据,以提高数据的传输效率。可在一条数据处理指令中同时完成逻辑处理和移位功能。在循环处理中使用地址的自动增减来提高运行效率11TM1139v11TheARMArchitectureARMcore的增强结构Thumb指令集主要是在代码长度和窄带宽存储器性能两方面:因为当在一个16位存储器系统里面取1条32位指令的时候,需要耗费2个存储器访问周期;比之32位的系统,其速度正好大概下降一半左右。而16位指令在32位存储器系统或16位存储器系统里的表现基本相同。正是存储器造成的系统瓶颈导致了这个的差别,除了在窄带宽系统里面的性能优势外。Thumb指令的另外一个好处的代码尺寸。同样一段C代码,用Thumb指令编译的结果,其长度大约只占ARM编译结果的65%左右,可以明显地节省空间。在大多数情况下,紧凑的代码和窄带宽的存储器系统,还会带来功耗上的优势。Thumb指令集在功能上只是ARM指令集的一个子集,某些功能只能在ARM状态下执行,如CPSR和协处理器的访问。进行异常响应时,处理器会自动进入ARM状态。从系统优化考虑,在宽带存储器上不应该放置Thumb代码,很多窄带系统具有宽带的内部存储器即使是一个单纯的Thumb应用系统,也必须加一个汇编的交互头程序,因为系统总是自动从ARM开始启动所以,不可避免会产生ARM与Thumb之间的交互问题。12TM1239v11TheARMArchitectureARMcore的增强结构指令流水线注意:执行ADD指令时PC已经指向CMP指令所在位置(即+8的位置)ADDSUBADDCMPSUBADD取指译码执行时间周期1周期2周期3ARM7系列使用3级流水线ARM95级,ARM106级,ARM117级13TM1339v11TheARMArchitecture为增加处理器指令流的速度,ARM7系列使用3级流水线.允许多个操作同时处理,比逐条指令执行要快。PC指向正被取指的指令,而非正在执行的指令FetchDecodeExecute从存储器中读取指令解码指令寄存器读(从寄存器Bank)移位及ALU操作寄存器写(到寄存器Bank)PCPCPC-4PC-2PC-8PC-4ARMThumbARMcore的增强结构14TM1439v11TheARMArchitecture最佳流水线该例中用6个时钟周期执行了6条指令所有的操作都在寄存器中(单周期执行)指令周期数(CPI)=1操作周期123456ADDSUBMOVANDORREORCMPRSBFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch15TM1539v11TheARMArchitectureLDR流水线举例该例中,用6周期执行了4条指令指令周期数(CPI)=1.5周期操作123456ADDSUBLDRMOVANDORRFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDataWritebackFetchDecodeExecuteFetchDecodeFetch16TM1639v11TheARMArchitecture分支流水线举例流水线被阻断注意:内核运行在ARM状态ARM7的指令周期数(CPI)=1.9周期123450x8000BL0x8FEC0x8004X0x8008XX0x8FECADD0x8FF0SUB0x8FF4MOV地址操作FetchDecodeExecuteFetchDecodeExecuteFetchDecodeFetchFetchDecodeExecuteLinkretAdjustFetchDecodeFetch17TM1739v11TheARMArchitectureARMcore的增强结构JAVA加速器SIMD指令集单指令流多数据流(SingleInstructionMultipleData,SIMD)能力使得软件更有效地完成高性能的媒体应用象声音和图像编码器。ARMv6指令集合中加入了超过60个SIMD指令。加入SIMA指令将使性能提高2倍到4倍。SIMD能力可以完成高端的图像编码、语音识别、3D图像DSP功能扩展(早期控制,不带乘法和乘加运算)•几条新的完成16位数据乘法和乘加操作指令•实现饱和的有符号数的加减法操作的指令•Cache预取指令PLDTRUSTZone技术18TM1839v11TheARMArchitecture数据和指令类型ARM采用的是32位架构(总线结构).4/8/16/32,主流8/32;8位:控制简单的低端产品,32位(手机、数码相机、PDA、通信设备、医疗设备等这些高端产品)ARM约定:Byte:8bits(最小单位为字节)Halfword:16bits(2byte)(半字必须与2个字节的边界对准)Word:32bits(4byte)(字必须与4个字节的边界对准)大部分ARMcore提供:ARM指令集(32-bit)(执行ARM指令集的状态称之为ARM状态)Thumb指令集(16-bit)(执行Thumb指令集的状态称之为Thumb状态)19TM1939v11TheARMArchitectureARM微处理器:存储器格式大端的数据存放格式低地址高地址地址A地址A+1地址A+2地址A+3最高有效字节的地址就是该word的地址最高有效字节位于最低地址worda=0xf6734bcdf6734bcd20TM2039v11TheARMArchitectureARM微处理器:存储器格式小端的数据格式低地址高地址地址A地址A+1地址A+2地址A+3最低有效字节的地址就是该word的地址最低有效字节位于最低地址worda=0xf6734bcdf6734bcdLPC2000小端通常是ARM处理器的缺省格式。21TM2139v11TheARMArchitectureARM微处理器:处理器工作状态(PROCESSOROPERATINGSTATES)处理器有两种工作状态:ARM:32位,执行字对准的ARM指令Thumb:16位,执行半字对准的Thumb指令ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容,状态切换开销几乎为0.;从Arm状态切换到Thumb状态LDRR0,=Lable+1BXR0;从Thumb状态切换到ARM状态LDRR0,=LableBXR0LableADDR0,R1,R2地址最低位为1,表示切换到Thumb状态地址最低位为0,表示切换到ARM状态跳转地址标号(偶数)22TM2239v11TheARMArchitectureARM微处理器:处理器工作状态进入Thumb状态:执行BX指令,并设置操作数寄存器的状态(位[0])为1。在Thumb状态进入异常(IRQ,FIQ,UNDEF,ABORT,SWIetc.),当异常处理返回时自动转换到Thumb状态进入ARM状态:执行BX指令,并设置操作数寄存器的状态(位[0])为0。进入异常时,将PC放入异常模式链接寄存器中,从异常向量地址开始执行也可进入ARM状态BXRm23TM2339v11TheARMArchitectureARM状态和Thumb状态的切换;从ARM状态转变为Thumb状态CODE32LDRR0,=Label+1BXR0;从ThumbARM状态转变为ARM状态CODE16LDRR0,=LabelBXR024TM2439v11TheARMArchitecture例子CODE32adrr0,Tstart+1bxr0nopCODE16Tstartmovr0,#10movr1,#3bldoaddstopbstopdoaddaddr0,r0,r1bxlrend25TM2539v11TheARMArchitectureARM微处理器:处理器工作状态(PROCESSOROPERATINGSTATES)Thumb代码所需的存储空间约为ARM代码的60%-70%。Thumb代码使用的指令数比ARM的代码多30%-40%。若使用32位的存储器,ARM代码比Thumb代码快约40%若使用16位的存储器,Thumb代码比ARM代码快约40%-50%与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30%系统