第2章ARM体系结构本章主要内容2.1ARM处理器基础2.2ARM处理器系列2.3ARM体系结构2.4ARM存储器结构2.5ARM的其他部件思考与习题2.1ARM处理器基础2.1.1ARM简介2.1.2冯·诺依曼结构、哈佛结构与改进的哈佛结构2.1.3CISC与RISC2.1.4流水线2.1.5ARM处理器的命名方式回本章目录2.1ARM处理器基础2.1.1ARM简介ARM(AdvancedRISCMachines)既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。ARM公司设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件,其技术具有性能高、成本低和能耗省特点。1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。ARM公司本身并不靠自有的设计来制造或出售CPU,而是将处理器架构授权给有兴趣的厂家。ARM提供ARM内核的整合硬件叙述,硬件厂商可以根据不同的市场定位对ARM内核进行扩展并生产和销售芯片。利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。回本节目录2.1ARM处理器基础2.1.1ARM简介(续)目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、Samsung、NEC、SONY、TI、飞利浦和国家半导体等这样的大公司。目前,采用ARM核的微处理器已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。2.1ARM处理器基础2.1.2冯·诺依曼结构、哈佛结构与改进的哈佛结构冯·诺依曼结构又称为普林斯顿体系结构(PrincetonArchitecture),是一种将程序指令存储器和数据存储器并在一起的存储器结构。冯·诺依曼结构的计算机其程序和数据公用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置;采用单一的地址及数据总线,程序指令和数据的宽度相同。回本节目录2.1ARM处理器基础2.1.2冯·诺依曼结构、哈佛结构与改进的哈佛结构(续)哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度。哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。2.1ARM处理器基础2.1.2冯·诺依曼结构、哈佛结构与改进的哈佛结构(续)改进的哈佛结构,其结构特点为:① 使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;② 具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输;③ 两条总线由程序存储器和数据存储器分时共用。2.1ARM处理器基础2.1.2冯·诺依曼结构、哈佛结构与改进的哈佛结构(续)51单片机虽然数据指令存储区是分开的,但总线是分时复用的,所以属于改进型的哈佛结构。ARM7是冯·诺依曼结构,ARM9是哈佛结构。现在的处理器虽然外部总线上看是冯·诺依曼结构的,但是由于内部Cache的存在,因此实际上内部来看已经类似改进型哈佛结构的了。哈佛结构复杂,不适合外围存储器的扩展,所以早期通用CPU难以采用这种结构。现在的处理器,依托Cache的存在,已经很好地将二者统一起来了。2.1ARM处理器基础2.1.3CISC与RISCCISC(ComplexInstructionSetComputer)是指复杂指令系统计算机,而RISC(ReducedInstructionSetComputer)是指精简指令系统计算机。长期以来,计算机性能的提高往往是通过增加硬件的复杂性来获的。硬件工程师们不断增加可实现复杂功能的指令和多种灵活的编址方式,甚至某些指令可支持高级语言语句的复杂操作,微处理器除了向程序员提供类似各种寄存器和机器指令功能外,还通过保存在ROM中的微程序来实现其极强的功能,使用这种设计的计算机被称为CISC计算机。回本节目录2.1ARM处理器基础2.1.3CISC与RISC(续)一般CISC计算机所含的指令数目至少300条以上,有的甚至超过500条。以Intel公司x86为核心的PC系列是CISC体系结构。随着CISC复杂性的提高,硬件越来越复杂,设计越来越困难,造价也越来越高。鉴于此,IBM公司设在纽约的JhomasI.Wason研究中心于1975年组织力量研究指令系统的合理性问题。1979年以帕特逊教授为首的一批科学家也开始在美国加州大学伯克利分校开展这一研究。结果表明,在这种计算机中,各种指令的使用率相差悬殊。一个典型程序的运算过程所使用的80%指令只占一个处理器指令系统的20%。2.1ARM处理器基础2.1.3CISC与RISC(续)事实上最频繁使用的指令是取、存和加这些最简单的指令。因此,帕特逊等人提出了精简指令的设想,即指令系统应当只包含那些使用频率很高的少量指令,并提供一些必要的指令以支持操作系统和高级语言。按照这个原则发展而成的计算机被称为RISC,ARM处理器采用的是RISC结构。RISC相对于CISC的特点有RISC指令种类和数量都较少;充分利用流水线,基本上可实现一个时钟脉冲执行一条指令的目标;RISC寄存器较多,该特性使一些操作能更快的完成;RISC代码密度不高,可执行文件体积较大,汇编代码可读性较差。2.1ARM处理器基础2.1.3CISC与RISC(续)目前CISC与RISC正在逐步走向融合,如PentiumPro、Nx586等,它们的内核是基于RISC体系结构的,但它们能接收CISC指令,并将其分解分类成RISC指令以便在同一时间内能够执行多条指令。下一代CPU将融合CISC与RISC两种技术,在软件与硬件方面二者将取长补短。2.1ARM处理器基础2.1.4流水线流水线是现代计算机处理器中必不可少的部分,它是指将计算机指令处理过程拆分为多个步骤,并通过多个硬件处理单元并行执行来加快指令执行速度。计算机中一条指令的执行可分成以下若干个阶段。①取指,从存储器中取出指令(Fetch);②译码,指令译码(Dec);③取操作数,假定操作数从寄存器组中取(Reg);④执行运算(ALU);⑤存储器访问,操作数与存储器有关(Mem);⑥结果写回寄存器(Res)。回本节目录2.1ARM处理器基础2.1.4流水线(续)以上各个阶段的操作相对都是独立的。因此,可以采用流水线的重叠技术来大大提高系统的性能,如图2-1所示。若每个阶段的执行时间是相同的,则在一个周期就可同时执行3条指令,性能可以改善3倍。2.1ARM处理器基础2.1.4流水线(续)但上述的过程是一种理想的过程,各个阶段的操作时间有长短,故流水线操作有时不会十分流畅。特别是相邻指令执行的数据相关性会产生指令执行的停顿,严重的会产生数据灾难。如图2-2所示,第2条指令的Reg操作需要第1条指令执行的结果(Res),因此,第2条指令在执行时,将不得不产生停顿。2.1ARM处理器基础2.1.4流水线(续)另外,如果碰到分支类指令,则会使后面紧接该条指令的几条指令的执行都会无效,如图2-3所示。2.1ARM处理器基础2.1.4流水线(续)1.ARM架构的3级流水线ARM7架构采用了3级流水线,分别为取指、译码和执行。图2-4所示为ARM单周期3级流水线的操作示意图。2.1ARM处理器基础2.1.4流水线(续)在上述的3级流水线中,取指的存储器访问和执行的数据通路占用都是不可同时共享的资源,对多周期指令来说,则会产生流水线阻塞。图2-5所示的带阴影的周期都是与存储器访问有关的,因此,在流水线设计中不允许重叠;而数据传送周期既需要存储器访问,又要占用数据通路,故第3条指令的执行周期不得不等第3条指令的数据传送执行后才能操作。译码主要为下一周期的执行产生相应的控制信号,原则上与执行周期紧接在一起的,故第3条指令取指后需延迟1个周期才能进入到译码周期。2.1ARM处理器基础2.1.4流水线(续)取指的存储器访问和执行的存储器传送不可同时共享,延迟1周期进入译码周期。2.1ARM处理器基础2.1.4流水线(续)2.ARM架构的5级流水线要提高处理器的性能,就必须缩短在该处理器运行的程序执行时间。instprogclkNTf式中,Tprog是执行一个程序所需时间;Ninst是执行该程序的指令条数;CPI(CyclePerInstruction)是执行一条指令平均同种数;fclk是处理器的时钟频率。2.1ARM处理器基础2.1.4流水线(续)对于ARM架构来说,增加时钟频率会增加处理器的功耗,故应尽可能降低公式中分子部分的数值。Ninst对于一个程序来说通常是一个变化不大的常数,况且在ARM架构的指令设计中,已使一条指令具有多种操作的功能(此点优于其他RISC结构处理器)。最有效的办法是减少执行一条指令所需平均周期数CPI。减少执行一条指令的平均周期数CPI的最有效办法是增加流水数的级数。2.1ARM处理器基础2.1.4流水线(续)ARM9及StrongARM架构采用了5级流水线。把存储器的取指与数据存取分开,同时还增加了I-Cache和D-Cache,以提高存储器存取的效率;其次,增加了数据写回的专门通路和寄存器,以减少数据通路冲突。5级流水线分别为:①取指:从指令存储器取指令。②指令译码:对指令进行译码,从寄存器中读取操作数。③执行:执行指令所规定的操作。④数据缓存:如果是存储器访问指令,用来实现数据缓存(通过数据Cache)。⑤写回:将操作结果写回目标寄存器。2.1ARM处理器基础2.1.4流水线(续)3.ARM的流水线设计流水线除了加深流水线的深度和加快时钟频率来提高流水线的效率和吞吐率外,还需要解决流水线中的结构相关、数据相关和控制相关等流水线相关问题。1)流水线的结构相关如果某些指令在流水线中重叠执行时,产生资源冲突,则称该流水线有结构相关。上述的3级流水线中的存储器访问和数据通路因共享资源的冲突,就产生了流水线结构相关,因而不得不使第3条指令的执行周期暂停1个周期(也称为流水线气泡)。为了避免结构相关,ARM架构采用了资源重复的方法。2.1ARM处理器基础2.1.4流水线(续)(1)采用分离式指令Cache和数据Cache。该方法使取指和存储器的数据访问不再发生冲突,同时也解决了相应的数据通路问题。(2)ALU中采用单独加法器来完成地址计算。该方法使执行周期的运算不再产生资源冲突。2)流水线的数据相关当一条指令需要前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起流水线的数据相关。数据相关有“写后读相关”、“写后写相关”和“读后写相关”等。一般流水线出现的数据相关主要是“写后读相关”。图2-4中,由于第2条指令中的Reg操作需要第1条指令的执行结果,从而产生了读后写的数据相关,使得第2条指令在执行时不得不产生停顿。对于数据相关,ARM架构采用了以下方法。2.1ARM处理器基础2.1.4流水线(续)(1)定向(也称为旁路或短路)技术。在某条指令(如图2-4中的第1条指令)产生结果之前,其他指令(如图2-4中的第2条指令)并不真正需要该结果。若能将该结果从其产生的地方直接送到其他指令需要的地方,那么就可能避免停顿。当定向(旁路)硬件检测到前一个ALU运算结果的写入寄存器是当前ALU操作的源寄存器时(假定第2条指令是ADD/SUB等运算指令),那么控制逻辑将前一个ALU运算结果前推到ALU的输入端,后一个ALU操作数就不必从源寄存器中读取操作数。2.1ARM处理器基础2.1.4流水线(续)(2)流水线互锁(PipelineInterlock)技术