前言

最近有幾個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為指標。

圖解如下,網路上抓來的:

arm-family

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個

 

參見下圖:

arm registers

 

也可以這樣理解

arm-registers

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

WIki

kezeodsnx 發表在 痞客邦 PIXNET 留言(0) 人氣()