Architettura ARM

Transcript

Architettura ARM
Architettura ARM
(Advanced Risc Machines)
G. Bucci
(2011)
Rev 04/06/2013
1
ARM

E’ una architettura RISC a 32 bit




Estremamente semplice, basso consumo
Licenziata a una lunga lista di produttori: ARM Ltd non produce
direttamente, vende licenze, ovvero IP (Intellectual Properties)
Usata praticamente in tutti i telefonini intelligenti e su altri
apparati come iPad
Nel suo mercato di elezione non ha concorrenti:



Primi 2008: superato il traguardo dei 10 G processori prodotti
Primavera 2011: ormai superato il traguardo dei 20 G prodotti
Primavera 2011: oltre 10 M di pezzi al giorno
2
Per dare un’idea

Quella sotto è pubblicità da un sito ARM (giugno 2011)
3
Siamo circondati !
4
Letteratura

Su ARM esiste un’ampia letteratura



Su wikipedia si trova la storia e la lista dei modelli sviluppati nel
corso del tempo, con cenni circa le loro caratteristiche
Sul sito della società http://www.arm.com/ si trova una
consistente documentazione, compresi i manuali dei vari modelli,
note applicative, documentazione on-line interattiva
All’indirizzo
http://www.cse.unsw.edu.au/~cs9244/06/seminars/08leonidr.pdf si trova un articolo che descrive in modo sintetico e
leggibile l’architettura ARM
5
Storia

Acorn Computers è stata fondata nel 1978 a
Cambridge (UK).


Sollecitata da un progetto BBC ha prodotto un computer
(chiamato BBC) pensato a fini educativi; in esso veniva usata la
CPU 6502 la stessa del primo Apple; non aveva HD
Agli inizi degli anni ’80 decise passare a CPU più potenti


Scartate CPU di mercato venne lanciato un progetto per la
produzione di una CPU RISC ispirandosi fortemente al progetto
RISC 1 dell’Università di Berkley (sviluppato nel contesto di un
corso universitario)
Nell’ottobre 1983 venne lanciato il progetto Acorn RISC Machine;
il primo campione arrivò ad aprile 1085
6
Apple sceglie ARM

Nel 1990 Apple sceglie ARM per produrre il suo PDA
(denominato Netwon)




ARM è alla versione v2
Tra Apple, Acorn e VLSI Technology viene progettata una nuova
versione (la v3) che esce nel 1992
Il dispositivo usato da Apple si chiamava ARM610, aveva una
cache integrata e forniva 16 MIPS a 20 MHz con solo 30.000
transistori
Attualmente la società si chiama ARM Ltd (Advanced
Risc Machines) ed è compartecipata dalle tre società
7
Famiglie, versione, dispositivo

La denominazione è un po’ confusa
………Seguono altre famiglie e versioni

Attualmente la versione è la v7
8
Cortex

Si chiama così la famiglia più recente




Vastissimo numero di produttori/utilizzatori
A4 (iPad) di Apple è un Cortex
Basata sulla versione V7 dell’architettura
Tre profili:



"Application" profile: Cortex-A series
"Real-time" profile: Cortex-R series
"Microcontroller" profile: Cortex-M series
9
Lo stato attuale
10
Licenziatari Presenti (e/o passati)

Alcatel-Lucent, Apple Inc., Atmel, Broadcom, Cirrus Logic, Digital
Equipment Corporation, Freescale, Intel (through DEC), LG, Marvell
Technology Group, Microsoft, NEC, Nuvoton, Nvidia, NXP (previously
Philips), Oki, ON Semiconductor, Qualcomm, Samsung, Sharp,
STMicroelectronics, Symbios Logic, Texas Instruments, VLSI
Technology, Yamaha and ZiiLABS.

Le architetture correnti sono ARM7, ARM9, ARM11 e Cortex.

Notable ARM processors developed by licensees include DEC
StrongARM, Freescale i.MX, Marvell (formerly Intel) XScale, Nvidia
Tegra, ST-Ericsson Nomadik, Qualcomm Snapdragon, the Texas
Instruments OMAP product line, the Samsung Hummingbird and the
Apple A4.
11
IP core


