**ARM** (algselt **Acorn RISC Machines**, hiljem ka **Advanced RISC Machines**) on kärbitud käsustikuga arvutiarhitektuur, mida arendab ARM Holdings. Tänu ARM-protsessorite lihtsusele on need sobivad madala voolutarbega rakenduste jaoks nagu mobiiltelefonid ja muud väikesed seadmed.

Umbes 95% mobiiltelefonidest kasutab ARM-i väljatöötatud protsessorit. ARM-i protsessoreid kasutatakse manussüsteemides: pihuarvutites, mobiiltelefonides, muusikamängijates, mängukonsoolides, kalkulaatorites ja arvuti- ja võrgutarvikutes.

ARM-i arhitektuur on litsentseeritav. Mõned tuntumad ARM-i kliendid on Apple Inc. Broadcom, Cirrus Logic, Digital Equipment Corporation, Freescale, Intel, LG, Marvell Technology Group, Microsoft, NEC, Nuvoton, Nvidia, Qualcomm, Samsung, Sharp, Texas Instruments ja Yamaha.

ARM ise protsessoreid ei arenda, aga seda teevad ARM Holdings alltöövõtjad ja teised volitatud tootjad. ARM Holdingsi enda tehtud on ARM7, ARM9, ARM11 ja Cortexi tootepered. Mõned tuntumad teiste tootjate tehtud protsessorid on DEC StrongARM, Freescale i.MX, Marvell (algselt Intel) XScale (põhineb ARM v5 -l), Nintendo, Nvidia Tegra, ST-Ericsson Nomadik, Qualcomm Snapdragon, Texas Instruments-i OMAP seeria ja Apple A4.

Ajalugu
-------

ARM ajalugu algas 1979. aastal, mil loodi Inglismaal Cambridge'is firma Acorn Computers. Acorn tootis algul koduarvuteid. Tugeva konkurentsi tõttu hakkas Acorni meeskond keeruliste käsustikega protsessorite asemele midagi uut mõtlema ja selleks loodi uurimisprojekt. Selle projekti tulemusel sündiski esimene ARM (*Acorn RISC Machine*) protsessor. 1985. aastal lasid nad välja esimese 26-bitise protsessori. Sellel oli 25 000 transistori, mis oli isegi tolle aja kohta väga vähe, kuid siiski oli jõudluselt samaväärne Intel 80286 protsessoriga (134 000 transistori).

1987 lasti välja ARM versioon 2, millel oli kaasprotsessori tugi. Hiljem arendati selle põhjal ARM versioon 3, millele lisati sisemine vahemälu.

1990 lõid Apple, VLSI Technology ja Acorn ühisettevõtte ARM, mis tähendas nüüd *Advanced RISC Machines*.

1996 lasti välja ARM protsessorite neljas põlvkond. Suurim uuendus selles versioonis oli *Thumb* 16-bitise pakitud käsustiku lisamine. *Thumb* -i kood võtab 40% vähem ruumi võrreldes 32-bitise koodiga. Levinuim neljanda põlvakonna protsessor on ARM7TDMI, mida kasutab näiteks Apple iPod.

1999 lasti välja ARM protsessorite viies põlvkond, mis lisas ARM protsessoritele digitaalse signaalitöötluse ja Java baitkoodi laiendused. Tuntuim viienda põlvkonna implementatsioon on XScale protsessor.

2001 väljastati ARMv6, mis lisas SIMD käsustiku, TrustZone virtualiseerimistehnoloogia ja mitme protsessori toe. Parandati ka *Thumb* tehnoloogiat.

2006 ilmus ARM seitsmes põlvkond. See sisaldab parandatud SIMD käsustikku ja parandatud ujukoma tuge.

ARM-protsessorid
----------------

