Thumb

annuncio pubblicitario
I Processori ARM
Giovanni Barisione - Gabriele Santinelli
seminario di Implementazioni di Linguaggi - A.A. 2005/2006 @ DISI, Genova
1
ACORN Atom (1981) & BBC Micro (1982)
Primi home computer della Acorn, usciti nei primi anni ‘80.
Entrambi basati sul processore MOS Technology 6502 del 1975:
• 8bit
• economico: costava 1/6 rispetto ai concorrenti (Motorola, Intel)
• ottime prestazioni rispetto ai concorrenti
2
ARM1 (1985) (#1)
Nel 1983 il 6502 è piuttosto datato: i personal
computer concorrenti ormai sfoggiano CPU a 16bit.
Acorn testa tutte le CPU a 16 e 32bit presenti sul
mercato ma nessuna la soddisfa appieno. Decide
quindi di crearsi il proprio processore da zero,
basandosi sul set di istruzioni del ben noto 6502.
La ora decantata semplicità del nascente processore ARM1, era in
principio una neccessità. Si narra, infatti, che i progettisti incaricati
fossero alle prime armi nella progettazione di processori; fu questo che
impedì all’ARM1 di diventare troppo complesso, decretandone così la
sua fortuna.
Si decide di puntare su un processore con un set di istruzioni a
lunghezza fissa e un modello load/store.
3
ARM1 (1985) (#2)
Il team di sviluppo è composto da 6 persone.
Il primo set di istruzioni viene scritto in BASIC, cosa che permette di
sviluppare un prototipo in tempi molto brevi.
In BASIC è anche il simulatore event-driven che permette il supporto
dei chip, e dei vari controller della macchina.
L’ARM1 viene commercializzato come coprocessore aggiuntivo per il
BBC Micro.
Nell’attesa di un computer basato su ARM, Acorn produce una
versione “home” del BBC Micro ma si rivela un flop. In seguito alla crisi
economica, Acorn viene acquistata da Olivetti.
4
ARM2 (1987)
Ci vogliono altri due anni prima che
Archimedes, il primo computer basato
sul processore ARM (in realtà ARM2),
veda la luce.
Primo processore ARM immesso sul
mercato.
• 32bit data bus
• 26bit address space
• 16 registri a 32bit
• 30 000 transistors (contro i 68 000 del
Motorola 68000)
• no microcodice (RISC)
• no cache (cosa abbastanza comune
all’epoca)
5
Da Acorn a ARM Ltd (fine ‘80)
Alla fine degli anni ‘80 inizia una
collaborazione con Apple per la nuova
versione dell’ARM.
Il lavoro Diventa così importante che nel
1990 viene creata una nuova società:
ARM Ltd (qui ARM assume il significato
di Advanced RISC Machines, sostituendo
il precedente di Acorn RISC Machines) che contiene il team del design.
L’ARM Ltd non produce microprocessori ma progetta e vende
proprietà intellettuale.
Cambia così la numerazione: vengono saltati gli ARM4 e 5 e si passa
direttamente all’ARM6 e alle sue varianti.
6
ARM3 (1990)
Successore dell’ARM2, prima CPU della ARM Ltd.
• 4Kb di cache.
ARM 610 (1991)
Nel 1991 Apple usa una versione dell’ARM6
la 610 per le prime serie di PDA come l’Apple
Newton, conosciuti anche come
MessagePad.
Nel 1994 verrà poi utilizzato anche dalla
Acorn per le cpu dei suoi RiscPC.
Questa versione introduceva un
indirizzamento a 32 bit con 4K di cache e con
la possibilità di passare dalla modalità bigendian alla little-endian; fu prodotto a diverse
velocità: 20Mhz, 30Mhz e 33Mhz.
7
Evoluzione (#1)
8
Evoluzione (#2)
9
RISC vs CISC (#1)
RISC (Reduced Instruction Set Computer)
• il concetto nasce nel 1974 da John Cocke (IBM)
• solo il 20% delle istruzioni macchina sono molto usate
• la complessità si sposta dall’HW al SW (compilatore)
• meno istruzioni significa meno transistor
• richiede più linee di codice di un CISC (più memoria)
CISC (Complex Instruction Set Computer)
• definizione retroattiva introdotta per distinguerli dai RISC
• microcodice, risiede in una ROM e traduce ogni singola istruzione
• istruzioni più vicine a quelle dei linguaggi di alto livello
MIPS (Microprocessor without Interlocked Pipeline Stages)
• minimizza le chiamate alla memoria esterna arricchendo la CPU di
registri
10
RISC vs CISC (#2)
11
Post-RISC
Oggi la distinzione tra RISC e CISC è molto meno marcata. Le CPU
RISC sono diventate molto più complesse mentre i CISC sono
diventati più efficienti. Infatti:
• il PPC 601 (RISC) supporta più istruzioni di un Pentium (CISC)!
• la famiglia Pentium II è definita da Intel come CRISC
12
Il mercato dei processori RISC
Per motivi di retrocompatibilità, i
processori RISC non sono mai entrati
negli home-computer.
Sono invece stati introdotti fin da subito nel mondo dei
cellulari/palmari, perchè in forte espansione proprio in quel periodo.
Oggi la stessa Intel dichiara di produrre più CPU ARM che x86.
13
Acorn VS Apple (1994)
As a founder member,
Acorn is delighted
to welcome Apple
to the RISC Club.
After 11 years of development and 7 years of production, we at Acorn are still
marveling at the sheer power, performance and potential of 32-bit RISC
technology.
Our ARM 32-bit RISC processors have delivered these capabilities to our
many customers in education, the home and industry worldwide, in our products
since 1987.
So it comes at little surprise to hear that Apple's new desktop range also
incorporates 32-bit RISC technology.
Oh well. Better late than never.
Dal Times, 15 marzo 1994
14
ARMv4 - Memoria
ARM è un processore a 32 bit ma è anche in grado di manipolare
dati a 8bit (byte) e a 16bit (halfword).
• Le word a 32 bit sono allineate in memoria ad indirizzi multipli di 4.
• Le halfword sono allineate ad indirizzi multipli di 2 mentre i byte sono
singolarmente indirizzabili in memoria.
15
ARMv4 - Modi Operativi
Esistono sette modi di funzionamento supportati dal processore
Il modo può essere cambiato via software, in modalità privilegiata oppure
attraverso un’eccezione.
16
ARMv4 - Registri (#1)
Il processore ARM è dotato di 37 registri:
• 31 registri generici
•R13 corrisponde allo Stack Pointer (SP)
•R14 corrisponde al Link Register (LR)
•R15 corrisponde al Program Counter (PC)
• 6 registri di stato (di cui 5 di salvataggio)
I registri sono divisi in banchi parzialmente sovrapposti, uno per
ogni modo operativo esistente (System e User usano lo stesso
banco).
Quindi ci sono 15 registri d’uso generale (da R0 a R14), uno o due
registri di stato (quello corrente ed eventualmente quello di
salvataggio) ed il PC. Tutti i registri tranne quelli di stato possono
essere utilizzati da tutte le istruzioni di tipo generale.
17
ARMv4 - Registri (#2)
18
ARMv4 - Registri (#3)
La presenza di una coppia specifica di registri SP e LR per ogni
modo operativo facilita l’associazione ai singoli modi di uno stack
privato e rende più efficiente il ritorno da eccezione.
Nel modo FIQ esiste una copia fisica anche dei registri da R8 a
R12: permette di servire una chiamata ad una interruzione veloce
senza dover salvare quei registri, ottenendo una migliore efficienza
nella realizzazione della corrispondente routine di servizio.
19
ARMv4 - CPSR (#1)
Il Current Program Status Register è il registro di stato. Include i
bit di condizione (i 4 bit più significativi), le maschere per le
interruzioni e la codifica del modo operativo.
•bit da 0 a 4 (M): modo operativo
•bit 5 (T): set di istruzioni Thumb a 16bit, on-off
•bit 6 (F): interruzioni “fast” (FIQ), on-off
•bit 7 (I): interruzioni generiche (IRQ), on-off
•bit 28 (V): indica errore di overflow
•bit 29 (C): indica il riporto
•bit 30 (Z): indica un risultato zero
•bit 31 (N): indica un risultato negativo
20
ARMv4 - CPSR (#2)
• C, Z e N possono essere modificati in base al risultato di una
istruzione di elaborazione dei dati. I bit di condizione vengono modificati
solo se il bit S (Set Condition Code) è impostato a 1. Questo si ottiene
postponendo la lettera S al nome dell’istruzione. (Es. ADD→ADDS,
SUB→SUBS)
• V (Overflow) è modificabile solo dalle operazioni aritmetiche.
• C, le istruzioni additive (ADDS, CMN...) lo impostano a 1 se nella
somma risulta un riporto dal bit più significativo. Le istruzioni sottrattive
(CMP, SUBS...) lo impostano a 0 se nella differenza risulta un “prestito”
nel bit più significativo.
Il registro SPSR (Saved Program Status Register) ha il compito di
preservare il valore di CPRS durante la gestione di un’eccezione. C’è
un SPSR per ogni modo operativo tranne che per il modo User/System
durante il quale non è prevista la gestione di un’eccezione.
21
ARMv4 - Stack (#1)
Nei processori ARM gli stack vengono gestiti tramite le istruzioni
LDM (Load Multiple Register) e STM (Store Multiple Register).
Sono supportati quattro formati diversi di stack, ognuno dei quali
viene specificato attraverso una sigla di due caratteri preposta al
nome dell’istruzione LDM o STM.
Questi sono i tipi di stack:
•Full Stack: SP punta all’ultimo dato inserito
•Empty Stack: SP punta alla prima posizione di memoria libera
•Ascendente: SP viene incrementato per effetto dell’inserimento
•Discendente SP viene decrementato per effetto dell’inserimento
22
ARMv4 - Stack (#2)
23
ARMv4 - Eccezioni (#1)
Sono previsti 8 tipi d’eccezione, ad ognuno è associato un hard
vector. L’elaborazione di un’eccezione forza il PC ad assumere il
valore del corrispondente vettore.
Di norma a quell’indirizzo è collocata un’istruzione di salto alla
corrispondente routine di servizio, tranne per l’ultima eccezione,
dove può tranquillamente iniziare la routine.
24
ARMv4 - Eccezioni (#2)
25
ARMv4 - Gestione delle priorità dei dispositivi
Essendo le linee di ingresso IRG e FIQ uniche, i dispositivi di
ciascuna delle due classi di interruzioni devono essere identificati in
una fase iniziale delle rispettive routine di servizio.
Al fine di velocizzare tale fase di identificazione e gestire
correttamente le priorità dei dispositivi, il sistema può includere
hardware aggiuntivo (interrupt controller).
ARMv4 - Priorità delle eccezioni
Nel caso che più eccezioni siano
contemporaneamente pendenti, il
processore ARM utilizza la seguente
tabella delle priorità.
26
ARMv4 - Istruzioni Condizionali
Perchè ogni singola istruzione venga effettivamente eseguita devono
essere preliminarmente soddisfatte alcune condizioni, valutando i bit
di condizione. Il nome di ogni istruzione può essere esteso:
27
ARMv4 – Pipeline (#1)
A partire dall’ARM2 il processore è dotato di una pipeline a 3 stadi.
• Fetch: copia il codice dell’istruzione dalla memoria
• Decode: decodifica l’istruzione leggendone gli operandi
• Execute: l’ALU esegue l’istruzione ed effettua il write-back
Si ottiene quindi una latenza di tre cicli, mentre il throughput è di una
istruzione per ciclo.
28
ARMv4 – Pipeline (#2)
Il PC è sempre due istruzioni avanti rispetto all’istruzione in
esecuzione.
Nel caso di branch due cicli di istruzioni vanno persi (perchè la
pipeline deve nuovamente riempirsi), per questo è preferibile l’uso di
istruzioni condizionali.
con “branch”
con istruzione condizionale
CMP
BEQ
MOV
MOV
CMP R0,#0
MOVNE R1,#1
MOVNE R2,#2
R0,#0
<offset>
R1,#1
R2,#2
29
ARMv4 – Istruzioni (#1)
Possiamo dividere le istruzioni in categorie funzionali:
3) Istruzioni per l’elaborazione dei dati
Le regole base per questo tipo di istruzioni sono:
3 operandi: 2 sorgenti, 1 destinatario
tutti gli operandi sono a 32bit, sia i registri che le costanti
il risultato è a 32bit ed è posto in un registro
In questa classe troviamo le operazioni aritmetiche e logiche (ADC,
ADD, AND, BIC, EOR,MUL,ORR, RSB, RSC, SBC, SUB), quelle per
il movimento tra i registri (MOV, MVN) e quelle di confronto (CMN,
CMP, TEQ, TST)
30
ARMv4 – Istruzioni (#3)
2) Istruzioni per l’accesso alla memoria
In questa classe vi sono le istruzioni per il movimento dei dati da
memoria a registro (load) e viceversa (store). Vi sono poi alcune
varianti per il caricamento di dati da 8 e 16bit con e senza segno e
per il movimento multiplo che coinvolge più registri.
Le istruzioni sono: LDR, LDRB, STR, STRB, LDRH, LDRSB,
LDRSH, STRH, LDMxx, STMxx
31
ARMv4 - Istruzioni (#2)
Aritmetiche e logiche:
ADD
SUB
RSB
MUL
ORR
BIC
r0,
r0,
r0,
r0,
r0.
r0,
r1,
r1,
r1,
r1,
r1.
r1,
r2
r2
r2
r2
r2
r2
//
//
//
//
//
//
r0=r1+r2
r0=r1-r2
r0=r2-r1
r0=r1*r2
r0=r1 or r2
r0=r1 and not
ADC
SBC
RSC
AND
EOR
r2
r0,
r0,
r0,
r0,
r0,
r1,
r1,
r1,
r1,
r1,
r2
r2
r2
r2
r2
//
//
//
//
//
r0=r1+r2+C
r0=r1-r2+C-1
r0=r2-r1+C-1
r0=r1 and r2
r0=r1 xor r2
Movimento tra i registri
MOV r0, r2
// r0=r2
MVN r0, r2
// r0= not r2
Operazioni di confronto
CMP r1, r2
TST r1, r2
//set cc on r1-r2
CMN r1, r2 //set cc on r1+r2
//set cc on r1 and r2 TEQ r1, r2 //set cc on r1 xor r2
Con queste ultime vengono modificati solo i bit di condizione(cc) del
CPSR
32
ARMv4 – Istruzioni (#4)
3) Istruzioni di salto
Queste istruzioni hanno l’effetto di caricare un nuovo valore nel
registro PC(R15), valore che viene calcolato come somma del PC
corrente e dell’offset relativo specificato nella codifica dell’istruzione.
Di questa classe fanno parte 2 tipologie di istruzioni B(branch) e
BL(branch and link)
B <indirizzo>
BL <indirizzo>
//PC<-indirizzo
//LR<-PC-4 (salva PC in LR)
PC<-indirizzo
B Lab1 //salta al label “lab1”
BEQ Lab2
//se z=1 allora salta al label “lab2”, altrimenti prosegue
BLVC SUBR1
//se V=0 chiama la subroutine “SUBR1”
33
Tecnologie Proprietarie
A cominciare con ARMv4 sono stati
introdotti:
• Thumb
• Thumb-2
Mentre a partire da ARMv5 sono
state aggiunte le estensioni:
• Jazelle
• TrustZone
• IEM (Intelligent Energy Manager)
• SIMD
• NEON
34
Thumb Technology (#1)
Thumb è un estensione all’architettura
ARM a 32bit che permette una densità di
codice molto elevata.
Il set di istruzioni Thumb (ISA) contiene un
sottoinsieme delle istruzioni ARM a 32bit
più comunemente usate ma, a differenza di
queste, si tratta di istruzioni compresse a 16bit.
In esecuzione le istruzioni Thumb a 16bit vengono decodificate,
svolgendo così lo stesso lavoro dei loro equivalenti ARM a 32bit.
Vantaggi:
• L’aumento di densità del codice è stimato intorno al 30% e non comporta
peggioramento delle prestazioni.
• Usando una combinazione di codice ARM e Thumb, il programmatore è
in grado di bilanciare costi, performance e consumi.
35
Thumb Technology (#2)
Svantaggi:
• Il programmatore deve essere in grado di identificare le routines veloci
(che sfrutteranno le istruzioni ARM a 32bit) da quelle ottimizzabili mediante
le istruzioni Thumb.
• Molte istruzioni ARM non hanno equivalenti in Thumb (per esempio
quelle per l’accesso a funzioni speciali come SIMD/DSP, o le istruzioni
privilegiate). In questi casi il codice Thumb deve chiamare una funzione
contenente il codice ARM da eseguire, prima di poter tornare al codice
Thumb.
• 16bit non sono abbastanza per mantenere la capacità di eseguire in
modo condizionale ogni istruzione.
36
Thumb-2 Technology
Aggiunge diversi miglioramenti alla tecnologia Thumb:
• nuove istruzioni a 16bit per migliorare il flusso del programma
• nuove istruzioni a 32bit per sopperire alle istruzioni ARM ancora mancanti
• nuove istruzioni a 32bit che migliorano il set di istruzioni di ARM
Nella maggior parte delle applicazioni le istruzioni Thumb-2
diventano lo standard, specialmente nelle situazioni in cui il rapporto
costi, performance e consumi è poco chiaro.
• Non c’è più bisogno di mescolare istruzioni ARM e Thumb.
• Ritorno all’esecuzione condizionale delle istruzioni (IT).
37
StrongARM (1995)
Era una delle più veloci versioni
dell’architettura ARM. Creato dalla
Digital è stato disegnato soprattutto per
l’uso negli strumenti portabili nei quali
occorreva un basso consumo
energetico, era usato in palmari e anche
in decoder e box digitali per la
televisione.
Lo StrongArm portò i RiscPC da 40 a 200-300Mhz e fu il primo a
dividere tra instruction e data cache con entrambe le cache di 16Kb.
La pipeline viene portata da 3 a 5 stadi.
Nel 1995 l’SA-100 viene immediatamente incorporato nei nuovi modelli
dell’Apple Newton.
38
Da StrongARM a XScale (2000)
Successivamente la Digital Semiconductor, viene ceduta alla Intel
che usa lo StrongARM per sostituire i suoi i960 che avevano
dominato il mercato dei processori RISC fino ai tardi anni ‘90.
Con XScale nasce la generazione v5 di ARM che sostituisce gli
StrongARM ancora basati sulla v4. Tutti i processori di questo tipo
sono basati su un processore a 32 bit con Thumb e hanno 2 cache
da 32kb di tipo instruction e data e anche 2 mini-cache da 2kb.
E’ usato come processore in tantissimi tipi di palmari e anche sui pc
desktop RISC Iyonix della Acorn e su molti media-player portabili e
grazie alla collaborazione con Apple anche sui prossimi Ipod.
39
XScale (2000)
La pipeline si suddivide in 3 sotto pipeline: Main Execution, Memory e
MAC con in tutto 7/8 stadi, con di norma 1 ciclo per stadio.
40
XScale
I tre pipeline possono essere occupati
simultaneamente (comportamento di tipo
superscalare).
I tre pipeline funzionano in maniera asincrona.
Conclusione: le istruzioni possono completare
l’esecuzione fuori ordine se non ci sono
dipendenze tra i dati.
Per ottimizzare l’uso delle pipeline: la predizione dei salti.
PXA255 effettua una predizione dinamica basata sulla “storia
passata” di ciascun salto, la storia è memorizzata nel BTB (Branch
Target Buffer), la storia di un salto può assumere 4 possibili stati:
Strongly Not Taken, Weakly Not Taken, Weakly Taken e Strongly
Taken.
41
Prodotti ARM - Gaming
Nintendo DS
Sony PSP
ARM7 / ARM9
ARM9
Nintendo GB Advance
ARM7 / ARM9
42
Prodotti ARM - Personal Media Players
Apple Ipod
Creative ZEN Micro
Epson P-2000
ARM7
ARM7
ARM7
43
Prodotti ARM - Personal Digital Assistants
HP iPaq 4150/4350
Intel XScale
Acer N40
Panasonic CF-P1
ARM9 (S3C2410)
Xscale (PXA-263)
44
Prodotti ARM - Smart Phones
Nokia N70 3G
Motorola A780
ARM9
Xscale (PXA271)
Sony Ericsson P910
ARM7 / ARM9
45
Riferimenti
ARM Ltd - http://www.arm.com/
Wikipedia - http://en.wikipedia.org/wiki/ARM_architecture
The history of the ARM CPU - http://www.ot1.com/arm/armchap1.html
ARM Assembler - http://www.heyrick.co.uk/assembler/
Introduzione al processore ARM - http://www.dei.unipd.it/didattica/ae1/web/materiale.htm#u03
ARM, The first encounter - http://galeb.etf.bg.ac.yu/~vm/tutorial/ARM.ppt
Ars Technica: RISC vs CISC - http://arstechnica.com/cpu/4q99/risc-cisc/rvc-1.html
A Brief History of RISC - http://www.aallison.com/history.htm
46
I Processori ARM
Giovanni Barisione - Gabriele Santinelli
1
seminario di Implementazioni di Linguaggi - A.A. 2005/2006 @ DISI, Genova
•picole dimensioni
•bassi costi
•bassi consumi
•no dissipatori/ventole
1
ACORN Atom (1981) & BBC Micro (1982)
Primi home computer della Acorn, usciti nei primi anni ‘80.
Entrambi basati sul processore MOS Technology 6502 del 1975:
• 8bit
• economico: costava 1/6 rispetto ai concorrenti (Motorola, Intel)
• ottime prestazioni rispetto ai concorrenti
2
•Importanza Acorn in UK (Sinclair, spectrum)
•Acorn leader nel settore dell’Education
•BBC Micro: richiesto dalla BBC per la trasmissione televisiva The Micro
Program (Beeb, soprannome affettivo)
•BBC Micro: vendite sopra le aspettative (2 milioni/100k)
2
ARM1 (1985) (#1)
Nel 1983 il 6502 è piuttosto datato: i personal
computer concorrenti ormai sfoggiano CPU a 16bit.
Acorn testa tutte le CPU a 16 e 32bit presenti sul
mercato ma nessuna la soddisfa appieno. Decide
quindi di crearsi il proprio processore da zero,
basandosi sul set di istruzioni del ben noto 6502.
La ora decantata semplicità del nascente processore ARM1, era in
principio una neccessità. Si narra, infatti, che i progettisti incaricati
fossero alle prime armi nella progettazione di processori; fu questo che
impedì all’ARM1 di diventare troppo complesso, decretandone così la
sua fortuna.
Si decide di puntare su un processore con un set di istruzioni a
lunghezza fissa e un modello load/store.
3
•In quello stesso periodo Intel migliora le proprie CPU CISC, passando dall’8088
all’80186, 80286... fino ai processori odierni.
•Grazie ai guadagni derivanti dal BBC Micro, hanno un ottimo laboratorio di
ricerca
3
ARM1 (1985) (#2)
Il team di sviluppo è composto da 6 persone.
Il primo set di istruzioni viene scritto in BASIC, cosa che permette di
sviluppare un prototipo in tempi molto brevi.
In BASIC è anche il simulatore event-driven che permette il supporto
dei chip, e dei vari controller della macchina.
L’ARM1 viene commercializzato come coprocessore aggiuntivo per il
BBC Micro.
Nell’attesa di un computer basato su ARM, Acorn produce una
versione “home” del BBC Micro ma si rivela un flop. In seguito alla crisi
economica, Acorn viene acquistata da Olivetti.
4
•Lo stesso simulatore, convertito in Modula-2 (prima) e in C (dopo) è ancora
usato da Acorn e ARM Ltd per design e testing
•Per far sì che all’uscita di un PC basato sull’ARM1 i programmatori
sapessero usarlo
4
ARM2 (1987)
Ci vogliono altri due anni prima che
Archimedes, il primo computer basato
sul processore ARM (in realtà ARM2),
veda la luce.
Primo processore ARM immesso sul
mercato.
• 32bit data bus
• 26bit address space
• 16 registri a 32bit
• 30 000 transistors (contro i 68 000 del
Motorola 68000)
• no microcodice (RISC)
• no cache (cosa abbastanza comune
all’epoca)
5
•Primo PC con processore RISC
•Archimedes (ARM2): all’inizio non ha molto SW: prima emulatori BBCM/IBM;
in 1-2 anni viene sviluppato SW Educational
5
Da Acorn a ARM Ltd (fine ‘80)
Alla fine degli anni ‘80 inizia una
collaborazione con Apple per la nuova
versione dell’ARM.
Il lavoro Diventa così importante che nel
1990 viene creata una nuova società:
ARM Ltd (qui ARM assume il significato
di Advanced RISC Machines, sostituendo
il precedente di Acorn RISC Machines) che contiene il team del design.
L’ARM Ltd non produce microprocessori ma progetta e vende
proprietà intellettuale.
Cambia così la numerazione: vengono saltati gli ARM4 e 5 e si passa
direttamente all’ARM6 e alle sue varianti.
6
•(foto) quartier generale in Cherry Hinton, Cambridge
6
ARM3 (1990)
Successore dell’ARM2, prima CPU della ARM Ltd.
• 4Kb di cache.
ARM 610 (1991)
Nel 1991 Apple usa una versione dell’ARM6
la 610 per le prime serie di PDA come l’Apple
Newton, conosciuti anche come
MessagePad.
Nel 1994 verrà poi utilizzato anche dalla
Acorn per le cpu dei suoi RiscPC.
Questa versione introduceva un
indirizzamento a 32 bit con 4K di cache e con
la possibilità di passare dalla modalità bigendian alla little-endian; fu prodotto a diverse
velocità: 20Mhz, 30Mhz e 33Mhz.
7
Evoluzione (#1)
8
Evoluzione (#2)
9
RISC vs CISC (#1)
RISC (Reduced Instruction Set Computer)
• il concetto nasce nel 1974 da John Cocke (IBM)
• solo il 20% delle istruzioni macchina sono molto usate
• la complessità si sposta dall’HW al SW (compilatore)
• meno istruzioni significa meno transistor
• richiede più linee di codice di un CISC (più memoria)
CISC (Complex Instruction Set Computer)
• definizione retroattiva introdotta per distinguerli dai RISC
• microcodice, risiede in una ROM e traduce ogni singola istruzione
• istruzioni più vicine a quelle dei linguaggi di alto livello
MIPS (Microprocessor without Interlocked Pipeline Stages)
• minimizza le chiamate alla memoria esterna arricchendo la CPU di
registri
10
Quando i transistor disponibili su un solo chip erano pochi e i calcolatori
venivano spesso programmati in assembler, era naturale sfruttarli in modo
tale da avere CPU con istruzioni potenti, evolute e complesse: più queste
erano vicine alle istruzioni dei linguaggi di programmazione ad alto livello più il
computer sarebbe stato facile da programmare, e i programmi avrebbero
occupato poco spazio in memoria (anch'essa poca e preziosa). Le CPU
progettate secondo questo approccio sono dette CISC ed avevano unità di
controllo complesse capaci di sfruttare al meglio pochi registri e i cui
programmi erano di dimensioni relativamente piccole. A cavallo fra gli anni '70
e gli '80 però la situazione era in gran parte cambiata: la RAM era molto più
economica ed erano ormai disponibili ottimi compilatori in grado di generare
linguaggio macchina molto efficiente: per questo si iniziò a pensare ad un
nuovo modo di progettare le CPU, prendendo in esame la possibilità di usare i
transistor disponibili per avere invece molti registri e un set di istruzioni
elementare, molto ridotto, che delegasse al compilatore il lavoro di tradurre le
istruzioni complese in serie di istruzioni più semplici, permettendo così di
avere unità di controllo particolarmente semplici e veloci. Oramai però la
distinzione fra queste due architetture è venuta in gran parte meno: il numero
di transistor disponibili su un solo chip è aumentato tanto da poter gestire
molti registri ed anche set di istruzioni complesse.
Un compilatore che genera codice per CPU RISC deve affrontare un duro
lavoro per generare codice compatto ed efficiente, che in ogni caso sarà più
grande ed occuperà più memoria dell'equivalente per CISC.
10
RISC vs CISC (#2)
11
Post-RISC
Oggi la distinzione tra RISC e CISC è molto meno marcata. Le CPU
RISC sono diventate molto più complesse mentre i CISC sono
diventati più efficienti. Infatti:
• il PPC 601 (RISC) supporta più istruzioni di un Pentium (CISC)!
• la famiglia Pentium II è definita da Intel come CRISC
12
Il mercato dei processori RISC
Per motivi di retrocompatibilità, i
processori RISC non sono mai entrati
negli home-computer.
Sono invece stati introdotti fin da subito nel mondo dei
cellulari/palmari, perchè in forte espansione proprio in quel periodo.
Oggi la stessa Intel dichiara di produrre più CPU ARM che x86.
13
•Fino al 1998 MIPS era leader, grazie alla console Nintendo
•Dal 1999, grazie all’espansione del mercato dei cellulari, la ARM diventa
dominante
•Il RISC di ARM è particolare, non punta alle prestazioni, ma alla semplicità
13
Acorn VS Apple (1994)
As a founder member,
Acorn is delighted
to welcome Apple
to the RISC Club.
After 11 years of development and 7 years of production, we at Acorn are still
marveling at the sheer power, performance and potential of 32-bit RISC
technology.
Our ARM 32-bit RISC processors have delivered these capabilities to our
many customers in education, the home and industry worldwide, in our products
since 1987.
So it comes at little surprise to hear that Apple's new desktop range also
incorporates 32-bit RISC technology.
Oh well. Better late than never.
Dal Times, 15 marzo 1994
14
ARMv4 - Memoria
ARM è un processore a 32 bit ma è anche in grado di manipolare
dati a 8bit (byte) e a 16bit (halfword).
• Le word a 32 bit sono allineate in memoria ad indirizzi multipli di 4.
• Le halfword sono allineate ad indirizzi multipli di 2 mentre i byte sono
singolarmente indirizzabili in memoria.
15
ARMv4 - Modi Operativi
Esistono sette modi di funzionamento supportati dal processore
Il modo può essere cambiato via software, in modalità privilegiata oppure
attraverso un’eccezione.
16
ARMv4 - Registri (#1)
Il processore ARM è dotato di 37 registri:
• 31 registri generici
•R13 corrisponde allo Stack Pointer (SP)
•R14 corrisponde al Link Register (LR)
•R15 corrisponde al Program Counter (PC)
• 6 registri di stato (di cui 5 di salvataggio)
I registri sono divisi in banchi parzialmente sovrapposti, uno per
ogni modo operativo esistente (System e User usano lo stesso
banco).
Quindi ci sono 15 registri d’uso generale (da R0 a R14), uno o due
registri di stato (quello corrente ed eventualmente quello di
salvataggio) ed il PC. Tutti i registri tranne quelli di stato possono
essere utilizzati da tutte le istruzioni di tipo generale.
17
ARMv4 - Registri (#2)
18
ARMv4 - Registri (#3)
La presenza di una coppia specifica di registri SP e LR per ogni
modo operativo facilita l’associazione ai singoli modi di uno stack
privato e rende più efficiente il ritorno da eccezione.
Nel modo FIQ esiste una copia fisica anche dei registri da R8 a
R12: permette di servire una chiamata ad una interruzione veloce
senza dover salvare quei registri, ottenendo una migliore efficienza
nella realizzazione della corrispondente routine di servizio.
19
ARMv4 - CPSR (#1)
Il Current Program Status Register è il registro di stato. Include i
bit di condizione (i 4 bit più significativi), le maschere per le
interruzioni e la codifica del modo operativo.
•bit da 0 a 4 (M): modo operativo
•bit 5 (T): set di istruzioni Thumb a 16bit, on-off
•bit 6 (F): interruzioni “fast” (FIQ), on-off
•bit 7 (I): interruzioni generiche (IRQ), on-off
•bit 28 (V): indica errore di overflow
•bit 29 (C): indica il riporto
•bit 30 (Z): indica un risultato zero
•bit 31 (N): indica un risultato negativo
20
ARMv4 - CPSR (#2)
• C, Z e N possono essere modificati in base al risultato di una
istruzione di elaborazione dei dati. I bit di condizione vengono modificati
solo se il bit S (Set Condition Code) è impostato a 1. Questo si ottiene
postponendo la lettera S al nome dell’istruzione. (Es. ADD→ADDS,
SUB→SUBS)
• V (Overflow) è modificabile solo dalle operazioni aritmetiche.
• C, le istruzioni additive (ADDS, CMN...) lo impostano a 1 se nella
somma risulta un riporto dal bit più significativo. Le istruzioni sottrattive
(CMP, SUBS...) lo impostano a 0 se nella differenza risulta un “prestito”
nel bit più significativo.
Il registro SPSR (Saved Program Status Register) ha il compito di
preservare il valore di CPRS durante la gestione di un’eccezione. C’è
un SPSR per ogni modo operativo tranne che per il modo User/System
durante il quale non è prevista la gestione di un’eccezione.
21
21
ARMv4 - Stack (#1)
Nei processori ARM gli stack vengono gestiti tramite le istruzioni
LDM (Load Multiple Register) e STM (Store Multiple Register).
Sono supportati quattro formati diversi di stack, ognuno dei quali
viene specificato attraverso una sigla di due caratteri preposta al
nome dell’istruzione LDM o STM.
Questi sono i tipi di stack:
•Full Stack: SP punta all’ultimo dato inserito
•Empty Stack: SP punta alla prima posizione di memoria libera
•Ascendente: SP viene incrementato per effetto dell’inserimento
•Discendente SP viene decrementato per effetto dell’inserimento
22
Utile in particolare per il registro LR (R14) che deve essere salvato prima che
dall’interno di una subroutine se ne chiami un’altra, al fine di ottenere il
corretto ripristino della successione di indirizzi di ritorno alle subroutine
chiamanti. Il registro SP (R13) viene utilizzato per identificare l’indirizzo della
testa di uno stack.
22
ARMv4 - Stack (#2)
23
ARMv4 - Eccezioni (#1)
Sono previsti 8 tipi d’eccezione, ad ognuno è associato un hard
vector. L’elaborazione di un’eccezione forza il PC ad assumere il
valore del corrispondente vettore.
Di norma a quell’indirizzo è collocata un’istruzione di salto alla
corrispondente routine di servizio, tranne per l’ultima eccezione,
dove può tranquillamente iniziare la routine.
24
La Address Exception si riferisce ad una particolare modalità operativa con
address space ridotto a 26bit.
24
ARMv4 - Eccezioni (#2)
25
ARMv4 - Gestione delle priorità dei dispositivi
Essendo le linee di ingresso IRG e FIQ uniche, i dispositivi di
ciascuna delle due classi di interruzioni devono essere identificati in
una fase iniziale delle rispettive routine di servizio.
Al fine di velocizzare tale fase di identificazione e gestire
correttamente le priorità dei dispositivi, il sistema può includere
hardware aggiuntivo (interrupt controller).
ARMv4 - Priorità delle eccezioni
Nel caso che più eccezioni siano
contemporaneamente pendenti, il
processore ARM utilizza la seguente
tabella delle priorità.
26
ARMv4 - Istruzioni Condizionali
Perchè ogni singola istruzione venga effettivamente eseguita devono
essere preliminarmente soddisfatte alcune condizioni, valutando i bit
di condizione. Il nome di ogni istruzione può essere esteso:
27
ARMv4 – Pipeline (#1)
A partire dall’ARM2 il processore è dotato di una pipeline a 3 stadi.
• Fetch: copia il codice dell’istruzione dalla memoria
• Decode: decodifica l’istruzione leggendone gli operandi
• Execute: l’ALU esegue l’istruzione ed effettua il write-back
Si ottiene quindi una latenza di tre cicli, mentre il throughput è di una
istruzione per ciclo.
28
ARMv4 – Pipeline (#2)
Il PC è sempre due istruzioni avanti rispetto all’istruzione in
esecuzione.
Nel caso di branch due cicli di istruzioni vanno persi (perchè la
pipeline deve nuovamente riempirsi), per questo è preferibile l’uso di
istruzioni condizionali.
con “branch”
con istruzione condizionale
CMP
BEQ
MOV
MOV
CMP R0,#0
MOVNE R1,#1
MOVNE R2,#2
R0,#0
<offset>
R1,#1
R2,#2
29
•istruzioni condizionali da usare se la condizione riguarda tre o meno istruzioni
CMP: compare, allows you to compare the contents of a register with another
register or an immediate value, updating the status flags to allow conditional
execution to take place. condizio
BEQ: branch, solo se sono uguali (differenza=0, Z=1)
MOV: move, sposta il valore # dentro al registro R
29
ARMv4 – Istruzioni (#1)
Possiamo dividere le istruzioni in categorie funzionali:
3) Istruzioni per l’elaborazione dei dati
Le regole base per questo tipo di istruzioni sono:
3 operandi: 2 sorgenti, 1 destinatario
tutti gli operandi sono a 32bit, sia i registri che le costanti
il risultato è a 32bit ed è posto in un registro
In questa classe troviamo le operazioni aritmetiche e logiche (ADC,
ADD, AND, BIC, EOR,MUL,ORR, RSB, RSC, SBC, SUB), quelle per
il movimento tra i registri (MOV, MVN) e quelle di confronto (CMN,
CMP, TEQ, TST)
30
ARMv4 – Istruzioni (#3)
2) Istruzioni per l’accesso alla memoria
In questa classe vi sono le istruzioni per il movimento dei dati da
memoria a registro (load) e viceversa (store). Vi sono poi alcune
varianti per il caricamento di dati da 8 e 16bit con e senza segno e
per il movimento multiplo che coinvolge più registri.
Le istruzioni sono: LDR, LDRB, STR, STRB, LDRH, LDRSB,
LDRSH, STRH, LDMxx, STMxx
31
ARMv4 - Istruzioni (#2)
Aritmetiche e logiche:
ADD
SUB
RSB
MUL
ORR
BIC
r0,
r0,
r0,
r0,
r0.
r0,
r1,
r1,
r1,
r1,
r1.
r1,
r2
r2
r2
r2
r2
r2
//
//
//
//
//
//
r0=r1+r2
r0=r1-r2
r0=r2-r1
r0=r1*r2
r0=r1 or r2
r0=r1 and not
ADC
SBC
RSC
AND
EOR
r2
r0,
r0,
r0,
r0,
r0,
r1,
r1,
r1,
r1,
r1,
r2
r2
r2
r2
r2
//
//
//
//
//
r0=r1+r2+C
r0=r1-r2+C-1
r0=r2-r1+C-1
r0=r1 and r2
r0=r1 xor r2
Movimento tra i registri
MOV r0, r2
// r0=r2
MVN r0, r2
// r0= not r2
Operazioni di confronto
CMP r1, r2
TST r1, r2
//set cc on r1-r2
CMN r1, r2 //set cc on r1+r2
//set cc on r1 and r2 TEQ r1, r2 //set cc on r1 xor r2
Con queste ultime vengono modificati solo i bit di condizione(cc) del
CPSR
32
ARMv4 – Istruzioni (#4)
3) Istruzioni di salto
Queste istruzioni hanno l’effetto di caricare un nuovo valore nel
registro PC(R15), valore che viene calcolato come somma del PC
corrente e dell’offset relativo specificato nella codifica dell’istruzione.
Di questa classe fanno parte 2 tipologie di istruzioni B(branch) e
BL(branch and link)
B <indirizzo>
BL <indirizzo>
//PC<-indirizzo
//LR<-PC-4 (salva PC in LR)
PC<-indirizzo
B Lab1 //salta al label “lab1”
BEQ Lab2
//se z=1 allora salta al label “lab2”, altrimenti prosegue
BLVC SUBR1
//se V=0 chiama la subroutine “SUBR1”
33
Tecnologie Proprietarie
A cominciare con ARMv4 sono stati
introdotti:
• Thumb
• Thumb-2
Mentre a partire da ARMv5 sono
state aggiunte le estensioni:
• Jazelle
• TrustZone
• IEM (Intelligent Energy Manager)
• SIMD
• NEON
34
•Jazelle: accelera l’esecuzione del Java bytecode, aumentando notevolmente
le performance rispetto a un SW basato sulla JVM. Fino a 8 volte più veloce,
80% di consumi in meno.
•TrustZone: estensione che fornisce il supporto hardware per due spazi di
indirizzamento separati. Il codice in esecuzione nello spazio “non sicuro” non
può avere accesso agli spazi di indirizzamento marcati come “sicuri”.
•IEM: implementa dei particolari algoritmi in grado di bilanciare il lavoro del
processore e il consumo di energia. In coordinamento col SO e le applicazioni
si preoccupa di aggiustare dinamicamente il livello di performance della CPU.
•SIMD: istruzioni aggiuntive che supportano il Single Instruction Multiple Data
(SIMD). Utile per codec audio e video.
•NEON: architettura sviluppata per venire incontro alla richiesta di alte
performance per applicazioni multimediali.
34
Thumb Technology (#1)
Thumb è un estensione all’architettura
ARM a 32bit che permette una densità di
codice molto elevata.
Il set di istruzioni Thumb (ISA) contiene un
sottoinsieme delle istruzioni ARM a 32bit
più comunemente usate ma, a differenza di
queste, si tratta di istruzioni compresse a 16bit.
In esecuzione le istruzioni Thumb a 16bit vengono decodificate,
svolgendo così lo stesso lavoro dei loro equivalenti ARM a 32bit.
Vantaggi:
• L’aumento di densità del codice è stimato intorno al 30% e non comporta
peggioramento delle prestazioni.
• Usando una combinazione di codice ARM e Thumb, il programmatore è
in grado di bilanciare costi, performance e consumi.
35
•The difference between two equivalent instructions lies in how the
instructions are fetched and interpreted prior to execution, not in how they
function. Since the expansion from 16-bit to 32-bit instruction is accomplished
via dedicated hardware within the chip, it doesn't slow execution even a bit.
But the narrower 16-bit instructions do offer memory advantages.
35
Thumb Technology (#2)
Svantaggi:
• Il programmatore deve essere in grado di identificare le routines veloci
(che sfrutteranno le istruzioni ARM a 32bit) da quelle ottimizzabili mediante
le istruzioni Thumb.
• Molte istruzioni ARM non hanno equivalenti in Thumb (per esempio
quelle per l’accesso a funzioni speciali come SIMD/DSP, o le istruzioni
privilegiate). In questi casi il codice Thumb deve chiamare una funzione
contenente il codice ARM da eseguire, prima di poter tornare al codice
Thumb.
• 16bit non sono abbastanza per mantenere la capacità di eseguire in
modo condizionale ogni istruzione.
36
Thumb-2 Technology
Aggiunge diversi miglioramenti alla tecnologia Thumb:
• nuove istruzioni a 16bit per migliorare il flusso del programma
• nuove istruzioni a 32bit per sopperire alle istruzioni ARM ancora mancanti
• nuove istruzioni a 32bit che migliorano il set di istruzioni di ARM
Nella maggior parte delle applicazioni le istruzioni Thumb-2
diventano lo standard, specialmente nelle situazioni in cui il rapporto
costi, performance e consumi è poco chiaro.
• Non c’è più bisogno di mescolare istruzioni ARM e Thumb.
• Ritorno all’esecuzione condizionale delle istruzioni (IT).
37
StrongARM (1995)
Era una delle più veloci versioni
dell’architettura ARM. Creato dalla
Digital è stato disegnato soprattutto per
l’uso negli strumenti portabili nei quali
occorreva un basso consumo
energetico, era usato in palmari e anche
in decoder e box digitali per la
televisione.
Lo StrongArm portò i RiscPC da 40 a 200-300Mhz e fu il primo a
dividere tra instruction e data cache con entrambe le cache di 16Kb.
La pipeline viene portata da 3 a 5 stadi.
Nel 1995 l’SA-100 viene immediatamente incorporato nei nuovi modelli
dell’Apple Newton.
38
Da StrongARM a XScale (2000)
Successivamente la Digital Semiconductor, viene ceduta alla Intel
che usa lo StrongARM per sostituire i suoi i960 che avevano
dominato il mercato dei processori RISC fino ai tardi anni ‘90.
Con XScale nasce la generazione v5 di ARM che sostituisce gli
StrongARM ancora basati sulla v4. Tutti i processori di questo tipo
sono basati su un processore a 32 bit con Thumb e hanno 2 cache
da 32kb di tipo instruction e data e anche 2 mini-cache da 2kb.
E’ usato come processore in tantissimi tipi di palmari e anche sui pc
desktop RISC Iyonix della Acorn e su molti media-player portabili e
grazie alla collaborazione con Apple anche sui prossimi Ipod.
39
XScale (2000)
La pipeline si suddivide in 3 sotto pipeline: Main Execution, Memory e
MAC con in tutto 7/8 stadi, con di norma 1 ciclo per stadio.
40
XScale
I tre pipeline possono essere occupati
simultaneamente (comportamento di tipo
superscalare).
I tre pipeline funzionano in maniera asincrona.
Conclusione: le istruzioni possono completare
l’esecuzione fuori ordine se non ci sono
dipendenze tra i dati.
Per ottimizzare l’uso delle pipeline: la predizione dei salti.
PXA255 effettua una predizione dinamica basata sulla “storia
passata” di ciascun salto, la storia è memorizzata nel BTB (Branch
Target Buffer), la storia di un salto può assumere 4 possibili stati:
Strongly Not Taken, Weakly Not Taken, Weakly Taken e Strongly
Taken.
41
Prodotti ARM - Gaming
Nintendo DS
Sony PSP
ARM7 / ARM9
ARM9
Nintendo GB Advance
ARM7 / ARM9
42
Prodotti ARM - Personal Media Players
Apple Ipod
Creative ZEN Micro
Epson P-2000
ARM7
ARM7
ARM7
43
Prodotti ARM - Personal Digital Assistants
HP iPaq 4150/4350
Intel XScale
Acer N40
Panasonic CF-P1
ARM9 (S3C2410)
Xscale (PXA-263)
44
Prodotti ARM - Smart Phones
Nokia N70 3G
Motorola A780
Sony Ericsson P910
ARM9
Xscale (PXA271)
ARM7 / ARM9
45
Riferimenti
ARM Ltd - http://www.arm.com/
Wikipedia - http://en.wikipedia.org/wiki/ARM_architecture
The history of the ARM CPU - http://www.ot1.com/arm/armchap1.html
ARM Assembler - http://www.heyrick.co.uk/assembler/
Introduzione al processore ARM - http://www.dei.unipd.it/didattica/ae1/web/materiale.htm#u03
ARM, The first encounter - http://galeb.etf.bg.ac.yu/~vm/tutorial/ARM.ppt
Ars Technica: RISC vs CISC - http://arstechnica.com/cpu/4q99/risc-cisc/rvc-1.html
A Brief History of RISC - http://www.aallison.com/history.htm
46
Scarica