Intellectual Property Core: è una parte di logica riusabile,
una standard cell o un chip layout di cui qualcuno
possiede la proprietà intellettuale
Può essere data in licenza per essere usata come
componente di base attorno al quale viene costruito uno
specifico ASIC / FPGA
Tipicamente: un produttore impiega un ARM core attorno
al quale viene progettata la logica addizionale per un
dispositivo (anche una CPU) , la cui realizzazione viene
fatta in casa o affidata a una semiconductor farm
12
Licenze

Perpetua


A termine


Diritto di usare la tecnologia ARM (progetto e produzione)
indefinitamente
Diritto di progettare e sviluppare su un periodo di tempo, diritto
a tempo indefinito alla produzione
A prodotto

Diritto a progettare e sviluppare su un periodo di tempo un dato
prodotto, diritto a tempo indefinito alla produzione
13
Altri servizi/strumenti offerti da ARM





Possibilità per chi non possiede la “fonderia” di
appoggiarsi su “foundries” approvate da ARM
Possibilità di valutare soluzioni ARM, sviluppare prototipi
prima di passare alla licenza
C’è anche un programma universitario che consente di
avere accesso a tool e kit di sviluppo
Standard cells
Fast development
14
Architettura ARM
15
La caratteristica fondamentale: il basso consumo
Per dare un’idea:

Il modello PXA255 XScale a 400MHz aveva prestazioni
comparabili con quelle di un Pentium 2 a 300MHz, ma
con un consumo di energia elettrica 50 volte inferiore




Xscale è una famiglia di processori sviluppati da Intel
Si basa sulla versione architetturale V5
Incorpora una pipeline a 7 stadi
(non più Intel)
16
Caratteristiche
Buon numero di registri di CPU (in tutto 37) a 32 bit
 Solo operazioni di Load e Store verso la memoria


indirizzamento determinato esclusivamente dal contenuto dei registri e
da eventuali campi nell’istruzione;
Operazioni di manipolazione dei dati esclusivamente tra registri di
CPU
 Istruzioni su 32 bit


formati istruzioni con campi in posizione e di misura fissi, per facilitare
la decodifica; tutte le
modalità indirizzamento autoincrement e autodecrement
 esecuzione condizionata di quasi tutte le istruzioni del repertorio
 controllo sia della ALU sia degli shifter

17
…caratteristiche

Previsone impiego coprocessori


Allo scopo di poter estendere l’architettura ARM (repertorio di istruzioni)
per specifici campio applicativi (ad esempio DSP, Digital Signal
Processing).
Modalità di funzionamento Thumb


Una sorta di superstato
Le istruzioni Thumb sono codificate su 16 bit (aumenta la densità del
codice)




Minor numero di registri
Col Thumb2 le istruzioni ARM e Thumb sono liberamente mescolabili
Estensione Jazelle


In certe situazioni (p.e., risposta alle eccezioni) in cui, se la macchina è in
modo Thumb, essa passa automaticamente al modo ARM
Esecuzione diretta del byte code dei programmi java.
Interfaccia di debug
Collegamento diretto alla CPU di un apparato di debugging
Altro…. (multimedia, SIMD ….)


18
Stati del processore
19
Modello di programmazione
20
Registri

16 registri da 32 bit denominati R0-R15





R0-R12 sono registri di uso generale;
R13 viene usualmente usato come Stack Pointer (SP), ma l’architettura
non forza tale impiego
R14 ha la funzione (architetturale) di subroutine Link Register (LR) ; ci
viene salvato l’indirizzo di ritorno (ovvero il contenuto del registro R15 )
quando viene eseguita l’istruzione BL (Branch and Link)
R15 ha la funzione architetturale di Program Counter;
In tre registri R13, R14, R15 possono comunque essere manipolati
come registri di uso generale.
Un registro di stato CPSR (Current Program Status Register )
 20 registri sono “duplicati” (banked) e sono specifici dei modi
corrispondenti

21
PC è un registro come un altro…

L’istruzione BL (Branch and Link) serve come chiamata
di subroutine


Il ritorno dalla routine si fa copiando r14 in r15:



Salva l’indirizzo di ritorno in r14 (lr)
MOV r15, r14
E’ più intuitivo scrivere MOV pc,lr
Simboli com pc, lr o sp non sono riconosciuti
direttamente dall’assemblatore, occorre definirli con una
direttiva (pc RN r15)
22
Sottoprogramma


