ARM的几个架构

2024-05-18 16:32

1. ARM的几个架构

性能排行从低到高是:
a5,1.6dmips/mhz,a7,1.9dmips/mhz,a8,2.0dmips/mhz,a9,2.5dmips/mhz,a15,5.0dmips/mhz(参见exynos5250的官方数据1.7ghz,14000dmips)。

功耗从低到高,a7,a5,a9,a8,a15。a7是cortex a系目前最低能耗比,根据arm官方宣传是a8的1/5。

发布顺序,a8,a9,a15和a7,a5。
a7是作为a15的伴核出现的,是corex m系的发展,相当于缩写的a8。a5是arm11的发展。

a7的优势是相当a8的性能,很低的功耗。

ARM的几个架构

2. ARM架构简介及详细资料

 历史  一颗主要用于路由器的Conexant ARM处理器是Acorn电脑公司(Acorn Computers Ltd)于1983年开始的开发计画。
  这个团队由Roger Wilson和Steve Furber带领,着手开发一种新架构,类似进阶的MOS Technology 6502处理器。Acorn有一大堆建构在6502架构上的电脑,因此能设计出一颗类似的晶片即意味着对公司有很大的优势。
  团队在1985年时开发出ARM1 Sample版,而首颗"真正"的产能型ARM2于次年量产。ARM2具有32位的数据汇流排、26位的定址空间,并提供64 Mbyte的定址范围与16个32-bit的暂存器。这些暂存器其中有一颗做为(word大小)程式计数器,其前面6 bits和后面2 bits用来保存处理器状态标记(Processor Status Flags)。ARM2可能是全世界最简单实用的32位微处理器,其仅容纳了30,000个电晶体(相较于Motorola六年后的68000其包含了70,000颗)。之所以精简的原因在于它不含微码(请参阅microcode)(这表示大概只有68000的1/3至1/4),而与现今大多数的 CPU 不同,它没有包含任何的高速快取。这个精简的特色使它只需消耗很少的电能,却能发挥比 Intel 80286 更好的效能。后继的处理器ARM3更备有4KB的高速快取,使它能发挥更佳的效能。
  在1980年代晚期,苹果电脑开始与Acorn合作开发新版的ARM核心,由于这专案非常重要,Acorn甚至于1990年将设计团队另组成一间名为安谋国际科技(Advanced RISC Machines Ltd.)的新公司。也基于这原因,使得ARM有时候反而称作Advanced RISC Machine而不是Acorn RISC Machine。由于其母公司ARM Holdings plc于1998年的伦敦交易市场和NASDAQ挂牌上市[1],使得Advanced RISC Machines成了ARM Ltd旗下拥有的产品。
  这个专案到后来进入了ARM6,首版的式样在1991年释出,然后苹果电脑使用ARM6架构的ARM 610来当作他们Apple Newton PDA的基础。在1994年,Acorn使用ARM 610做为他们Risc PC电脑内的CPU。
   
  在这些变革之后,核心部份却大多维持一样的大小。ARM2有30,000颗电晶体,但ARM6却也只增长到35,000颗。主要概念是以ODM的方式,使ARM核心能搭配一些选配的零件而制成一颗完整的CPU,而且可在现有的晶圆厂里制作并以低成本的方式达到很大的效能。
  ARM的经营模式在于出售其智慧财产权核(IP core),授权厂家依照设计制作出建构于此核的微控制器和中央处理器。最成功的实作案例属 ARM7TDMI,几乎卖出了数亿套内建微控制器的装置。
  DEC 购买这个架构的产权(此处会造成混淆在于其本身也制造 DEC Alpha 并研发出StrongARM。在 233 MHz 的频率下,这颗 CPU 只消耗一瓦特的电能(后来的晶片消耗得更少)。这项设计后来为了和 Intel 的控诉和解而技术移转,Intel 因而趁机以 StrongARM 架构补强他们老旧的 i960 产线。Intel 后来开发出他们自有的高效能实作,称作XScale,之后也卖给了 Marvell。
  支援智慧型型手机、PDA和其他手持装置最常见的架构是ARMv4。XScale 和 ARM926 处理器是ARMv5TE,而且比起建构在 ARMv4 的 StrongARM、ARM925T 和 ARM7TDMI 等处理器还更常见于许多高阶装置上。架构版本如下栏所示。
  设计档案
  讲求精简又快速的设计方式,整体电路化却又不采用微码,就像早期使用在Acorn微电脑的8位6502处理器。
  ARM架构包含了下述RISC特性:
  读取/储存 架构
  不支援地址不对齐记忆体存取(ARMv6核心现已支持)
  正交指令集(任意存取指令可以任意的定址方式存取数据Orthogonal instruction set)
  大量的16 × 32-bit 暂存器阵列(register file)
  固定的32 bits 操作码(opcode)长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。
  大多均为一个CPU周期执行。
  为了补强这种简单的设计方式,相较于同时期的处理器如Intel 80286和Motorola 68020,还多加了一些特殊设计:
  大部分指令可以条件式地执行,降低在分支时产生的负重,弥补分支预测器(branch predictor)的不足。
  算数指令只会在要求时更改条件编码(condition code)
  32-bit筒型位移器(barrel shifter)可用来执行大部分的算数指令和定址计算而不会损失效能
  强大的索引定址模式(addressing mode)
  精简但快速的双优先权中断子系统,具有可切换的暂存器组
  有个附加在ARM设计中好玩的东西,就是使用一个4-bit 条件编码 在每个指令前头,表示每支指令的执行是否为有条件式的
  这大大的减低了在记忆体存取指令时用到的编码位,换句话说,它避免在对小型叙述如if做分支指令。有个标准的范例引用欧几里得的最大公因子算法:
  在C程式语言中,循环为:
  int gcd (int i, int j)
  {
  while (i != j)
  if (i > j)
  i -= j;
  else
  j -= i;
  return i;
  }
  在ARM 汇编语言中,循环为:
  loop CMP Ri, Rj ; 设定条件为 "NE"(不等于) if (i != j)
  ; "GT"(大于) if (i > j),
  ; or "LT"(小于) if (i < j)
  SUBGT Ri, Ri, Rj ; 若 "GT"(大于), i = i-j;
  SUBLT Rj, Rj, Ri ; 若 "LT"(小于), j = j-i;
  BNE loop ; 若 "NE"(不等于),则继续回圈
  这避开了then和else子句之间的分支。
  另一项指令集的特色是,能将位移(shift)和回转(rotate)等功能并成"资料处理"型的指令(算数、逻辑、和暂存器之间的搬移),因此举例来说,一个C语言的叙述
  a += (j << 2);
  在ARM之下,可简化成只需一个word和一个cycle即可完成的指令
  ADD Ra, Ra, Rj, LSL #2
  这结果可让一般的ARM程式变得更加紧密,而不需经常使用记忆体存取,流水线也可以更有效地使用。即使在ARM以一般认定为慢速的速度下执行,与更复杂的CPU设计相比它仍能执行得不错。
  ARM处理器还有一些在其他RISC的架构所不常见到的特色,例如PC-相对定址(的确在ARM上PC为16个暂存器的其中一个)以及 前递加或后递加的定址模式。
  另外一些注意事项是 ARM 处理器会随着时间,不断地增加它的指令集。某些早期的 ARM 处理器(比ARM7TDMI更早),譬如可能并未具备指令可以读取两 Bytes 的数量,因此,严格来讲,对这些处理器产生程式码时,就不可能处理如 C 语言物件中使用 "volatile short" 的资料型态。
  ARM7 和大多数较早的设计具备三阶段的流水线化(Pipeline):提取指令、解码,并执行。较高效能的设计,如 ARM9,则有五阶段的流水线化。提高效能的额外方式,包含一颗较快的加法器,和更广的分支预测逻辑线路。
  这个架构使用"协处理器"提供一种非侵入式的方法来延伸指令集,可透过软体下 MCR、MRC、MRRC和MCRR 等指令来对协处理器定址。协处理器空间逻辑上通常分成16个协处理器,编号分别从 0 至 15 ,而第15号协处理器(CP15)是保留用作某些常用的控制功能,像是使用高速快取和记忆管理单元运算(若包含于处理器时)。
  在 ARM 架构的机器中,周边装置连线处理器的方式,通常透过将装置的实体暂存器对应到 ARM 的记忆体空间、协处理器空间,或是连线到另外依序接上处理器的装置(如汇流排)。协处理器的存取延迟较低,所以有些周边装置(例如 XScale 中断控制器)会设计成可透过不同方式存取(透过记忆体和协处理器)。
  Thumb  较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式执行指令均耗用4位的情形有关。在Thumb模式下,较小的opcode有更少的功能性。例如,只有分支可以是条件式的,且许多opcode无法存取所有CPU的暂存器。然而,较短的opcode提供整体更佳的编码密度(注:意指程式码在记忆体中占的空间),即使有些运算需要更多的指令。特别在记忆体埠或汇流排宽度限制在32 以下的情形时,更短的Thumb opcode能更有效地使用有限的记忆体频宽,因而提供比32位程式码更佳的效能。典型的嵌入式硬体仅具有较小的32-bit datapath定址范围以及其他更窄的16 bits定址(例如Game Boy Advance)。在这种情形下,通常可行的方案是编译成 Thumb 程式码,并自行最佳化一些使用(非Thumb)32位指令集的CPU相关程式区,因而能将它们置入受限的32-bit汇流排宽度的记忆体中。
  首颗具备 Thumb 技术的处理器是 ARM7TDMI。所有 ARM9 和后来的家族,包括 XScale 都纳入了 Thumb 技术。
  Jazelle  ARM 还开发出一项技术,Jazelle DBX (Direct Bytecode eXecution),允许它们在某些架构的硬体上加速执行Java bytecode,就如其他执行模式般,当呼叫一些无法支援bytecodes的特殊软体时,能提供某些bytecodes的加速执行。它能在现存的ARM与Thumb模式之间互相执行。
  首颗具备Jazelle技术的处理器是ARM926EJ-S:Jazelle以一个英文字母'J'标示于CPU名称中。它用来让手机制造商能够加速执行Java ME的游戏和套用程式,也因此促使了这项技术不断地开发。
  Thumb-2  Thumb-2 技术首见于 ARM1156 核心 ,并于2003年发表。Thumb-2 扩充了受限的 16-bit Thumb 指令集,以额外的 32-bit 指令让指令集的使用更广泛。因此 Thumb-2 的预期目标是要达到近乎 Thumb 的编码密度,但能表现出近乎 ARM 指令集在 32-bit 记忆体下的效能。
  Thumb-2 至今也从 ARM 和 Thumb 指令集中派生出多种指令,包含位栏(bit-field)操作、分支建表(table branches),和条件执行等功能。
  ThumbEE  ThumbEE,也就是所谓的Thumb-2EE,业界称为Jazelle RCT技术,于2005年发表,首见于 Cortex-A8 处理器。ThumbEE 提供从 Thumb-2 而来的一些扩充性,在所处的执行环境(Execution Environment)下,使得指令集能特别适用于执行阶段(Runtime)的编码产生(例如即时编译)。Thumb-2EE 是专为一些语言如 Limbo、Java、C#、Perl 和 Python,并能让 即时编译器 能够输出更小的编解码却不会影响到效能。
  ThumbEE 所提供的新功能,包括在每次存取指令时自动检查是否有无效指标,以及一种可以执行阵列范围检查的指令,并能够分支到分类器(handlers),其包含一小部份经常呼叫的编码,通常用于高阶语言功能的实作,例如对一个新物件做记忆体配置。
  NEON  进阶 SIMD 延伸集,业界称为NEON技术,它是一个结合 64 和 128 bit 的 SIMD(Single Instruction Multiple Data 单指令多重数据)指令集,其针对多媒体和讯号处理程式具备标准化加速的能力。NEON 可以在 10 MHz 的 CPU 上执行 MP3 音效解码,且可以执行 13 MHz 频率以下的 GSM AMR (Adaptive Multi-Rate) 语音编码。NEON具有一组广泛的指令集、各自的暂存器阵列,以及独立执行的硬体。NEON 支援 8-, 16-, 32- 和 64-bit 的整数及单精度浮点数据,并以 SIMD 的方式运算,执行图形和游戏处理中关于语音/视讯的部分。SIMD 在 向量超级处理机 中是个决定性的要素,它具备同时多项处理功能。在 NEON 技术中,SIMD 最高可支援到同时 16 个运算。
  VFP  VFP 是在协同处理器针对ARM架构的衍生技术。它提供低成本的单精度和倍精度浮点运算能力,并完全相容于ANSI/IEEE Std 754-1985 二进制浮点算数标准。VFP 提供大多数适用于浮点运算的套用,例如PDA、智慧手机、语音压缩与解压、3D图像以及数位音效、印表机、机上盒,和汽车套用等。VFP 架构也支援 SIMD(单指令多重数据)平行化的短向量指令执行。这在图像和讯号处理等套用上,非常有助于降低编码大小并增加输出效率。
  在ARM-based处理器中,其他可见的浮点、或 SIMD 的协同处理器还包括了 FPA, FPE, iwMMXt。他们提供类似 VFP 的功能但在opcode层面上来说并不具有相容性。
  安全性扩充  TrustZone(TM) 技术出现在 ARMv6KZ 以及较晚期的套用核心架构中。它提供了一种低成本的方案,针对系统单晶片(SoC)内加入专属的安全核心,由硬体建构的存取控制方式支援两颗虚拟的处理器。这个方式可使得套用程式核心能够在两个状态之间切换(通常改称为领域(worlds)以避免和其他功能领域的名称混淆),在此架构下可以避免资讯从较可信的核心领域泄漏至较不安全的领域。这种核心领域之间的切换通常是与处理器其他功能完全无关联性(orthogonal),因此各个领域可以各自独立运作但却仍能使用同一颗核心。记忆体和周边装置也可因此得知目前核心运作的领域为何,并能针对这个方式来提供对装置的机密和编码进行存取控制。典型的 TrustZone 技术套用是要能在一个缺乏安全性的环境下完整地执行作业系统,并在可信的环境下能有更少的安全性的编码。
  授权方  ARM 公司本身并不靠自有的设计来制造或出售 CPU ,而是将处理器架构授权给有兴趣的厂家。ARM 提供了多样的授权条款,包括售价与散播性等项目。对于授权方来说,ARM 提供了 ARM 核心的整合硬体叙述,包含完整的软体开发工具(编译器、debugger、SDK),以及针对内含 ARM CPU 矽晶片的销售权。对于无晶圆厂的授权方来说,其希望能将 ARM 核心整合到他们自行研发的晶片设计中,通常就仅针对取得一份生产就绪的智慧财产权核心(IP Core)认证。对这些客户来说,ARM 会释出所选的 ARM 核心的版图,连同抽象模拟模型和测试程式,以协助设计整合和验证。需求更多的客户,包括整合元件制造商(IDM)和晶圆厂家,就选择可合成的RTL(暂存器传输级,如 Verilog)形式来取得处理器的智慧财产权(IP)。藉著可整合的 RTL,客户就有能力能进行架构上的最佳化与加强。这个方式能让设计者完成额外的设计目标(如高震荡频率、低能量耗损、指令集延伸等)而不会受限于无法更动的电路图。虽然 ARM 并不授予授权方再次出售 ARM 架构本身,但授权方可以任意地出售制品(如晶片元件、评估板、完整系统等)。商用晶圆厂是特殊例子,因为他们不仅授予能出售包含 ARM 核心的矽晶成品,对其它客户来讲,他们通常也保留重制 ARM 核心的权利。
  就像大多数 IP 出售方,ARM 依照使用价值来决定 IP 的售价。在架构上而言,更低效能的 ARM 核心比更高效能的核心拥有较低的授权费。以矽晶片实作而言,一颗可整合的核心要比一颗硬体宏(黑箱)核心要来得贵。更复杂的价位问题来讲,持有 ARM 授权的商用晶圆厂(例如韩国三星和日本富士通)可以提供更低的授权价格给他们的晶圆厂客户。透过晶圆厂自有的设计技术,客户可以更低或是免费的ARM预付授权费来取得 ARM 核心。相较于不具备自有设计技术的专门半导体晶圆厂(如台积电和联电),富士通/三星对每片晶圆多收取了两至三倍的费用。对中少量的套用而言,具备设计部门的晶圆厂提供较低的整体价格(透过授权费用的补助)。对于量产而言,由于长期的成本缩减可借由更低的晶圆价格,减少ARM的NRE成本,使得专门的晶圆厂也成了一个更好的选择。
  许多半导体公司持有 ARM 授权:Atmel、Broad、Cirrus Logic、Freescale(于2004从摩托罗拉公司独立出来)、富士通、英特尔(借由和Digital的控诉调停)、IBM,英飞凌科技,任天堂,恩智浦半导体(于2006年从飞利浦独立出来)、OKI电气工业,三星电子,Sharp,STMicroelectronics,德州仪器 和 VLSI等许多这些公司均拥有各个不同形式的ARM授权。虽然ARM的授权项目由保密契约所涵盖,在智慧财产权工业,ARM是广为人知最昂贵的CPU核心之一。单一的客户产品包含一个基本的 ARM 核心可能就需索取一次高达美金20万的授权费用。而若是牵涉到大量架构上修改,则费用就可能超过千万美元
   

3. 关于ARM架构的一些知识

[TOC]
  
 ARMv7 含16位和32位两个指令集;
   ARMv8 含32位和64位两个指令集,ARM没有64位技术,它是在 MIPS64 架构上增加了ARMv7架构的技术;
   ARM64 其实只是 ARMv8的一半,只含64位指令集;
   A53 开始之后,都是ARM64。
  
 ARMv8指令集分为Aarch64和Aarch32。后者与ARMv7基本相同,但是多了一些vfp的指令,或者以前的软件模拟实现改为硬件支持,可以说是靠着后者实现对Aarch32的向前兼容。
  
 arm7版本可以安装在armv7架构的设备上【支持32位和16位指令集的设备】;
   arm8版本可以安装在armv8架构的设备上【支持64位和32位指令集的设备】;
   arm64版本只能安装在纯64位的arm架构的设备上。
  
 出于低功耗、封装限制等种种原因,以前的一些ARM处理器没有独立的硬件浮点运算单元,需要手写软件来实现浮点运算。有与没有之间产生了两个不同的嵌入式应用程序二进制接口(EABI):软浮点与矢量浮点(VFP)。但是软浮点(soft float)和硬浮点(hard float)之间有向前兼容却没有向后兼容的能力,也就是软浮点的二进制接口(EABI)仍然可以用于有硬浮点计算单元的ARM处理器。
  
 在ARM体系架构内核中,有些有浮点运算单元(fpu),有些没有,在有fpu的情况下,就可以通过gcc编译的选项-mfloat-abi来指定使用哪种,有如下三种值:
  
 brook_linux_arm5
   brook_linux_arm6
   brook_linux_arm7
   brook_linux_arm64
  
 brook_linux_mips
   brook_linux_mips_softfloat
   brook_linux_mipsle
   brook_linux_mipsle_softfloat
  
 brook_linux_mips64
   brook_linux_mips64_softfloat
   brook_linux_mips64le
   brook_linux_mips64le_softfloat
  
 ARM体系结构 :  https://blog.csdn.net/MyArrow/article/details/8559573?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param 
  
 ARM的Cortex-A8,是由ARM控股的采用ARMv7指令集架构的处理器核心设计。

关于ARM架构的一些知识

4. ARM架构的历史

一颗主要用于路由器的Conexant ARM处理器是Acorn电脑公司(Acorn Computers Ltd)于1983年开始的开发计划。这个团队由Roger Wilson和Steve Furber带领,着手开发一种新架构,类似进阶的MOS Technology 6502处理器。Acorn有一大堆建构在6502架构上的电脑,因此能设计出一颗类似的芯片即意味着对公司有很大的优势。团队在1985年时开发出ARM1 Sample版,而首颗真正的产能型ARM2于次年量产。ARM2具有32位的数据总线、26位的寻址空间,并提供64 Mbyte的寻址范围与16个32-bit的暂存器。这些暂存器其中有一颗做为(word大小)程式计数器,其前面6 bits和后面2 bits用来保存处理器状态标记(Processor Status Flags)。ARM2可能是全世界最简单实用的32位微处理器,其仅容纳了30,000个晶体管(相较于Motorola六年后的68000其包含了70,000颗)。之所以精简的原因在于它不含微码(请参阅microcode)(这表示大概只有68000的1/3至1/4),而与现今大多数的 CPU 不同,它没有包含任何的高速缓存。这个精简的特色使它只需消耗很少的电能,却能发挥比 Intel 80286 更好的效能。后继的处理器ARM3更备有4KB的高速缓存,使它能发挥更佳的效能。在1980年代晚期,苹果电脑开始与Acorn合作开发新版的ARM核心,由于这专案非常重要,Acorn甚至于1990年将设计团队另组成一间名为安谋国际科技(Advanced RISC Machines Ltd.)的新公司。也基于这原因,使得ARM有时候反而称作Advanced RISC Machine而不是Acorn RISC Machine。由于其母公司ARM Holdings plc于1998年的伦敦交易市场和NASDAQ挂牌上市[1],使得Advanced RISC Machines成了ARM Ltd旗下拥有的产品。这个专案到后来进入了ARM6,首版的式样在1991年释出,然后苹果电脑使用ARM6架构的ARM 610来当作他们Apple Newton PDA的基础。在1994年,Acorn使用ARM 610做为他们Risc PC电脑内的CPU。在这些变革之后,内核部份却大多维持一样的大小。ARM2有30,000颗晶体管,但ARM6却也只增长到35,000颗。主要概念是以ODM的方式,使ARM核心能搭配一些选配的零件而制成一颗完整的CPU,而且可在现有的晶圆厂里制作并以低成本的方式达到很大的效能。ARM的经营模式在于出售其知识产权核(IP core),授权厂家依照设计制作出建构于此核的微控制器和中央处理器。最成功的实作案例属 ARM7TDMI,几乎卖出了数亿套内建微控制器的装置。DEC 购买这个架构的产权(此处会造成混淆在于其本身也制造 DEC Alpha 并研发出StrongARM。在 233 MHz 的频率下,这颗 CPU 只消耗一瓦特的电能(后来的芯片消耗得更少)。这项设计后来为了和 Intel 的控诉和解而技术移转,Intel 因而趁机以 StrongARM 架构补强他们老旧的 i960 产线。Intel 后来开发出他们自有的高效能实作,称作XScale,之后也卖给了 Marvell。支援智能型手机、PDA和其他手持装置最常见的架构是ARMv4。XScale 和 ARM926 处理器是ARMv5TE,而且比起建构在 ARMv4 的 StrongARM、ARM925T 和 ARM7TDMI 等处理器还更常见于许多高阶装置上。架构版本如下栏所示。设计文件讲求精简又快速的设计方式,整体电路化却又不采用微码,就像早期使用在Acorn微电脑的8位6502处理器。ARM架构包含了下述RISC特性:读取/储存 架构不支援地址不对齐内存存取(ARMv6内核现已支援)正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instruction set)大量的16 × 32-bit 寄存器阵列(register file)固定的32 bits 操作码(opcode)长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。大多均为一个CPU周期执行。为了补强这种简单的设计方式,相较于同时期的处理器如Intel 80286和Motorola 68020,还多加了一些特殊设计:大部分指令可以条件式地执行,降低在分支时产生的负重,弥补分支预测器(branch predictor)的不足。算数指令只会在要求时更改条件编码(condition code)32-bit筒型位移器(barrel shifter)可用来执行大部分的算数指令和寻址计算而不会损失效能强大的索引寻址模式(addressing mode)精简但快速的双优先级中断子系统,具有可切换的暂存器组有个附加在ARM设计中好玩的东西,就是使用一个4-bit 条件编码 在每个指令前头,表示每支指令的执行是否为有条件式的这大大的减低了在内存存取指令时用到的编码位,换句话说,它避免在对小型叙述如if做分支指令。有个标准的范例引用欧几里得的最大公因子算法:在C编程语言中,循环为:int gcd (int i, int j){while (i != j)if (i > j)i -= j;elsej -= i;return i;}在ARM 汇编语言中,循环为:loop CMP Ri, Rj ; 设定条件为 NE(不等於) if (i != j); GT(大於) if (i > j),; or LT(小於) if (i < j)SUBGT Ri, Ri, Rj ; 若 GT(大於), i = i-j;SUBLT Rj, Rj, Ri ; 若 LT(小於), j = j-i;BNE loop ; 若 NE(不等於),则继续回圈这避开了then和else子句之间的分支。另一项指令集的特色是,能将位移(shift)和回转(rotate)等功能并成资料处理型的指令(算数、逻辑、和暂存器之间的搬移),因此举例来说,一个C语言的叙述a += (j << 2);在ARM之下,可简化成只需一个word和一个cycle即可完成的指令ADD Ra, Ra, Rj, LSL #2这结果可让一般的ARM程式变得更加紧密,而不需经常使用内存存取,流水线也可以更有效地使用。即使在ARM以一般认定为慢速的速度下执行,与更复杂的CPU设计相比它仍能执行得不错。ARM处理器还有一些在其他RISC的架构所不常见到的特色,例如PC-相对寻址(的确在ARM上PC为16个暂存器的其中一个)以及 前递加或后递加的寻址模式。另外一些注意事项是 ARM 处理器会随着时间,不断地增加它的指令集。某些早期的 ARM 处理器(比ARM7TDMI更早),譬如可能并未具备指令可以读取两 Bytes 的数量,因此,严格来讲,对这些处理器产生程式码时,就不可能处理如 C 语言物件中使用 volatile short 的资料型态。ARM7 和大多数较早的设计具备三阶段的流水线化(Pipeline):提取指令、解码,并执行。较高效能的设计,如 ARM9,则有五阶段的流水线化。提高效能的额外方式,包含一颗较快的加法器,和更广的分支预测逻辑线路。这个架构使用“协处理器”提供一种非侵入式的方法来延伸指令集,可透过软件下 MCR、MRC、MRRC和MCRR 等指令来对协处理器寻址。协处理器空间逻辑上通常分成16个协处理器,编号分别从 0 至 15 ,而第15号协处理器(CP15)是保留用作某些常用的控制功能,像是使用高速缓存和记忆管理单元运算(若包含于处理器时)。在 ARM 架构的机器中,周边装置连接处理器的方式,通常透过将装置的实体暂存器对应到 ARM 的内存空间、协处理器空间,或是连接到另外依序接上处理器的装置(如总线)。协处理器的存取延迟较低,所以有些周边装置(例如 XScale 中断控制器)会设计成可透过不同方式存取(透过内存和协处理器)。 较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式执行指令均耗用4位的情形有关。在Thumb模式下,较小的opcode有更少的功能性。例如,只有分支可以是条件式的,且许多opcode无法存取所有CPU的暂存器。然而,较短的opcode提供整体更佳的编码密度(注:意指程式码在内存中占的空间),即使有些运算需要更多的指令。特别在内存埠或总线宽度限制在32 以下的情形时,更短的Thumb opcode能更有效地使用有限的内存带宽,因而提供比32位程式码更佳的效能。典型的嵌入式硬件仅具有较小的32-bit datapath寻址范围以及其他更窄的16 bits寻址(例如Game Boy Advance)。在这种情形下,通常可行的方案是编译成 Thumb 程式码,并自行最佳化一些使用(非Thumb)32位指令集的CPU相关程式区,因而能将它们置入受限的32-bit总线宽度的内存中。首颗具备 Thumb 技术的处理器是 ARM7TDMI。所有 ARM9 和后来的家族,包括 XScale 都纳入了 Thumb 技术。 ARM 还开发出一项技术,Jazelle DBX (Direct Bytecode eXecution),允许它们在某些架构的硬件上加速执行Java bytecode,就如其他执行模式般,当呼叫一些无法支援bytecodes的特殊软件时,能提供某些bytecodes的加速执行。它能在现存的ARM与Thumb模式之间互相执行。首颗具备Jazelle技术的处理器是ARM926EJ-S:Jazelle以一个英文字母'J'标示于CPU名称中。它用来让手机制造商能够加速执行Java ME的游戏和应用程式,也因此促使了这项技术不断地开发。 Thumb-2 技术首见于 ARM1156 核心 ,并于2003年发表。Thumb-2 扩充了受限的 16-bit Thumb 指令集,以额外的 32-bit 指令让指令集的使用更广泛。因此 Thumb-2 的预期目标是要达到近乎 Thumb 的编码密度,但能表现出近乎 ARM 指令集在 32-bit 内存下的效能。Thumb-2 至今也从 ARM 和 Thumb 指令集中派生出多种指令,包含位栏(bit-field)操作、分支建表(table branches),和条件执行等功能。 ThumbEE,也就是所谓的Thumb-2EE,业界称为Jazelle RCT技术,于2005年发表,首见于 Cortex-A8 处理器。ThumbEE 提供从 Thumb-2 而来的一些扩充性,在所处的执行环境(Execution Environment)下,使得指令集能特别适用于执行阶段(Runtime)的编码产生(例如即时编译)。Thumb-2EE 是专为一些语言如 Limbo、Java、C#、Perl 和 Python,并能让 即时编译器 能够输出更小的编译码却不会影响到效能。ThumbEE 所提供的新功能,包括在每次存取指令时自动检查是否有无效指标,以及一种可以执行阵列范围检查的指令,并能够分支到分类器(handlers),其包含一小部份经常呼叫的编码,通常用于高阶语言功能的实作,例如对一个新物件做内存配置。 VFP 是在协同处理器针对ARM架构的衍生技术。它提供低成本的单精度和倍精度浮点运算能力,并完全相容于ANSI/IEEE Std 754-1985 二进制浮点算数标准。VFP 提供大多数适用于浮点运算的应用,例如PDA、智慧手机、语音压缩与解压、3D图像以及数位音效、打印机、机上盒,和汽车应用等。VFP 架构也支援 SIMD(单指令多重数据)平行化的短向量指令执行。这在图像和讯号处理等应用上,非常有助于降低编码大小并增加输出效率。在ARM-based处理器中,其他可见的浮点、或 SIMD 的协同处理器还包括了 FPA, FPE, iwMMXt。他们提供类似 VFP 的功能但在opcode层面上来说并不具有相容性。

5. ARM体系结构与编程的介绍

《ARM体系结构与编程》是清华大学出版社于2003年出版的书籍,作者是杜春雷。

ARM体系结构与编程的介绍

6. 什么叫ARM系统构架

简单的概括就是ARM公司提出的一种构架,只要生产芯片的公司能够符合它的标准,就称为ARM构架的CPU。
ARM构架主要是针对移动设备的,所以不同于X86构架,不能运行windows系统。ARM经典的有ARM9、ARM11和后来的A8、A9构架。ARM9和ARM11都是比较弱得,因为图形芯片以及指令集的问题,性能较A8、A9构架要差很多。而A8、A9就如“独立显卡”一样有高性能专门负责图形的芯片加入CPU里面,所以图形性能提高了不是一点。A9当然比A8构架要更强一点,且A9很多都是双核的。
还有一种类ARM构架的CPU,高通的QSD系列,也有独立的现实芯片,也算是ARM构架的吧,不过这和ARM构架所使用的方案不同,它计算能力突出,不过图形能力不如A8、A9构架的图形芯片...

7. 关于ARM构架的问题

架构是一个逻辑概念,是一颗处理器内部不同组件之间的逻辑关系。例如不同核心间的权重关系,缓存的结构和访问形式,互连线等等。
ARM是一个设计处理器的公司,但并不生产,以出售ARM核心授权的形式盈利。不同的授权,价格不同。最低的授权是不能改变ARM原有设计的,即公司买来之后,直接生产。而最高等级的授权,可以把ARM原有的设计推倒重来,自由度大很多,但要支付给ARM公司的授权费也最高昂。只要得到了改动的授权,你就可以在ARM原有设计中加入或减少或修改架构。比如Cortex-A8的原初设计是单核心,但有不少厂家推出基于Cortex-A8的双核心产品。当初Nvidia的Trega 2,就将ARM原有的Neon扩展结构给删掉了,结果导致Trega 2的多媒体性能下降。虽然这是个失败的例子,但正是因为开放了授权,ARM的产品就十分丰富了。

关于ARM构架的问题

8. 关于ARM架构的问题

arm 指的是指令集。

不过这个指令集有很多版本还有扩展指令。arm9 就是指的大版本。arm920t 就是更详细的型号。
不同的版本可能是指令集版本不同,也可能是扩展指令不同。
其次的,ARM cpu 是针对嵌入式等等设计的 CPU ,他的是 SoC 的(System on Chip)有非常高的集成度,比如内存控制器,显示芯片,无线网芯片,存储控制器等等的功能都被塞进了这个芯片里一起封装,不同的型号,这些附加的功能电路也都有区别。

arm 自己不产 CPU ,只卖设计,而且他卖出去的设计,禁止生产公司自己修改设计(只有有限的几个公司被授权可以自己改,比如 apple )。

另外 x86 也有很多型号啊,Intel 那遍地的 i3 、i6 、i7 、详细的还有什么 3770k 、3220 这种型号,你为什么不认为他们是不同的架构呢?

arm 因为用途特殊,所以他的功能性能都是按需定制的,现在消费电子的普及,才让一些通用设计的芯片更加流行,但不同的产品,依然有不同的功能,成本,功耗的要求,这就导致的 arm 有各种不同的芯片。
一个最简单的例子,Intel 最顶配的 i7 3970X 报价 7000+ ,你会把它用在预算最多只有 2000 的 IPTV 机里面吗?你要最高画质的游戏画面,你会去买个 atom 的上网本么?