| Perekond | Arhitektuur | Omadused | Vahemälu | Jõudlus |
| --- | --- | --- | --- | --- |
| ARM1 | ARMv1 | Esimene versioon | puudub | 4 MIPS @ 8 MHz |
| ARM2 | ARMv2, ARMv2a | Korrutamisinstruktsioon | puudub | 7 MIPS @ 12 MHz |
| ARM3 | ARMv2a | Integreeritud vahemälu | 4 kB, ühtne | 12 MIPS @ 25 MHz |
| ARM6 | ARMv3 | ARM60: 32-bitise aadressiruumi tugi, ARM60: puudub kaasprotsessori siin | 4 kB ühtne | 10–28 MIPS @ 12 MHz |
| ARM7 | ARMv3 | ARM710: puudub kaasprotsessori siin | 8 kB ühtne | Pole teada |
| ARM7TDMI | ARMv4T | 3-astmeline *pipeline*, Thumb-käsustik | 8 kB ühtne | 15–63 MIPS @ 16,8 MHz |
| ARM7EJ | ARMv5TEJ | 5-astmeline *pipeline*, Thumb, Jazelle DBX, täiendatud DSP käsud | puudub | Pole teada |
| ARM8 | ARMv4 | 5-astmeline *pipeline*, staatiline hargnemise ennustamine, topelt mälu ülekandekiirus | 8 kB | 84 MIPS @ 72 MHz |
| StrongARM | ARMv4 | 5-astmeline *pipeline* | 8–16 kB | – |
| ARM9TDMI | ARMv4T | 5-astmeline *pipeline*, Thumb | 4–16 kB | 200 MIPS @ 180 MHz |
| ARM9E | ARMv5TE, ARMv5TEJ | Thumb, Jazelle DBX, täiendatud DSP käsud, | 16–32 kB, muutuv | 220 MIPS @ 200 MHz |
| ARM10E | ARMv5TE, ARMv5TEJ | Thumb, Jazelle DBX, täiendatud DSP käsud, VFP (*Vector Floating Point*) | 4–16 kB | 200 MIPS @ 180 MHz |
| XScale | ARMv5TE | 7-astmeline *pipeline*, Thumb, täiendatud DSP käsud, Wireless MMX | 32 kB | kuni 1,25 GHz |
| ARM11 | ARMv6 | 7-astmeline *pipeline*, SIMD, Thumb, Jazelle DBX, Thumb-2, VFP, täiendatud DSP käsud | muutuv | 740 @ 532–665 MHz (i.MX31 SoC), 400–528 MHz |
| Cortex-A | ARMv7-A | **Cortex-A5**: VFP, NEON, Jazelle RCT, Thumb/Thumb-2, 1–4 tuuma | muutuv (L1+L2) | 1,57 DMIPS / MHz tuuma kohta |
| **Cortex-A8**: VFP, NEON, Jazelle RCT, Thumb-2, 13-astmeline superskalaarne *pipeline* | muutuv (L1+L2) | 2,0 DMIPS/MHz |
| **Cortex-A9 MPCore**: rakenduslik profiil, VFPv3 FPU, NEON, Thumb-2, Jazelle RCT/DBX, 1–4 tuuma (sümmeetriline multitöötlus) | 32 kB / 32 kB L1, kuni 4 MB L2 | 2,5 DMIPS/MHz tuuma kohta, 10 000 DMIPS @ 2 GHz (jõudlusele optimeeritud TSMC 40G (kahetuumaline) |
| **Cortex-A15 MPCore**: rakenduslik profiil, VFPv4 FPU, NEON, Thumb-2, Jazelle RCT/DBX, Large Physical Address Extensions (LPAE), riistvara virtualiseerimine, 1–4 tuuma (sümmeetriline multitöötlus) | 32 kB / 32 kB L1, kuni 4 MB L2 |  |
| Cortex-R | ARMv7-R | Reaalaja profiil, Thumb-2, FPU | muutuv | 740 @ 532–665 MHz (i.MX31 SoC), 400–528 MHz |
| Cortex-M | ARMv6-M | **Cortex-M0**: mikrokontrolleri profiil, Thumb-2 alamhulk (16-bitine Thumb käsustik & BL, MRS, MSR, ISB, DSB ja DMB). Riistvaraline korrutamise käsk | puudub | 0,9 DMIPS/MHz |
| **Cortex-M1**: FPGA targeted, mikrokontrolleri profiil, Thumb-2 alamhulk (16-bitine Thumb käsustik & BL, MRS, MSR, ISB, DSB ja DMB) | puudub | Kuni 136 DMIPS @ 170 MHz |
| ARMv7-M | **Cortex-M3**: mikrokontrolleri profiil, ainult Thumb-2. Riistvaraline jagamise käsk | valikuline | 125 DMIPS @ 100 MHz |
| ARMv7-ME | **Cortex-M4**: mikrokontrolleri profiil, Thumb ja Thumb-2, FPU. Hardware MAC, SIMD ja jagamine | valikuline | 1,25 DMIPS/MHz |
| Perekond | Arhitektuur | Omadused | Vahemälu | Jõudlus |

ARM ärimudel
------------

ARM ei tooda ise füüsilisi protsessoreid, vaid ainult loob ja hooldab arhitektuure ning volitatud tootjad teevad nende arhitektuuride põhjal konkreetseid protsessoreid. Protsessorite põhjal luuakse konkreetsed seadmed.

Omadused
--------

### Arhitektuur

ARM arhitektuur määrab ära kuidas ARM protsessor peab käituma. Arhitektuur sisaldab:

* käsustik
* programmeerija mudel
* konfiguratsioon
* vigade haldus
* mälumudel

Iga arhitektuuri versioon määrab süsteemi omadused:

* vahemälu tasemete arv ja maht
* abijuhtregistri funktsionaalsus
* abiinstruktsioonide mõju

Arhitektuur võib määrata ära ka erinevad laiendused. Arhitektuuri muudatused eri versioonides on tavaliselt tagasiühilduvad eelmisete versioonidega.

### Protsessor

Protsessor on konkreetne implementatsioon mingist arhitektuurist. Näiteks ARM1156T2(F)-S on ARMv6 arhitektuuri implementatsioon, millele on lisatud Thumb-2(T2), Ujukoma üksus (FPU)(F) ja SIMD(S), vastavalt tähistele protsessori nimes.
Samast arhitektuurist võib olla palju implementatsioone.

### Seade

Seadmetes on tavaliselt ARM-protsessor ja selle lisad ühendatud ühte süsteemikiipi. Seadme arenduse ajal lisatakse erinevad kiibid vastavalt vajadusele. Seetõttu võivad erinevad seadmed põhineda samal protsessoril, kuid millel on näiteks erinev vahemälu suurus.

Näiteks võivad seadmel olla järgmised komponendid:

* 2. taseme vahemälu kontroller
* staatilise mälu kontroller
* dünaamilise mälu kontroller
* vastastikune siin
* katkestuste kontroller
* taktsignaal
* väliste siinide liidesed

#### Profiilid

Alates ARM 7. põlvkonnast on sellel profiilid erinevate rakendusvaldkondade jaoks.

| Profiil | Nimi | Kirjeldus |
| --- | --- | --- |
| A | Rakenduslik profiil | Virtuaalse mälusüsteemi põhine mikroprotsessor. Mõeldud suure jõudlusega seadmetele, mis peavad jooksutama täisfunktsionaalseid operatsioonisüsteeme. |
| R | Reaalaja profiil | Kaitstud mälusüsteemi põhine mikroprotsessor. Mõeldud ettemääratud ajastusega ja lühikest katkestusaega vajavatele süsteemidele. |
| M | Mikrokontrolleri profiil | Võimaldab lühikese katkestusajaga pöördumist otse kõrgetaseme programmeerimiskeeltest. Toetab osaliselt kaitstud mälu süsteemi ja Thumb-käsustikku. |

Käsustik
--------

**Lihtsus**

* Vähendatud käsustik ehk RISC.
* Fikseeritud 32-bitine käsk muutuja asemel
* Lihtsam toota

**Töö**

* Riistvaraline käsu dekodeerimise loogika
* Paralleelne käskude täitmine
* Võimalik ühetsükliline käsutäitmine

**Eelised**

* Kiibi väiksem füüsiline suurus
* Lühem arendusaeg
* Kohati suurem võimsus kui keeruka käsustikuga kiipidel

### Tingimuslik täitmine

ARM protsessorites ei kasutata tingimuslikku täitmist ainult hargnemiste(tingimuslausete) korral, vaid kõikide käskude korral. Selleks lisatakse igale käsule 4-bitine tingimuskood. Käsk kas täidetakse või ei täideta vastavalt sellele, milline on N, Z, C ja V tähiste väärtus programmi oleku registris (*Current Program Status Register*(CPSR)).

Näide. Eukleidese algoritmi põhjal
C-keeles näeb kood välja selline:

```
 while(i!=j) {
 if (i > j)
 i -= j;
 else
 j -= i;
 }

```

ARM assembleris näeb sama kood välja selline:

```
 loop CMP Ri, Rj ; määra tingimus "NE" if (i != j),
 ; "GT" if (i > j),
 ; or "LT" if (i < j)
 SUBGT Ri, Ri, Rj ; if "GT" (suurem kui), i = i-j;
 SUBLT Rj, Rj, Ri ; if "LT" (vähem kui), j = j-i;
 BNE loop ; if "NE" (pole võrdne), then loop

```

`SUB` käske täidetakse ainult siis, kui `Ri` ja `Rj` on võrdsed. Hargemist ei toimu kui `Ri` ja `Rj` pole võrdsed.

### Laiendused

#### Jazelle

Jazelle võimaldab täita Java baitkoodi otse ARM-protsessoril.

#### Thumb

*Thumb* on käsustiku olek. Selles olekus käsustik sisaldab muutuva pikkusega käske – 16–32 bitti. Lühem käsukood annab parema jõudluse.
*Thumb* olekus 16-bitistel käsukoodidel on väiksem funktsionaalsus. Tinglik täitmine on lubatud vaid hargnemiste korral.

#### Thumb-2

Thumb-2 laiendab nii ARM kui Thumb käsustikku, lisades bitivälja manipuleerimise, tabeli hargnevused ja tingliku täitmise.

#### NEON

On kombineeritud 64- ja 128-bitise SIMD käsustik, mis annab kiirenduse meedia ja signaalitöötlusele.

#### TrustZone

ARM TrustZone® tehnoloogia on süsteemikeskne lähenemine rakenduste turvamiseks nagu rahaülekanded, DRM ja veebiteenused. TrustZone tehnoloogia on tugevalt integreeritud A-profiili protsessoritesse.

### Täitmise keelamine

Alates ARMv6 on ka ARM protsessoritel nn NX-bit, mis märgib teatud mälupiirkonnad mittetäidetavaks.

Toetavad operatsioonisüsteemid
------------------------------

ARM-arhitektuuri toetavad paljud operatsioonisüsteemid. Esimesed ARM-põhised arvutid kasutasid operatsioonisüsteemi Arthur, millest arenes välja RISC OS.

### Manusopsüsteemid

Windows CE, Symbian OS, eCos, INTEGRITY, Nucleus PLUS, MicroC/OS-II, QNX, RTXC Quadros, ThreadX, VxWorks.

### UNIXi-laadsed

Android, Apple iOS, WebOS (Palm), GNU/Linux, BSD, Plan 9 (Bell Labs), Inferno, Solaris.

### Personaalarvuti opsüsteemid

* Linuxi distributsioonid: Ubuntu, Chrome OS, Debian, Fedora jt,
* BSD variandid: FreeBSD, NetBSD, OpenBSD, RISC iX,

samuti OpenSolaris.

Vaata ka
--------

* x86

Viited
------

1. ↑  A Brief History of ARM: Part 1
2. ↑  Mobiledia: ARM to Take on Intel, Dominate Mobile Chip Market, 20. september 2010
3. ↑  XScale
4. ↑  Intel 80286
5. ↑  Markus Levy, 2005, The History of The ARM Architecture
6. ↑  Leonid Ryzhyk, 5. juuni 2006, The ARM Architecture
7. ↑  Cortex A8 Juhend
8. ↑  Cortex A5
9. ↑  Cortex A8
10. ↑  Cortex A9
11. ↑  Cortex A15
12. ↑  Architectures, Processors, and Devices
13. ↑  An Introduction to the ARM System Architecture
14. ↑  Stephen Bo Furber, 2000, ARM system-on-chip architecture

Välislingid
-----------

* 30 October 2012, Ian Smythe, Mali-T600 Series Completing the ARM 64-bit System Story

| * v
* r
Mikrokontrollerid |
| --- |
| Arhitektuurid | 
8051 • ARM • AVR • PIC • C166 • TriCore |
| Perekonnad | 

|  |  |
| --- | --- |
| 4-bitised | 
TLCS-47 |
| 8-bitised | 
AVR • PIC • COP8 • MCS-48 • MCS-51 • Z8 • eZ80 • HC08 • HC11 • H8 • PSoC • TLCS-870 • XC800 |
| 16-bitised | 
C166 • CR16/CR16C • H8 • MSP430 • PIC • R8C • TLCS-900 • XC 2000 • XE166 |
| 32-bitised | 
Am29000 • CRX • FR • FR-V • H8SX • MPC5xx • PIC32 • TLCS-900 • TriCore • Infineon XMC4000 • Infineon AURIX • V850 • ARM |

 |
| Tarkvara | 
gpsim • Atmel Studio • dfu-programmer • FLIP |
| Vaata ka | 
Arduino • Manussüsteem • FPGA • Programmeeritav loogikakontroller |

| * v
* r
Protsessorite tehnoloogia |
| --- |
| Arhitektuur | 
Turingi masin • Universaalne Turingi masin • Harvard • Von Neumann • Kvantarvuti |
| Sõna suurus | 
1 • 2 • 4 • 8 • 12 • 16 • 24 • 31 • 32 • 36 • 48 • 60 • 64 • 128 • 256 • 512 |
| Lõimed | 
Multitegumtöö • Hüper-hargtöötlus |
| Tüübid | 
Mikroprotsessor • Mikrokontroller • Signaaliprotsessor • Süsteemikiip |
| Komponendid | 
Aritmeetika-loogikaplokk • Multipleksor • Demultipleksor • Register  • Taktsagedus • Tuum • Vahemälu |
| Perekonnad | 
x86 • z/Architecture • ARM • MIPS • PowerPC • SPARC • Itanium (IA-64) • Alpha • Prism • SuperH • VAX • Unicore • PA-RISC • MicroBlaze • RISC-V |