R13 usato come stack pointer
R14 usabile se prima si salva il suo contenuto per il
ritorno




Va preventivamente salvato se il sottoprogramma ne chiama un
altro (la chiamata cambia il contenuto di R14)
R15 usato solo come PC
R0-R12 usati variamente per passare parametri e per le
variabili locali (se non bastano usare lo stack)
Al ritorno lo stack deve essere com’era prima della
chiamata
23
Current Program Status Register




(CPSR)
4 condizioni (Negative, Carry, Zero e oVerow);
T distingue tra ARM e Thumb
I e F abilitano le interruzioni normali (I) and veloci (F)
M4-M0 identificano il modo di funzionamento.

25
Eccezioni
Nella terminologia ARM sono chiamate così le
interruzioni esterne, le eccezioni classiche e le
interruzioni software
26
Eccezioni
27
Eccezioni

Risposta all’eccezione di modo m






CPSR viene copiato in SPSR_m
CPSR viene modificato a riflettere il nuovo modo (se del caso I e
F vengono disasseriti)
PC (r15) viene salvato in LR_m (r14_m)
PC viene modificato con il numero corrispondente all’indirizzo del
vettore di interruzione
I vettori di interruzione stanno nella parte bassa
Un vettore deve contenere l’istruzione di salto all’handler
dell’eccezione
28
Vettori di interruzione
29
Vettori di interruzione
30
Eccezione di Reset

Ha l’effetto di






Passare al modo Supervisore
Disabilitare le interruzioni normali e veloci (portando a 1 i due bit
I e F)
Azzerare il bit di stato T (riporta allo stato ARM qualora la CPU
fosse in stato Thumb)
Forzare l’esecuzione dell’istruzione alla posizione 0x00
Dopo il Reset il contenuto dei registri è indeterminato
Non deve essere effettuato il ritorno in quanto è da
considerarsi come l’avvio della macchina
31
Eccezione software
32
Software Interrupt (SWI)



Porta la macchina in stato Supervisor
Il formato dell’istruzione prevede un campo di 24 bit in
cui è scritto un numero (della funzione da chiamare)
E’ responsabilità dell’handler estrarre il numero e saltare
alla funzione appropriata. Ecco il modo
LDR
BIC

