1.      Što je ARM

 

 

 

 

ARM je mikroprocesor čija arhitektura dozvoljava izradu vrlo malih implementacija,  ali s visokim preformansama.

Arhitekturalna jednostavnost ARM procesora vodi do jako malih implementacija, a one omogućavaju vrlo malu potrošnju energije.

ARM je RISC (Reduced Instruction Set Computer), te kao takav ima tipične karakteristike:

 

-         veliki i uniformni set registara

-         load/store arhitekturu, gdje operacije za obradu podataka rade sa sadržajem registara, a ne direktno sa sadržajem memorije

-         jednostavne načine adresiranja, gdje su sve load/store adrese determinirane samo sadržajem registara i poljem instrukcija

-         jedinstveno polje instrukcija s fiksnom duljinom, za pojednostavljenje dekodiranja instrukcija

 

U zamjenu, ARM arhitektura dozvljava:

-         kontrolu nad ALU jedinicom (Arithmetic Logic Unit) i posmačnim registrom u svakoj instrukciji nad podacima

-         auto-increment and auto-decrement način adresiranja za optimizaciju programske petlje

-         uvjetno izvršavanje svih instrukcija za maksimizirati radnu propusnost

 

Ovo unaprijeđivanje osnovne RISC arhitekture dopušta ARM procesorima da ostvare dobar omjer visokih preformansi, male veličine koda, male potrošnje energije i malog zauzeća prostora.

 

 

 

2.     Analiza arhitekture

 

 

Daljnju analizu procesora, tj. arhitekture, možemo podijeliti na dva glavna dijela:

 

-         CPU arhitektura:

o       Registri

o       Iznimke - Interrupti

o       Instrukcijski set

o       'Tumb' set instrukcija

o       Tipovi podataka

 

-         Memorijska arhitektura

o       Memorijski sustav

o       'Sistem Control' koprocesor

 

-         Vektorska arhitektura s pomičnim zarezom

 

 

2.1.      CPU arhitektura        

           

2.1.1.      Registri           

 

ARM ima 31 opće-namjenskih 32 bitnih registara. Odjednom su vidljivi 16 registara, dok se drugi koriste za ubrzanje obrade iznimki. Svaka ARM instrukcija za registre može adresirati bilo koji od tih 16 registara.

Tim registrima se koristi svaki neprivilegirani kod, to su korisnički (User mode) registri. Korisnički način rada razlikuje se od ostalih načina rada, što znači:

-         u tom načinu se ne može preći u neki drugi procesorski mod (način) bez generiranja iznimke

-         memorijski sustav i koprocesori mogu ograničiti pristup memoriji i koprocesorskim funkcijama u korisničkom načinu rada, za razliku od ostalih načina

Dva od tih 16 vidljivih registara imaju posebne uloge:

-         Link registar – 14 registar (R14) sadrži adresu sljedeće instrukcije poslije BL (Branch and Link) instrukcija koje se koriste za poziv pod-rutina (subrutina). Svo drugo vrijeme R14 može se koristiti kao registar opće namjene.

-         Programsko brojilo – Program counter (PC), 15 registar. Koristi se  u instrukcijama kao pokazivač na na instrukciju koja je dvije instrukcije nakon što je instrukcija izvršena. Sve ARM instrukcije su duge 4 bajta (jedna 32 – bitna riječ), no donja 2 bita PC-a su uvijek nula, tako da PC ima samo 30 bitova koji nisu konstantni.

 

Ostalih 14 registara nemaju posebnu hardversku namjenu. Njihova je funkcija definirana izričito prekio koda. Uobičajeno je  da se R13 koristi kao Stack Pointer (SP).

 

 

Program status registeri

-         CPRS (current program status register) je dostupan u svim načima rada procesora. Sadrži zastavice stanja, bitove za prekide, trenutni procesorski način rada, te druge informacije vezane uz status i kontrolu.

