前言
最近有幾個arm的案子,常常被一些arm 579,version通通有的搞的有點亂,因此整理一下arm的架構,至少不會對spec有一大堆疑問。
ARM,Advanced RISC Machines,是一家公司的名字,原本是叫做Acron,後來和蘋果合作了一個重要專案,而另組了一個叫安謀(ARM RISC Machine Ltd.),所以後來大家知道的arm反而不是Acron RISC Machine了。市面上所看到的ARM,有intel,nv,qualcomm,xscale,strongarm等,其實一開始搞不清楚怎麼會有這麼多種,不就是arm 579,愈高愈好,愈多愈快嗎?其實邏輯應該是: ARM這間公司提供所謂的architecture,也就是一些設計上的IP,使得根據其設計版本的演進,提昇效能。然後ARM再把這些設計,授權給其他公司,包括intel,nv,qualcomm,samsung,TI等,各自生產其arm processor。比如說,intel的strongarm,nv的tegra。
architecture version
常用在手機的是xscale和arm926,都是base on ArmV5TE。
Arm的優勢是體積小,功耗低,成本低,性能也不差。設計上以版本來區分:
v1: 只是sample prototype
v2: 就是v1的進版,多了一些instruction,知道就好
v3: 多了CPSR/SPSR這些重要的register
v4: 常見的架構,arm7,9,strongarm都是這個版本。有16 bit的thumb instruction set,SWI
v5: 又多了些instruction,比如說BLX,CLZ.。arm 10,xscale是這個版本
v6: SIMD多媒體加速,endian alignment
Family
以上是architecture version,接下來是所謂的family。family就是常見的arm1234567891011什麼的,每個family是基於某個architecture version來設計。比如說上述的arm79是v4,arm10是v5,手機常見的arm9e是v5TEJ,arm11是v6。
而目前比較新的family是cortex,是v7。cortex有A8,A9,M0,M1等不同的core,其效能也不同,用DMIPS為指標。
圖解如下,網路上抓來的:
Register
arm有37個registers,分為若干個banks:
37個
|--31個general
|--R0~R7: 不分組暫存器,在什麼mode下都存取一樣的register。共8個
|--R8~R14:分組暫存器,根據不同mode有不同的register。
|--R8~R12: 有兩組實體暫存器: FIQ / FIQ以外 共5x2=10個
|--R13: stack pointer,有6組,每個例外模式有自己的R13。6x1=6個
|--R14: Link register。6x1=6個
|--R15: Program counter。1個
|--6個程式狀態暫存器
|--CPSR:1個 1個
|--SPSR:5個 5個
參見下圖:
也可以這樣理解
cpu的七種mode:
User : unprivileged mode under which most tasks run
FIQ : entered when a high priority (fast) interrupt is raised
IRQ : entered when a low priority (normal) interrupt is raised
Supervisor : entered on reset and when a Software Interrupt instruction is executed
Abort : used to handle memory access violations
Undef : used to handle undefined instructions
System : privileged mode using the same registers as user mode
Reference
留言列表