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.
1. Arm developer suite v1.0.1: ARM
architecture reference manual, 1999.
2. Internet, http://www.arm.com.