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