Architettura ARM - STLAB · 5 Letteratura Su ARM esiste un’ampia letteratura Su wikipedia si...

74
1 Architettura ARM (Advanced Risc Machines) G. Bucci (2011) Rev 04/06/2013

Transcript of Architettura ARM - STLAB · 5 Letteratura Su ARM esiste un’ampia letteratura Su wikipedia si...

Page 1: Architettura ARM - STLAB · 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

1

Architettura ARM (Advanced Risc Machines)

G. Bucci(2011)

Rev 04/06/2013

Page 2: Architettura ARM - STLAB · 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

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

Page 3: Architettura ARM - STLAB · 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

3

Per dare un’idea

Quella sotto è pubblicità da un sito ARM (giugno 2011)

Page 4: Architettura ARM - STLAB · 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

4

Siamo circondati !

Page 5: Architettura ARM - STLAB · 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

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

Page 6: Architettura ARM - STLAB · 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

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

Page 7: Architettura ARM - STLAB · 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

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à

Page 8: Architettura ARM - STLAB · 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

8

Famiglie, versione, dispositivo

La denominazione è un po’ confusa

………Seguono altre famiglie e versioni

Attualmente la versione è la v7

Page 9: Architettura ARM - STLAB · 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

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

Page 10: Architettura ARM - STLAB · 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

10

Lo stato attuale

Page 11: Architettura ARM - STLAB · 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

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.

Page 12: Architettura ARM - STLAB · 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

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

Page 13: Architettura ARM - STLAB · 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

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

Page 14: Architettura ARM - STLAB · 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

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

Page 15: Architettura ARM - STLAB · 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

15

Architettura ARM

Page 16: Architettura ARM - STLAB · 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

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)

Page 17: Architettura ARM - STLAB · 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

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

Page 18: Architettura ARM - STLAB · 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

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 ….)

Page 19: Architettura ARM - STLAB · 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

19

Stati del processore

Page 20: Architettura ARM - STLAB · 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

20

Modello di programmazione

Page 21: Architettura ARM - STLAB · 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

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

Page 22: Architettura ARM - STLAB · 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

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)

Page 23: Architettura ARM - STLAB · 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

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

Page 24: Architettura ARM - STLAB · 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

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.

Page 25: Architettura ARM - STLAB · 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

26

Eccezioni

Nella terminologia ARM sono chiamate così le interruzioni esterne, le eccezioni classiche e le

interruzioni software

Page 26: Architettura ARM - STLAB · 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

27

Eccezioni

Page 27: Architettura ARM - STLAB · 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

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

Page 28: Architettura ARM - STLAB · 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

29

Vettori di interruzione

Page 29: Architettura ARM - STLAB · 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

30

Vettori di interruzione

Page 30: Architettura ARM - STLAB · 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

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

Page 31: Architettura ARM - STLAB · 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

32

Eccezione software

Page 32: Architettura ARM - STLAB · 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

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

Page 33: Architettura ARM - STLAB · 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

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

Page 34: Architettura ARM - STLAB · 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

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

Page 35: Architettura ARM - STLAB · 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

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

Page 36: Architettura ARM - STLAB · 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

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

Page 37: Architettura ARM - STLAB · 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

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

Page 38: Architettura ARM - STLAB · 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

40

Interruzioni esterne

Page 39: Architettura ARM - STLAB · 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

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

Page 40: Architettura ARM - STLAB · 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

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)

Page 41: Architettura ARM - STLAB · 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

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

Page 42: Architettura ARM - STLAB · 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

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 !!

Page 43: Architettura ARM - STLAB · 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

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)

Page 44: Architettura ARM - STLAB · 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

47

Per inciso (sviluppo stack)

In suIn giù

Page 45: Architettura ARM - STLAB · 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

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

Page 46: Architettura ARM - STLAB · 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

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)

Page 47: Architettura ARM - STLAB · 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

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 )

Page 48: Architettura ARM - STLAB · 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

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

Page 49: Architettura ARM - STLAB · 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

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

Page 50: Architettura ARM - STLAB · 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

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”

Page 51: Architettura ARM - STLAB · 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

54

Formato istruzioni

Page 52: Architettura ARM - STLAB · 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

55

Formato Istruzioni

Page 53: Architettura ARM - STLAB · 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

56

Esempio

Page 54: Architettura ARM - STLAB · 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

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

Page 55: Architettura ARM - STLAB · 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

58

Algoritmo di Euclide per il MCD

Page 56: Architettura ARM - STLAB · 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

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

Page 57: Architettura ARM - STLAB · 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

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

Page 58: Architettura ARM - STLAB · 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

61

La Pipeline

Page 59: Architettura ARM - STLAB · 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

62

Organizzazione (ARM7TDMI) (v4)

Page 60: Architettura ARM - STLAB · 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

63

La pipeline

A tre stadi (v3)

Nelle versioni correnti gli stadi sono molti di più

Page 61: Architettura ARM - STLAB · 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

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

Page 62: Architettura ARM - STLAB · 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

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

Page 63: Architettura ARM - STLAB · 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

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

Page 64: Architettura ARM - STLAB · 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

67

Coprocessori

Page 65: Architettura ARM - STLAB · 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

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

Page 66: Architettura ARM - STLAB · 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

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

Page 67: Architettura ARM - STLAB · 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

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

Page 68: Architettura ARM - STLAB · 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

71

ARM7TDMI

Hand-shaking coprocessore

Page 69: Architettura ARM - STLAB · 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

72

… Hand shaking

Page 70: Architettura ARM - STLAB · 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

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

Page 71: Architettura ARM - STLAB · 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

74

… Hand shaking

Page 72: Architettura ARM - STLAB · 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

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

Page 73: Architettura ARM - STLAB · 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

76

Coprocessori ID riservati

Page 74: Architettura ARM - STLAB · 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

77

Conclusioni

Architettura semplice, ma potente

ECC.