r0, [lr, #-4]
;r0 <- Codice della SWI chiamante
r0,r0,#0xff000000 ; isolamento #funzione
Deve seguire un salto attraverso un tabella contenente
gli indirizzi delle funzioni
BIC sta per Bit Clear
33
Ritorno dalle eccezioni

Per tornare al programma interrotto, l’exception handler



Ripristina CPSR da SPSR_m
Ripristina PC da LR_m
(attenzione: riabilita !!!)
Attenzione: all’atto dell’eccezione in LR_m viene salvato
un valore di PC che non è sempre lo stesso per tutti i tipi
di eccezione

Deriva dal fatto che c’è una pipeline e che PC può essere stato
aggiornato o no a seconda di dove l’eccezione si manifesta
35
PC salvato/ritorno
p Ecc
PC Salvato
Ritorno
1
2
3
4
5
6
6
--r14_abt = PC+8
r14_fiq = PC+4
r14_irq = PC+4
r14_abt = PC+4
r14_svc = PC+4
r14_und = PC+4
--SUBS
SUBS
SUBS
SUBS
MOVS
MOVS
Reset
Data Abort
FIQ
IRQ
Prefetch Abort
SWI
Undefined instr
PC,r14_abt,#8
PC,r14_fiq,#4
PC,r14_irq,#4
PC,r14_abt,#4
PC,r14_svc
PC,r14_und
Qui PC indica il PC dell’istruzione
che determina l’eccezione
p è la priorità (predefinita) delle differenti eccezioni
36
PC salvato/ritorno
p Ecc
PC Salvato
Ritorno
1
2
3
4
5
6
6
--r14_abt = PC+8
r14_fiq = PC+4
r14_irq = PC+4
r14_abt = PC+4
r14_svc = PC+4
r14_und = PC+4
--SUBS
SUBS
SUBS
SUBS
MOVS
MOVS
Reset
Data Abort
FIQ
IRQ
Prefetch Abort
SWI
Undefined instr
PC,r14_abt,#8
PC,r14_fiq,#4
PC,r14_irq,#4
PC,r14_abt,#4
PC,r14_svc
PC,r14_und
Viene salvato il PC dell’istruzione successiva
37
PC salvato/ritorno
p Ecc
PC Salvato
Ritorno
1
2
3
4
5
6
6
--r14_abt = PC+8
r14_fiq = PC+4
r14_irq = PC+4
r14_abt = PC+4
r14_svc = PC+4
r14_und = PC+4
--SUBS
SUBS
SUBS
SUBS
MOVS
MOVS
Reset
Data Abort
FIQ
IRQ
Prefetch Abort
SWI
Undefined instr
PC,r14_abt,#8
PC,r14_fiq,#4
PC,r14_irq,#4
PC,r14_abt,#4
PC,r14_svc
PC,r14_und
Quando l’interruzione viene servita il PC è stato
incrementato di 4 rispetto all’ultima istruzione completata,
per questo occorre riportarlo indietro
38
PC salvato/ritorno
p Ecc
PC Salvato
Ritorno
1
2
3
4
5
6
6
--r14_abt = PC+8
r14_fiq = PC+4
r14_irq = PC+4
r14_abt = PC+4
r14_svc = PC+4
r14_und = PC+4
--SUBS
SUBS
SUBS
SUBS
MOVS
MOVS
Reset
Data Abort
FIQ
IRQ
Prefetch Abort
SWI
Undefined instr
PC,r14_abt,#8
PC,r14_fiq,#4
PC,r14_irq,#4
PC,r14_abt,#4
PC,r14_svc
PC,r14_und
Data Abort si manifesta solo quando l’istruzione è in fondo
alla pipeline e PC è già stato incrementato 2 volte
39
Interruzioni esterne
40
Handler interruzioni esterne
Memo: Su IRQ viene salvato il PC di ritorno in r14_irq (lr_irq) e CPSR in
SPSR_irq
Politica “Una alla volta per carità !”
 Salvare i registri che verranno toccati
 Identificare la specifica interruzione e saltare al ramo
corrispondente
 Ripristinare i registri e CPSR
 Tornare al punto dell’interruzione
Per quanto apparentemente semplice
nasconde delle insidie
42
..Una alla volta per carità
1.
2.
3.
4.
Salvare i registri che verranno toccati
Identificare la specifica interruzione e saltare al ramo
corrispondente
Ripristinare i registri e CPSR
Tornare al punto dell’interruzione
C’è l’istruzione di Store Multiple (attraverso un registro) che fa tutto da
sola. Esempio:
STMFD sp!, {r0-r7,lr}
Salva ordinatamente i registri da r0 a r7 e r14 (indirizzo di ritorno) a
partire dalla posizione individuata inizialmente da sp (cioè r13 del
mode in atto, ovvero irq).
(FD: Full Descending stack)
43
..Una alla volta per carità
1.
2.
3.
4.
Salvare i registri che verranno toccati
Identificare la specifica interruzione e saltare al ramo
corrispondente
Ripristinare i registri e CPSR
Tornare al punto dell’interruzione
Richiede la lettura del mondo esterno per identificare qual è la specifica
interruzione e il salto al tratto di codice ad essa associato via una
tabella di indirizzamento
44
..Una alla volta per carità
1.
2.
3.
4.
Salvare i registri che verranno toccati
Identificare la specifica interruzione e saltare al ramo
corrispondente
Ripristinare i registri e CPSR
Tornare al punto dell’interruzione
Per ripristinare un blocco di registri c’è l’istruzione Load Multiple duale
della precedente. Esempio LDMFD sp!,{r0-r7}.
Per il ripristino di CPSR si potrebbe utilizzare l’istruzione MSR che
scrive in CPSR (facendole scrivere il valore di SPSR).
Ma qui c’è l’insidia !!
45
..l’insidia
1.
2.
3.
4.
Salvare i registri che verranno toccati
Identificare la specifica interruzione e saltare al ramo
corrispondente
Ripristinare i registri e CPSR
Tornare al punto dell’interruzione (con mov pc,lr)
Se CPSR viene ripristinato lo stato è quello che c’era al momento
dell’interruzione, dunque il sistema di interruzione ritorna abilitato. Se
c’è in agguato un’interruzione questa fa rientrare l’handler e sovrascrive
r14: il suo contenuto è perso!!
Bisogna rendere 3 e 4 indivisibili.
….
Per fortuna l’istruzione LDM prevede il “qualificatore” ^ che comporta
oltre al ripristiono dei registri anche il restore di CPSR (CPSR := SPSR)
LDMFD sp!,{r0-r7,pc}^
(fa coppia con la precedente)
46
Per inciso
In giù
(sviluppo stack)
In su
47
Schema per le interruzioni rientranti

Sull’interruzione occorre:
1.
2.
3.
4.
5.
6.
7.
Salvare l’indirizzo di ritorno sullo stack (di modo irq)
Salvare i registri che verranno manipolati e SPSR_irq
Azzerare la richiesta di interruzione
Riabilitare il sistema di interruzione (bit I di CPSR)
…. Quel che c’è da fare
Disabilitare il sistema di interruzione
Ripristinare i registri e SPSR_irq e tornare all’indirizzo salvato
os
c
le
a
M ili
fac
on
n
e
osì
c
o
son
48
Garantire il ristabilirsi dello stato
1.
2.
3.
4.
5.
6.
7.
Salvare l’indirizzo di ritorno sullo stack
Salvare i registri che verranno manipolati e SPSR_irq
Azzerare la richiesta di interruzione
Riabilitare il sistema di interruzione
…. Quel che c’è da fare
Disabilitare il sistema di interruzione
Ripristinare i registri e SPSR_irq e tornare all’indirizzo salvato
Onde evitare che dopo il ripristino dei registri si
inserisca un’altra interruzione prima che si compia il
salto (ci si riporta al caso precedente)
49
NON basta: c’è ancora un problema
1.
2.
3.
4.
5.
6.
7.
Salvare l’indirizzo di ritorno sullo stack
Salvare i registri che verranno manipolati e SPSR_irq
Azzerare la richiesta di interruzione
Riabilitare il sistema di interruzione
…. Quel che c’è da fare
Disabilitare il sistema di interruzione
Ripristinare i registri e SPSR_irq e tornare all’indirizzo salvato
Se qui dentro c’è un BL (call) e poi arriva una nuova interruzione
siamo fritti: si perde l’indirizzo di ritorno a dopo il BL !
( interruzioni e BL usano lo stesso registro r14_irq )
50
Soluzione del problema del BL

Rinunciare a fare le chiamate alle soubroutine entro
l’handler (rientrante) delle eccezioni. Inaccettabile

Sostituire i punti da 4 a 6 con
a)
b)
c)
d)
e)
f)
Passare a User mode
Salvare i registri di User mode
Riabilitare il sistema di interruzione
Chiamare la subroutine (quel che c’è da fare)
Al ritorno dalla subroutine rimettere i registri di User mode
Tornare a IRQ mode disabilitando il sistema di interruzione
51
….Soluzione del problema del BL

