Architettura ARM - STLAB · 5 Letteratura Su ARM esiste un’ampia letteratura Su wikipedia si...
Transcript of Architettura ARM - STLAB · 5 Letteratura Su ARM esiste un’ampia letteratura Su wikipedia si...
1
Architettura ARM (Advanced Risc Machines)
G. Bucci(2011)
Rev 04/06/2013
2
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
3
Per dare un’idea
Quella sotto è pubblicità da un sito ARM (giugno 2011)
4
Siamo circondati !
5
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/08- leonidr.pdf si trova un articolo che descrive in modo sintetico e leggibile l’architettura ARM
6
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
7
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à
8
Famiglie, versione, dispositivo
La denominazione è un po’ confusa
………Seguono altre famiglie e versioni
Attualmente la versione è la v7
9
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
10
Lo stato attuale
11
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.
12
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
13
Licenze
Perpetua
Diritto di usare la tecnologia ARM (progetto e produzione) indefinitamente
A termine
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
14
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
15
Architettura ARM
16
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)
17
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
18
…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)
In certe situazioni (p.e., risposta alle eccezioni) in cui, se la macchina è in modo Thumb, essa passa automaticamente al modo ARM
Minor numero di registri
Col Thumb2 le istruzioni ARM e Thumb sono liberamente mescolabili
Estensione Jazelle
Esecuzione diretta del byte code dei programmi java.
Interfaccia di debug
Collegamento diretto alla CPU di un apparato di debugging
Altro…. (multimedia, SIMD ….)
19
Stati del processore
20
Modello di programmazione
21
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
22
PC è un registro come un altro…
L’istruzione BL (Branch and Link) serve come chiamata di subroutine
Salva l’indirizzo di ritorno in r14 (lr)
Il ritorno dalla routine si fa copiando r14 in r15:
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)
23
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
25
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.
26
Eccezioni
Nella terminologia ARM sono chiamate così le interruzioni esterne, le eccezioni classiche e le
interruzioni software
27
Eccezioni
28
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
29
Vettori di interruzione
30
Vettori di interruzione
31
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
32
Eccezione software
33
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 r0, [lr, #-4] ;r0 <- Codice della SWI chiamanteBIC r0,r0,#0xff000000 ; isolamento #funzione
Deve seguire un salto attraverso un tabella contenente gli indirizzi delle funzioni
BIC sta per Bit Clear
35
Ritorno dalle eccezioni
Per tornare al programma interrotto, l’exception handler
Ripristina CPSR da SPSR_m (attenzione: riabilita !!!)
Ripristina PC da LR_m
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
36
PC salvato/ritorno
p Ecc PC Salvato Ritorno
1 Reset --- ---2 Data Abort r14_abt = PC+8 SUBS PC,r14_abt,#83 FIQ r14_fiq = PC+4 SUBS PC,r14_fiq,#44 IRQ r14_irq = PC+4 SUBS PC,r14_irq,#45 Prefetch Abort r14_abt = PC+4 SUBS PC,r14_abt,#46 SWI r14_svc = PC+4 MOVS PC,r14_svc6 Undefined instr r14_und = PC+4 MOVS PC,r14_und
Qui PC indica il PC dell’istruzione che determina l’eccezione
p è la priorità (predefinita) delle differenti eccezioni
37
PC salvato/ritorno
p Ecc PC Salvato Ritorno
1 Reset --- ---2 Data Abort r14_abt = PC+8 SUBS PC,r14_abt,#83 FIQ r14_fiq = PC+4 SUBS PC,r14_fiq,#44 IRQ r14_irq = PC+4 SUBS PC,r14_irq,#45 Prefetch Abort r14_abt = PC+4 SUBS PC,r14_abt,#46 SWI r14_svc = PC+4 MOVS PC,r14_svc6 Undefined instr r14_und = PC+4 MOVS PC,r14_und
Viene salvato il PC dell’istruzione successiva
38
PC salvato/ritorno
p Ecc PC Salvato Ritorno
1 Reset --- ---2 Data Abort r14_abt = PC+8 SUBS PC,r14_abt,#83 FIQ r14_fiq = PC+4 SUBS PC,r14_fiq,#44 IRQ r14_irq = PC+4 SUBS PC,r14_irq,#45 Prefetch Abort r14_abt = PC+4 SUBS PC,r14_abt,#46 SWI r14_svc = PC+4 MOVS PC,r14_svc6 Undefined instr r14_und = PC+4 MOVS PC,r14_und
Quando l’interruzione viene servita il PC è stato incrementato di 4 rispetto all’ultima istruzione completata, per questo occorre riportarlo indietro
39
PC salvato/ritorno
p Ecc PC Salvato Ritorno
1 Reset --- ---2 Data Abort r14_abt = PC+8 SUBS PC,r14_abt,#83 FIQ r14_fiq = PC+4 SUBS PC,r14_fiq,#44 IRQ r14_irq = PC+4 SUBS PC,r14_irq,#45 Prefetch Abort r14_abt = PC+4 SUBS PC,r14_abt,#46 SWI r14_svc = PC+4 MOVS PC,r14_svc6 Undefined instr r14_und = PC+4 MOVS PC,r14_und
Data Abort si manifesta solo quando l’istruzione è in fondo alla pipeline e PC è già stato incrementato 2 volte
40
Interruzioni esterne
42
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
43
..Una alla volta per carità
1. Salvare i registri che verranno toccati2. Identificare la specifica interruzione e saltare al ramo
corrispondente3. Ripristinare i registri e CPSR4. 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)
44
..Una alla volta per carità
1. Salvare i registri che verranno toccati2. Identificare la specifica interruzione e saltare al ramo
corrispondente3. Ripristinare i registri e CPSR4. 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
45
..Una alla volta per carità
1. Salvare i registri che verranno toccati2. Identificare la specifica interruzione e saltare al ramo
corrispondente3. Ripristinare i registri e CPSR4. 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 !!
46
..l’insidia
1. Salvare i registri che verranno toccati2. Identificare la specifica interruzione e saltare al ramo
corrispondente3. Ripristinare i registri e CPSR4. 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)
47
Per inciso (sviluppo stack)
In suIn giù
48
Schema per le interruzioni rientranti
Sull’interruzione occorre:1. Salvare l’indirizzo di ritorno sullo stack (di modo irq)2. Salvare i registri che verranno manipolati e SPSR_irq3. Azzerare la richiesta di interruzione4 . Riabilitare il sistema di interruzione (bit I di CPSR)5. …. Quel che c’è da fare6 . Disabilitare il sistema di interruzione7. Ripristinare i registri e SPSR_irq e tornare all’indirizzo salvato
Ma le cose non sono così
facili
49
Garantire il ristabilirsi dello stato
1. Salvare l’indirizzo di ritorno sullo stack2. Salvare i registri che verranno manipolati e SPSR_irq3. Azzerare la richiesta di interruzione4 . Riabilitare il sistema di interruzione 5. …. Quel che c’è da fare6. Disabilitare il sistema di interruzione7. 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)
50
NON basta: c’è ancora un problema
1. Salvare l’indirizzo di ritorno sullo stack2. Salvare i registri che verranno manipolati e SPSR_irq3. Azzerare la richiesta di interruzione4 . Riabilitare il sistema di interruzione 5. …. Quel che c’è da fare6 . Disabilitare il sistema di interruzione7. 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 )
51
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 cona) Passare a User mode b) Salvare i registri di User modec) Riabilitare il sistema di interruzione d) Chiamare la subroutine (quel che c’è da fare)e) Al ritorno dalla subroutine rimettere i registri di User modef) Tornare a IRQ mode disabilitando il sistema di interruzione
52
….Soluzione del problema del BL
Sostituire i punti da 4 a 6 cona) Passare a User mode b) Salvare i registri di User modec) Riabilitare il sistema di interruzione d) Chiamare la subroutine (quel che c’è da fare)e) Al ritorno dalla subroutine rimettere i registri di User modef) 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
53
…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”
54
Formato istruzioni
55
Formato Istruzioni
56
Esempio
57
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
58
Algoritmo di Euclide per il MCD
59
Macchine convenzionali
MCD cmp r0,r1 ;raggiunta la fine?beq FINEblt MIN ; if r0 > r1 saltasub r0,r0,r1 ;r0 <- r0-r1b MCD ;altro giro
MIN sub r1,r1,r0 ;r1 <- r1-r0b MCD
FINE
60
ARM
MCD cmp r0,r1 ;if r0 > r1subgt r0,r0,r1 ;then r0 <- r0-r1sublt r1,r1,r0 ;else r1 <- r1-r0bne MCD ;raggiunta la fine?
Consente un codice molto più compatto
61
La Pipeline
62
Organizzazione (ARM7TDMI) (v4)
63
La pipeline
A tre stadi (v3)
Nelle versioni correnti gli stadi sono molti di più
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
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
66
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
67
Coprocessori
68
Coprocessori
Meccanismo per estendere il repertorio di istruzioni
FPU, DSP, ecc. realizzati come coprocessori
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
Se il coprocessore non è presente si ha eccezione (undefined), che può essere eventualmente usata per emulare un coprocessore
Occorre un protocollo di interazione
69
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
70
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
71
ARM7TDMI
Hand-shaking coprocessore
72
… Hand shaking
73
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
74
… Hand shaking
75
Tre classi di istruzione per il coprocessore
Data processing instructions.
Eseguite direttamente dal coprocessore
Load-store instructions
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
76
Coprocessori ID riservati
77
Conclusioni
Architettura semplice, ma potente
ECC.