-         SPSR (savced program status register) registar služi samo u radu sa iznimkama, a služi za očuvanje vrijednosti CPSR registra kada se pojavi iznimka (Korisnički i sistemski način rada nema SPSR registar to nisu stanja za rad s iznimkama. Svo izvođenje instrukcija koje se pišu ili čitaju iz SPSR u tim načinima rada je nepredvidljivo.

 

Format CPSR i SPSR registara je prikazan na slijedećoj tablici (1):

 

31

30

29

28

27

7

6

5

4

3

2

1

0

N

Z

C

V

 

I

F

T

M4

M3

M2

M1

M0

 

 

 

 

2.1.2.      Iznimke

 

Iznimke se mogu generirati interno ili eksterno, kao što su prekid (interrupt) ili pokušaj izvršavanja nedefinirane instrukcije, a uzrokuju da procesor odmah obradi taj događaj. Stanje procesa neposredno prije obrade iznimke mora biti sačuvano, tako da se originalni proces može nastaviti kada rutina za obradu iznimke završi sa radom. Odjednom mogu nastupiti i više od jedne iznimke.

ARM podržava sedam tipova iznimki: reset, nedefinirana instrukcija, programski prekid (software interrupt), dohvat krive instrukcije (instruction fetch memory abort), krivi dohvat podatka (data access memory abort), prekid (IRQ), brzi prekid (FIQ).

Kada nastupi iznimka, izvršavanje se prebacuje na fiksnu memorijsku lokaciju, koja odgovara tipu iznimke. Te fiksne memorijske adrese zovu se vektori iznimki (exception vectors). Kada nastupi prekid R14 (link registar) i SPSR se koriste za očuvanje stanja, tok programa se nastavlja na odgovarajućem prekidnom vektoru. Nakon obrađene iznimke, SPSR se prebacuje u CPSR, a R14 u PC. Za obradu iznimki procesor se mora prebaciti u odgovarajuću mod rada. Svaka iznimka ima svoj prioritet, najveći (broj 6) ima reset, a najmanji (broj 1) nedefinirana instrukcija. Redosljed obrade je po prioritetu.

           

 

 

2.1.3.      Instrukcijski set

 

Instrukcijski set ARM sastoji se od slijedećih skupova:

 

-         Uvjetne instrukcije ( EQ, NE, LE ... )

-         Instrukcije za kontrolu toka ( B, BQQ, BEQ )

-         Instrukcije za obradu podataka (AND, EOR, SUB, ADD)

-         Instructions za množenje (MUL, MLA, SMLAL)

-         Dodatne aritmetičke instrukcije (CLZ)

-         Instrukcije za pristup statusnom registru (MRS, MSR)

-     load/store instrukcije (LDR, LDRB...)

-         load/store instrukcije za množenje (LDM, STM)

-         Instrukcije za semafor (SWP, SWPB)

-         Instrukcije za generiranje iznimke (BKPT, SWI)

-         Koprocesorske instrukcije (CDP, LDC, STC, MCR, MRC)

-         Prošireni skup naredbi – proširenja standardnog seta instrukcija

 

 

2.1.4.      'Thumb' set instrukcija

 

'Thumb'je ekstemzija na 32-bitnu ARM arhitekturu. Taj set instrukcija sadrži najčešće korištene 32 bitne ARM instrukcije koje su kompresirane u 16 bitne instrukcije. Prilikom izvršavanja te 16 bitne instrukcije se transparentno dekompresiraju u potpune 32 bitne ARM instrukcije u realnom vremenu bez gubitka preformansi. To omogućuje veću gustoću (density) koda, znači manje zauzeće memorije itd..

No, imaju dva nedostatka u odnosu na standardni set:

-         obično treba više koda za isti posao, tako da je ARM kod obično bolji za maksimiziranje preformansi vremenski kritičnog programskog odsječka

-         ne sadrže neke instrukcije potrebne za rukovanje iznimkama

Zbog predhodno navedenih razloga, 'Thumb' instrukcije se uvijek koriste povezano odgovarajućim setom ARM instrukcija.

'Thumb' ne nudi neki 'pod' programerski model ARM arhitekture, ono jedva da prezentira ograničeni pristup tome. Sve 'Thumb' instrukcije za obradu podataka koriste potpune 32 bitne vrijednosti i potpuno 32 bitno adresiranje.

Kada je procesor u 'Thumb' načinu rada 8 registara opće namjene je dostupno, R0- R7. Neke 'Thumb' instrukcije imaju pristup i u PC (R15), Link registar (R14) i pokazivač stoga (R13).  U više registre R8 – R15 imaju ograničeni pristup.

 

Slika 1. – primjer veličine koda.

 

Na slici 1 vidimo da Thumb kod ima najmanju veličinu, pogodnu za instalaciju na najmanje i najjeftinije chipsete.

Način rada, dekompresiranje Thumb instrukcija prikazan je na slijedećoj slici 2:

 

 

Slika 2. Thumb dekompresor se nalazi u instrukcijskom cjevovodu

 

 

 

2.1.5.      Tipovi podataka

 

ARM procesor podržava sljedeće tipove podataka:

-         Byte: 8 bita

-         Halfword: 16 bita

-         Word: 32 bita

Kada je bilo koji od ovih tipova podataka bez predznaka (unsigned), N bitna vrijednost predstavlja ne – negativan broj od 0 do +2N-1. Ako su s predznakom (signed) predstavljaju integer vrijednost između –2N-1 do 2N-1-1, koristeći dvojni komplement.

Load i store operacije mogu prebacivati byte, halfword i word automatski dodajući potrebne nule u ekstenziji ili ekstenziju za predznak.

ARM instrukcije su dugačke točno 1 word, a Thumb točno 1 halfword.

 

 

 

2.2.            Memorijska arhitektura

 

2.2.1.      Memorijski sustav

 

ARM arhitektura koristi adresni prostor od 232 bajtova (8 bita). Bajtovi adrese su brojevi bez predznaka od 0 do 232 –1.

Taj adresni prostor predstavlja, može se gledati kao 230 32-bitnih riječi. Adresa je dijeljiva s 4, tako da se riječ (word) sastoji od 4 bajta sa adresama A, A+1, A+2, A+3.

Također, taj se memorijiski prostor može gledati i kao 231 16-bitnih riječi. Te su adrese dijeljive s 2, tako da se sastoje od 2 bajta s adresa A, A+1.

Izračunavanje adresa se normalno izvodi koristeći cjelobrojne instrukcije. To znači da se normalno zaokružuju ako se premaši adresni prostor. Rezultata kalkulacije je reduciran s modulom 232 .

            ARM procesori koriste se u širokom spektru sustava. Zahtjevi za memorijom, tih aplikacija, mogu varirati od potrebe za jednostavnom, linearnom (flat) adresnom  mapom, do sustava koji koriste nešto ili sve od navedenog za optimizaciju memorijskih resursa:

-         više tipova memorije

-         cache

-         write buffers

-         virtualnu memoriju i druge tehnihe za remapiranje memorije

Korištenjem cache memorije dobija se na preformansama, može se ograničiti (zabraniti) pristup u nema memorijska područja i sl.

Standardan način za obavljanje I/O funkcija na ARM sustavima je korištenjem memorijski mapiranih I/O. Koristeći posebnu memorijsku adresu na I/O uređaje se piše ili čita sa njih. Čitajući sa adrese koja je mapirana I/O dobijamo ulaznu informaciju s uređaja, a spremajući podatke na tu lokaciju pišemo na uređaj (izlaz).

            Standardan način za kontrolu memoriju je korištenje koprocesora 15 (CP15), koji je poznat i kao koprocesor za kontrolu sustava.

 

 

 

2.2.2.      Koprocesor za kontrolu sustava

 

Sve standardne memorijske i sistemske naredbe koje se bave cache-iranjem, organizacijom memorijskih blokova i slično kontrolira Koprocesor za Kontrolu Sustava. Ako u sustav nisu instalirani nikakve dodatne memorijske mogućnosti CP15 nije potreban, no preporučen je jer omogućuje operacijskom sustavu da odredi na kojem tipu ARM procesora se izvršava.

CP15 može sadržavati do 16 primarnih registara, od kojih je svaki od 32 bita. Ti registri mogu biti samo za čitanje, samo za pisanje ili oboje. Jedine definirane instrukcije na koprocesoru za KS su :

§         MCR instrukcija za pisanje ARM registra na CP15 registar

§         MRC instrukcija za očitanje CP15 registra u ARM registar

Te instrukcije se mogu koristiti samo kada je procesor u Privilegiranom načinu rada inače bacaju iznimku: nedefinirana instrukcija.

Pregled nekih registara:             R0 – ID i cache tip

                                                R2 – memorijske pogreške

                                                R7-buffer za kontrolu cache-a

 

 

 

3.     Vektorska arhitektura s pomičnim zarezom

 

 

VFP (Vector floating point) arhitektura je koprocesorska ekstenzija na ARM arhitekturu. Omogućava rad s jednostruko i dvostruko preciznom brojevima s pomičnim zarezom. Rad sa vektorima od 8 jednostruko preciznih ili 4 dvostruko preciznih brojeva s pomičnim zarezom je vrlo učinkovit. Većina aritmetičkih instrukcija može se koristiti na tim vektorima dozvoljavajući single-instruction, multiple-data (SIMD) paralelnost. FP (floating point) load/store instrukcije imaju formu za pristup više registara, tako da se vektori prebacuju u i iz memorije učinkovitije, tj.u manjem vremenu.

VFP ima 32 registra opće namjene, od kojih svaki može držati jednostruko precizan broj s pomičnim zarezom ili 32 bitni integer, a u novijoj varijanti 16 dvostruko preciznih brojeva s pomičnim zarezom. Tu ju još i 3 sistemska registra:

-         FPSID – samo za čitanje, deklarira verziju VFP arhitekture

-         FPSCR – za status i kontrolu (iznimke...)

-         FPEXC – za status i kontrolu na sistemskoj razini

 

U nastavku je dan pregled instrukcija za rad sa VFP arhitekturom:

-         komunikacija s memorijom, neke instrukcije podržavaju rad s više registara

-         prijenos 32 bitnih vrijednosti između VFP i ARM registara opće namjene i obrnuto

-         dodavanje, oduzimanje, množenje, dijeljenje i korjenovanje (kvadratno) na posebnom registru ili vektoru

-         postavljanje apsolutne vrijednosti, negiranja i slično prilikom kopiranja među registrima jer se bit za predznak može postaviti posebno

-         konverzija brojeva, svih tipova

-         usporedba vrijednosti registara međusobno i sa nulom

 

 

 

4.     Zaključak

 

ARM je visokooptimizirani mikroprocesor koji dozvoljava da se sa malo koda dobije veliki učinak, pogotova kada uzmemo u obzir Thumb arhitekturu koja dozvoljava da instrukcije budu duge 16 bita i zauzmu duljinu od pola riječi u memoriji, ROM-u na primjer. Manje koda i optimizirana aplikacija s malim procesorom znači manje potrebne memorije, time i manje mjesta u nekom prijenosnom uređaju. Zato se ARM upotrebljava uređajima kao što su:

 

-         Prijenosna računala

-         Mobiteli

-         MP3 player-i                                                               

-         Ink-jet/bubble-jet printeri

-          Digitalne kamere

-          Sigurnost

 

U nekim je aplikacijama potrebna i veća snaga za rad  sa brojevima sa pomičnim zarezom, a ta učinkovitost je osigurana sa VFP arhitekturom.

 

 

 

 

 

5.     Literatura

 

1. Arm developer suite v1.0.1: ARM architecture reference manual, 1999.

2. Internet, http://www.arm.com.