Sostituire i punti da 4 a 6 con
a)
b)
c)
d)
e)
f)
Passare a User mode
Salvare i registri di User mode
Riabilitare il sistema di interruzione
Chiamare la subroutine (quel che c’è da fare)
Al ritorno dalla subroutine rimettere i registri di User mode
Tornare a IRQ mode disabilitando il sistema di interruzione
La chiamata modifica LR_user e quindi, se arriva un’altra
interruzione, questa va a modificare LR_irq (già salvato) e non
fa perdere l’indirizzo di ritorno dalla subroutine.
Il processo si può ripetere quante volte si vuole
52
…Non è finita

La soluzione precedente ha un problema:




Lo User mode non è privilegiato e non consente di andare a
toccare, per esempio, CPSR
Nella scrittura dell’handler potrebbe essere utile usare istruzioni
privilegiate
Così era fino alla versione v4 (esclusa) quando mancava il
System mode
Con la v4 è stato introdotto il modo System,
equivalente al modo User (stessi registri), ma abilitato
alle operazioni privilegiate
 Nello schema precedente sostituire “User mode” con “System
mode”
53
Formato istruzioni
54
Formato Istruzioni
55
Esempio
56
Esecuzione condizionata

Il campo Cond contiene una condizione (messa lì
dall’assemblatore in base al codice di istruzione)

