从一只ARM到另一只ARM!
ARM处理器和架构
当前可用的处理器
ARM1
ARM2
ARM3
ARM4和5
ARM6
ARM7
ARM8
强壮有力的ARM
ARM9
ARM10
ARM架构
v1 -ARM1。
v2 -ARM2。
v2as -ARM3和ARM250。
v3 -ARM6,ARM7,ARM8和护身符1。
v3M- 各种ARM6、7和8变体。
v4 -StrongARM,ARM9。
v5 -ARM10。
VFP1 -ARM10(的某些变体)。
Thumb(T型)。
长乘法指令(M个变体)。
增强的DSP指令(E变体)。
当前可用的处理器
ARM1 这是第一个ARM处理器,功能上与ARM2非常接近。该处理器已用于BBC和PC机器的一些评估系统中,但主要是原型芯片,已被ARM2取代。ARM2和ARM1之间的确切,主要差异是:
FIQ模式下没有倾斜的R8和R9。
没有乘法指令。
LDR / STR指令具有寄存器指定的移位量。
没有协处理器接口或协处理器指令。
ARM2 ARM2芯片具有27个寄存器,其中任一寄存器均可随时访问。四种处理器模式可用-
USR:用户模式
IRQ:中断模式(带有R13和R14的私有副本。)
FIQ:快速中断模式(R8到R14的私有副本。)
SVC:超级用户模式。(R13和R14的私人副本。)
如果只能从特权代码访问硬件和物理内存,则只有非USR模式代码才能更改处理器模式以提供硬件安全性。由于程序计数器的前六位用于保存处理器状态标志,因此该芯片仅限于寻址26位内存或64 MB地址空间。实际上,PC寄存器中保留了八位处理器状态。由于ARM指令的长度始终为4个字节,因此在将该寄存器用作PC时,PC的低两位始终是隐含的零。当该寄存器用于其操作时,最低位反映处理器运行的模式。(00-USR,01-IRQ,10-FIQ和11-SVC)
三级指令流水线使芯片能够以较低的晶体管数量快速执行指令。流水线的一个副作用是能够在每条指令上获得“自由”旋转/移位,因为流水线的一个阶段专门处理给定寄存器的桶形移位。结合每条指令的条件执行,可以实现长时间的无分支代码运行,从而使流水线停滞不前,从而在时钟速率下实现了相当高的指令执行速度。(平均每个时钟周期约0.6条指令)
ARM2芯片的时钟频率为8 MHz,平均性能为4-4.7 MIPS。
ARM3 这是一个ARM2核心宏单元,其中添加了缓存和专用协处理器接口。寄存器未更改,没有添加新的处理器模式。在生产的ARM3芯片中,新功能是增加了一个片上缓存(4 KB,64路关联,随机替换,4个字线,直写,混合数据和指令。)和更快的时钟速度。对芯片上协处理器接口的调整也是新的,包括将协处理器15定义为缓存控制和芯片标识。
最后,添加了一条新指令,即SWP指令。单调寄存器到内存交换命令对多处理器阵列很有用。
产生了几种速度的ARM3芯片。最初使用A540机器发布了26 MHz版本,然后在A5000中使用了25 MHz版本,在A4中使用了24 MHz版本。最终生产了33MHz版本,并用于A5000的alpha变体。
该芯片的第二个体现是ARM250,是ARM3单元的12MHz变体,并且将IOC1,VIDC1a和MEMC1芯片都集成到一个芯片中,但是与普通ARM3不同,没有处理器缓存。ARM250提供了大约7 MIPS的性能。
使用12MHz主存储器的24 MHz ARM3将产生13.26 MIPS的平均执行速度。在33 MHz时,可提供17.96 MIPS。
ARM4&ARM5这些从未制造过。在从Acorn到Armltd设计处理器的转变中,芯片的编号方案发生了变化。因此,数字4和5被跳过。
ARM6 此处理器单元是第一个具有完整32位寻址能力的市售ARM。此外,处理器现在具有31个寄存器以及六个新的处理器模式:
User32-32位USR模式。
Supervisor32-32位SVC模式。(专用SPSR寄存器)
IRQ32-32位IRQ模式。(专用SPSR寄存器)
FIQ32-32位FIQ模式。(专用SPSR寄存器)
Abort32-内存提取中止更多。(私有SPSR寄存器)
Undefined32未定义的指令模式。(专用SPSR寄存器)
SPSR寄存器是一个已保存的处理器状态寄存器,当进入新模式时,将保存CPSR(当前处理器状态寄存器)的副本。尽管CPSR / SPSR实际上是32位更改的必然结果,但增加了Abort32模式并进行了此更改,这使ARM6单元可以轻松处理虚拟内存,而无需在早期的单元ARM芯片上必须经历的扭曲。
添加了两个用于读取和写入CPSR和SPSR寄存器的新指令。现在,程序计数器全为32位,当以26位模式读取PC时,CPSR被硬件移位到适当位置。(为了向后兼容。)ARM6单元在26位模式下与早期ARM单元的代码完全二进制兼容。芯片是完全静态的,时钟可以减慢到任何速度,处理器将保持状态。最后,该单元可以在大端或小端操作中工作,并且可以在两种模式之间进行硬件切换。ARM6单元(不是芯片)中的寄存器总数为36,000个晶体管。
已经生产了几种版本的ARM6单元。ARM61是ARM2 / 3兼容模式下的ARM6单元的硬连线版本。该芯片无法进入32位地址/处理器模式。ARM600系列芯片是一个带有内置MMU的ARM6单元,类似于ARM3芯片的片上高速缓存,一个具有两个独立地址的8个深度写回缓冲器以及总共360,000个晶体管。缓存已进行了性能调整,现在由MMU控制,并已针对32位寻址进行了调整。已经产生了三种ARM610芯片速度。一种在20 MHz时提供17 MIPS,一种在30 MHz时提供26 MIPS性能,最后一种在33 MHz时提供27-28 MIPS。
还提供ARM60(作为芯片的ARM 6单元,没有其功能。),ARM650(带有一些RAM和外围控制器的ARM6。专为嵌入式控制系统设计。),ARM6l(低功耗ARM6单元)和ARM60l(低功耗版本的ARM 6单元作为芯片。)
ARM7 ARM7单元在功能上与ARM6单元在功能上相同,但时钟频率可能比ARM6快。ARM7单元的一种变体提供了改进的硬件乘法,适用于DSP工作。
ARM7单元中的大部分新功能是各种信号的时序内部变化。ARM700芯片具有比ARM600更大的片上缓存(8kb,并且从根本上进行了更改以提高能效),从而提高了缓存命中率。在MMU中的转换后备条目的数量也是其两倍,而在写缓冲区中的地址的数量则是其两倍。(现在大概可以在缓冲区停止之前写入四个地址。)在40MHz频率下,ARM710可以提供约36 MIPS的性能,比ARM610的性能提高了约40%。
ARM7系列设备包括ARM7(芯片单元核心),ARM7D(具有调试支持的芯片核心),ARM7DM(具有增强乘法功能的ARM7D),ARM7DMI(具有ICEbreaker(tm)的ARM7DM。ICEbreaker在芯片上支持以下功能:在线仿真),ARM70DM(作为芯片的ARM7DMI),ARM700(ARM7 + MMU +缓存+写回缓冲区。)和ARM7500(ARM7 + MMU +缓存+写回缓冲区+ IOMD + VIDC20)。Thumb内核也几乎可以提供所有这些内核。
ARM8的ARM8细胞与ARM6和7台设备直接兼容。但是,包括五个阶段的流水线(在StrongARM设备中重复了一个想法),一个推测性指令提取程序以及对处理器的内部调整,以允许更高的时钟速度。高速缓存保持相同大小,但也变为写回高速缓存,并添加了64位乘法指令。
该芯片采用0.5微米工艺制造,被列为在80 MHz时具有3.3伏器件,可提供80 MIPS性能。这是ARM7芯片性能的两倍以上,并且符合关于ARM系列的最初“路线图”承诺。但是,StrongARM设备的原始处理能力使其性能黯然失色。
StrongARM这是Arm芯片公司与Digital联合开发的ARM芯片系列的高速变体。在架构上,类似于ARM8内核,与该处理器共享5级流水线。另一个区别是从统一的数据和指令高速缓存变为分离的哈佛架构,指令和数据高速缓存。SA110中的每个缓存为16kb。
在指令集方面,增加了一条新指令,即用于移动16位数据单元的半字加载/存储。由于以下两个原因,不能保证与较早处理器的完全代码兼容性:扩展管道意味着存储程序计数器的堆栈调用将在当前执行指令之前将PC的值完整保留16个字节,而不是更普通的8个字节。其次,分离式高速缓存引入了以下问题:首先执行自修改代码,然后将其视为数据,进行操作,然后尝试在从指令高速缓存中清除更改后的代码之前执行更改后的代码。
这样的代码片段将中断。幸运的是,这样的代码往往非常少见,并且仅限于OS(特别是SWI处理程序)。SA110零件采用0.35微米工艺生产,在100 MHz时达到115 MIPS,在160 MHz时达到185 MIPS,在200 MHz时达到230 MIPS。SA1100部分是为便携式应用程序设计的,包含一个SA内核,MMU,读/写缓冲区(可能类似于SA110部分的1级缓存和写缓冲区),PCMCIA支持,彩色/灰度LCD控制器和通用IO控制器(包括两个串行端口和USB支持)。时钟频率为133或200 MHz,功耗不到500 mW。
ARM9与ARM8相比,该芯片具有增量改进功能,具有相同的五级流水线,但现在已成为哈佛架构芯片,如StrongARM。这可能意味着对自修改代码的限制与对StrongARM的限制相同。
最初将作为两个部分提供:ARM9TDMI(Thumb,调试支持,64位Mulitply和ICEBreaker In Circuit Emulation)(这是基本的核心部分)和ARM940T。ARM940T除了基本内核外,还提供4kb指令/数据高速缓存,写缓冲区(8个字,4个独立地址),AMBA总线接口,外部协处理器支持以及嵌入式应用程序的保护单元(无需地址转换)并允许八个独立大小和保护级别的受保护存储区)。这两款器件均以0.35微米,150 MHz的时钟频率(产生165 MIPS)制造,ARM9TDMI功耗为225 mW,ARM950T 675mW。
ARM10设计采用0.25和0.18工艺制造,旨在在300 MHz下工作,从而提供400 MIPS性能,同时消耗不到600 mW的功率。矢量的浮点单元(VFP10)也是该内核的配套开发产品,以300 MHz的频率提供600 MFLOPS,并设计为供ARM10使用。核心的新功能包括分支预测,并行指令执行(但奇怪的是,不是完全的超标量,可能的诀窍是,如果指令彼此独立,则现在可以在同一流水线级执行多个执行)。在缓存未命中时继续执行指令。(也许这仅用于数据高速缓存未命中,因为新处理器似乎是像StrongARM处理器那样的哈佛架构)
最初计划的版本包括ARM10TDMI内核和围绕该内核构建的ARM1020T处理器,但增加了具有按需分页虚拟备忘录支持的MMU,32Kb哈佛样式1级缓存(很可能是16Kb指令和16Kb数据缓存,如StrongARM),写缓冲区和增强的AMBA总线接口。确切的功耗数据尚未公布,但预计ARM1020T在300 MHz时将消耗0.6至1瓦的功率。
ARM架构
ARM体系结构是围绕具有16个通用寄存器和各种处理器模式的程序员模型构建的。每种处理器模式都提供不同级别的内存访问,PC和模式的操作以及自己的专用寄存器。
版本1-ARM1
默认情况下,程序员会“查看” 16个用户模式寄存器,但是在其模式下,各种寄存器会被替换为该模式专用的寄存器。该表总结了各种模式和寄存器。
USR
IRQ FIQ
SVC
00
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R10_fiq
R11
R11_fiq
R12
R12_fiq
R13
R13_irq R13_fiq R13_svc
R14
R14_irq R14_fiq R14_svc
R15(又名PC)
在表中未命名的寄存器中,则可见USR模式寄存器。
为了将中断等待时间保持在最低水平,FIQ(快速中断请求)模式具有相当大的一组专用寄存器,允许尽可能多地在寄存器中执行中断代码。如果一次只允许一个FIQ索赔人,则必须遵循RISC OS的规定,可以对这些寄存器进行预加载进一步优化。
按照惯例,并且由指令集部分强制执行,R14是“链接”寄存器-通常保存任何子例程调用的返回地址。BL(分支和链接)指令自动将正确的返回地址存储在R14中。所有寄存器都是通用的,包括R15(是程序计数器),状态标志和模式寄存器全部合为一体。26位字对齐地址,两位处理器模式(位1和0(00-USR,01-IRQ,10-FIQ和11-SVC))和六位处理器状态(负,进位,溢出,零,中断)请求禁用和快速)。
指令包括加载/存储(寄存器,多个寄存器,字节),移动(和不移动),加法(加,加,加,减,加,逆减,加减),比较(比较和不比较) ),布尔逻辑(测试,测试等效项,与,异或,或位清零),程序流(分支,带链接的分支)和软件中断。
第2版-ARM2
该架构在FIQ模式下添加了存储区R8和R9,撤消了具有寄存器指定移位量的LDR / STR指令,并添加了两个新的“类”指令-分别是“乘”(乘和“累加”)和协处理器控制(数据操作,协处理器数据到ARM寄存器,ARM寄存器到协处理器,加载和存储)。
版本2as-ARM3和ARM250
该功能与v2架构相同,此变体添加了一条额外的指令SWP,并将协处理器分配为零,以进行CPU标识和缓存控制。
版本3-ARM6,ARM7和护身符1
对ARM体系结构的此更新消除了PC计数器的26位限制,从而允许对数据和代码进行完整的32位寻址。(以前只能在整个32位地址范围内寻址数据。)结果,不再有可能将与处理器混合的处理器标志存储在寄存器15中,并且添加了一组新的寄存器来保持处理器状态。对于每种处理器模式,添加了寄存器CPSR(当前处理器状态寄存器)和SPSR(堆栈处理器状态寄存器)。添加了两个新的处理器模式以及Abort32和Undefined32。为了向后兼容,可以将芯片设置为模拟较旧的26位操作模式。进一步的改进包括能够将芯片的字节顺序从小字节顺序更改为大字节顺序的功能。
所有这些都需要添加新的Move指令(用于寄存器的SPSR,用于寄存器的CPSR,用于SPSR的寄存器,用于CPSR的寄存器,用于SPSR的立即数和用于CPSR的立即数。)以与每种处理器模式的状态寄存器进行通信。
版本3M
版本3体系结构的此扩展提供了扩展的Multiply操作码 包括无符号长,无符号长累积,有符号长和有符号累积长乘法。
版本4-StrongARM,ARM8和ARM9
3M中首次引入的新说明 现在,该体系结构已成为版本4中主要体系结构的一部分。此外,添加了Halfword(16位)加载/存储指令。
该版本通过添加指令并稍微修改一些现有指令的定义来扩展体系结构4,以提高T变体中ARM / Thumb互通的效率 并允许将非T变体使用与T变体相同的代码生成技术。
版本5还添加了计数前导零指令,该指令允许更有效的整数除法和中断优先级例程。 为协处理器设计人员增加了软件断点指令和更多指令选项。 此外,版本5加强了如何通过多条指令设置标志的定义。
Thumb指令集(T变体)
Thumb指令集是ARM指令集的重新编码子集。 Thumb指令的大小是ARM指令的一半(16位,而32位),因此通常可以通过使用Thumb指令集而不是ARM指令集来实现更高的代码密度。折衷包括Thumb指令集失去条件指令的执行,并且只能寻址处理器的前八个寄存器。
Thumb指令集不包含某些异常处理所需的指令,因此ARM代码至少应用于顶级异常处理程序。 因此,Thumb指令集始终与适当版本的ARM体系结构结合使用。
长乘法指令(M个变体)
ARM指令集的M个变体包括四个额外的指令,执行32 x 32> 64乘法和32 x 32 +64> 64乘法累加。 这些指令意味着存在一个大大大于最小值的乘法器,有时在小芯片尺寸非常重要而乘法性能不是很重要的实现中被省略。
增强型DSP指令(E变体)
ARM指令集的E个变体包括许多额外的指令,这些指令可增强ARM处理器在典型数字信号处理(DSP)算法上的性能。
矢量浮点v1-ARM10
与ARM体系结构版本5同时开发的,这是对ARM体系结构的协处理器扩展,旨在在典型的图形和DSP算法上实现高浮点性能。提供了单精度和双精度浮点运算。