Ad esempio SUBGT r1,r2,r3 è il codice di sub con la
condizione greater then codificata nel campo Cond

L’istruzione viene eseguita solo se in quel momento
CPSR contiene la medesima condizione, altrimenti
l’istruzione non viene eseguita

E’ un aspetto caratteristico di questa architettura
57
Algoritmo di Euclide per il MCD
58
Macchine convenzionali
MCD
MIN
cmp
beq
blt
sub
b
sub
b
r0,r1
FINE
MIN
r0,r0,r1
MCD
r1,r1,r0
MCD
;raggiunta la fine?
; if r0 > r1 salta
;r0 <- r0-r1
;altro giro
;r1 <- r1-r0
FINE
59
ARM
MCD

cmp r0,r1
subgt r0,r0,r1
sublt r1,r1,r0
bne MCD
;if r0 > r1
;then r0 <- r0-r1
;else r1 <- r1-r0
;raggiunta la fine?
Consente un codice molto più compatto
60
La Pipeline
61
Organizzazione (ARM7TDMI)
(v4)
62
La pipeline

A tre stadi (v3)

Nelle versioni correnti gli stadi sono molti di più
63
Con una variazione

Le istruzioni che fanno accesso alla memoria richiedono
4 cicli


L’istruzione seguente ha un stallo
Il data transfer è in conflitto (strutturale) con il fetch
64
Con una variazione

Le istruzioni che fanno accesso alla memoria richiedono
4 cicli


L’istruzione seguente ha un stallo
Il data transfer è in conflitto (strutturale) con il fetch
65
C’è molto di più (Esempio ARM1156T2-S)

Architettura v6. Repertorio ARM e Thumb 2, Istruzioni
SIMD su 16-bit o 8-bit registri da 32-bit
Cortex A5 ha sostanzialmente
la stessa pipeline
66
Coprocessori
67
Coprocessori

Meccanismo per estendere il repertorio di istruzioni



Il repertorio di istruzioni del coprocessore è disgiunto
rispetto a quello della CPU
In presenza di un codice di istruzione eseguibile da un
coprocessore si instaura un meccanismo che porta il
coprocessore a eseguire l’istruzione


FPU, DSP, ecc. realizzati come coprocessori
Se il coprocessore non è presente si ha eccezione (undefined),
che può essere eventualmente usata per emulare un
coprocessore
Occorre un protocollo di interazione
68
Coprocessore ARM

Tipicamente un coprocessore contiene





Una pipeline istruzioni (pipeline follower)
La logica di decodifica delle istruzioni
La logica di handshake
Un banco di registri
La specifica logica di elaborazione
69
Hand-shaking

Il coprocessore osserva le istruzioni di cui la CPU fa il
fetch e mantiene una pipeline sincronizzata con quella
della CPU


Se in fase di decodifica vede un’istruzione che può eseguire
(deve essere nel suo repertorio e contenere codificato lo stesso
ID del processore) asserisce CPA (basso)
La CPU risponde asserendo CPnI (basso) abilitando


Se non risponde il coprocessore non deve eseguire
Il coprocessore asserisce CPB (basso) quando può trattare
l’istruzione
NB: l’istruzione ha un campo in cui è codificato l’ID del
coprocessore per il quale essa è intesa
70
ARM7TDMI
Hand-shaking
coprocessore
71
… Hand shaking
72
Assenza del coprocessore

Se CPA non viene portato basso significa assenza di
qualunque coprocessore


Si genera un’eccezione di istruzione non definita
Mentre CPA è basso anche CPB deve passare basso a
indicare che il coprocessore è libero
73
… Hand shaking
74
Tre classi di istruzione per il coprocessore

Data processing instructions.


Load-store instructions


Eseguite direttamente dal coprocessore
Trasferiscono dati tra registri del coprocessore e memoria. In
questo caso la CPU avvia l’inizio del trasferimento ponendo
l’indirizzo di memoria sul bus; il processore è responsabile della
continuazione dell’operazione leggendo le parole richieste (la
CPU non conosce le dimensioni dei registri del coprocessore)
Register transfer instructions

Trasferiscono dati tra registri del coprocessore e registri della
CPU; in questo caso vengono sempre trasferite parole di 32 bit
75
Coprocessori ID riservati
76
Conclusioni


Architettura semplice, ma potente
ECC.
77