Sei sulla pagina 1di 23

03.

Introduzione ad ARM e al processore S3C2440


C. Fantozzi, A. Gardich
(revisione di S. Congiu)

Che cosa ARM?


ARM = Advanced RISC Machine

43

ARM Ltd non produce microprocessori: progetta e vende propriet intellettuale ARM una architettura:
insieme dei registri e delle istruzioni disponibili modi dindirizzamento gestione delle interruzioni

Esistono molte versioni dellarchitettura, e molti processori per versione


Architettura degli Elaboratori 2009

ARM nella vita quotidiana: esempi


Nintendo DSi (un ARM7 e un ARM9) Netgear WGR614 (Marvell ARM9) Apple iPhone (ARM11) Molte calcolatrici e palmari

43

Architettura degli Elaboratori

2009

Architettura ARM: versioni


Sono state definite 7 versioni (da 1 a 7) del set di istruzioni ARM. Per ogni versione esistono varianti, identificate da lettere:

43

T (Thumb: istruzioni da 16 bit) M (Multiply: con prodotto da 64 bit) E (Enhanced: con istruzioni DSP per applicazioni multimediali

Le pi diffuse nei sistemi embedded portatili (smartphones, Personal Digital Assistants, ) sono le versioni 4 e 5.

Architettura degli Elaboratori

2009

Architettura ARM: famiglie


Le famiglie di processori ARM attualmente pi diffuse sono: FAMIGLIA ARM7 ARM9 ARM9E ARM10E XScale ARM11 VERSIONE CORE ARMv3 ARMv4T ARMv5TE ARMv5TE ARMv5TE ARMv6

43

La famiglia S3C24xx (Samsung), cui appartiene il processore S3C2440, conforme ad ARMv4T


Core ARM920T (ARM9TDMI + cache) T = Thumb instruction set: opcode a 16 bit per risparmiare spazio
Architettura degli Elaboratori 2009

Samsung S3C24xx Application Processors


Applicazioni
Mobile Computing
Portable Network Devices Portable media players Edutainment toys E-book readers

Obiettivi di progetto
Insieme completo di periferiche on-chip Elevate prestazioni Basso consumo Rapporto prezzo/prestazioni
43

Mobile Communication
Smartphones

Architettura degli Elaboratori

2009

S3C2440: specifiche tecniche


Processore RISC a 32 bit Architettura ARMv4T
Core ARM 920T; thumb i.s. Memory Management Unit Cache (instruction & data)

Nessun HW floating point Funzionalit integrate:


ADC a 10 bit, 8 canali; 3 porte seriali; USB host & device; controller LCD, touch screen; Interfacce per sensori CMOS, schede di memoria, audio, ecc. ecc.
Architettura degli Elaboratori

14x14 mm 289-pin FBGA (Fine Ball Grid Array) 43 Processo produttivo: 130 nm Frequenza: 533 MHz max Bus memoria: 100 MHz max Tensione di alimentazione 1.2V Consumo: 0,368W @ 400 MHz

2009

S3C2440: schema a blocchi

43

Architettura degli Elaboratori

2009

ARMv4: caratteristiche
Larchitettura ARMv4 a 32 bit word=32 bit (in memoria allineati ad indirizzi multipli di 4) halfword=16 bit (in memoria allineati ad indirizzi multipli di 2) byte =8 bit (singolarmente indirizzabili in memoria)
232 byte di memoria indirizzabili (4GB), ma S3C2440 supporta max 1 GB (8 banchi da 128 MB)
Architettura degli Elaboratori

43

2009

ARMv4: caratteristiche RISC


Larchitettura ARMv4 di tipo RISC Numero elevato di registri (37 in tutto) Istruzioni con lunghezza fissa di 32 bit Le parole di estensione non esistono, Architettura load/store: ad esclusione di load e store, tutte le istruzioni operano su registri Modi di indirizzamento semplici: tutti gli indirizzi di memoria nelle istruzioni load/store sono specificati da informazioni contenute in registri o nei campi dellistruzione
Architettura degli Elaboratori

43

2009

ARMv4: altre caratteristiche


Controllo sia dellALU sia dello shifter, con tutte le istruzioni di elaborazione-dati Modalit di indirizzamento auto-incrementanti e auto-decrementanti (efficienza nei loop) Esecuzione condizionata specificabile in tutte le istruzioni Istruzioni di load e store multipli (pi registri) Shift di n posizioni in un solo ciclo di clock Istruzioni a 3 operandi
Architettura degli Elaboratori

10

43

2009

Modi operativi
User (USR): modo utente FIQ (FIQ): gestione veloce interruzioni IRQ (IRQ): gestione interruzioni Supervisor (SVC): modo protetto Abort (ABT): per gestione memoria Undefined (UND): emulaz. coprocessori System (SYS): usa risorse di USR senza limitazioni daccesso

11

43

Architettura degli Elaboratori

2009

I registri: panoramica

12

43

Architettura degli Elaboratori

2009

I registri
R0-R13: registri di uso generale SP: stack pointer (R13) LR: link register (R14) PC: program counter (R15)
Punta allistruzione da eseguire

13

43

Memorizza lindirizzo di ritorno da subroutine

CPSR: Current Program Status Register


Contiene i bit di stato

SPSR: Saved Program Status Register


Copia di CPSR prima del cambio di modo
Architettura degli Elaboratori 2009

CPSR: bit utili


Bit 04 Bit 7 Bit 28 Bit 29 Bit 30 Bit 31 Altri bit: Bit 5 Bit 6 Bit 7 (M): modo operativo (7 attualmente previsti) (I): interruzioni on/off (0/1) (V): indica errore di overflow (aritmetica con segno in complemento a 2) (C): indica il carry o riporto (overflow nellaritmetica senza segno) (Z): indica un risultato zero (N): indica un risultato negativo (aritmetica con segno in complemento a 2) (T): Thumb instruction set off/on (0/1) (F): fast IRQ on/off (0/1) (I): IRQ on/off (0/1)

14

43

Riservati
Architettura degli Elaboratori 2009

Big o Little Endian?


S3C2440 supporta tutte e 2 le modalit Il comportamento predefinito little endian, secondo specifiche ARM

15

43

Architettura degli Elaboratori

2009

Operazioni di I/O
LI/O di tipo memory mapped: i registri delle periferiche si trovano in locazioni di memoria predefinite 2 tipi di interruzioni: Normale Fast (vengono salvati meno registri) Hardware delle periferiche con accesso diretto alla memoria (DMA)
Architettura degli Elaboratori

16

43

2009

Classificazione delle istruzioni


Accesso alla memoria Load / store tra memoria e registri Elaborazione di dati (data processing) Operazioni di movimento tra registri Operazioni aritmetico-logiche Operazioni di confronto Controllo di flusso Branch (=salto) con o senza condizione
Architettura degli Elaboratori

17

43

2009

Le istruzioni
ARMv4 prevede: - istruzioni di elaborazione dati a 3 operandi: uno (registro) per il risultato, due per gli operandi: SUB R2, R0, R1 @ R2=R0-R1 SUB R2, R0, R1, LSL #4 @ R2=R0-R1*16 - altre istruzioni a 2 operandi: uno per lop. destinazione, uno per lop. sorgente: MOV R2, R2, ASR #2 @ R2=R2/4 - altre istruzioni a 1 operando: ad es. le istruzioni di branch: B LAB2
Architettura degli Elaboratori

18

43

2009

Modifica dei bit di stato


Per default le istruzioni non modificano i bit di stato N,Z,C,V Per modificare i bit di stato si aggiunge il suffisso S al simbolo mnemonico dellistruzione:
ADD R2, R0, R1 ADDS R2, R0, R1 @ non modifica NZCV @ modifica NZCV

19

43

Non vale per le istruzioni di confronto!

Architettura degli Elaboratori

2009

Istruzioni con condizione - 1


Aggiungendo specifici suffissi di condizione, listruzione viene eseguita solo se i bit di condizione soddisfano quanto specificato Esempi:

20

43

MOVEQ R0, #0 MOVNE R0, #0 MOVGT R0, #0 MOVLE R0, #0 MOVAL R0, #0

poni R0=0 solo se Z=1 esegui se Z=0 esegui se Z=0 e N=V esegui se Z=1 o NV esegui sempre
2009

Architettura degli Elaboratori

Istruzioni con condizione - 2


Permettono di velocizzare il codice risparmiando salti condizionati mantenendo pieni i pipeline CMP r0, #10 MOVGT r0, #0 MOVLE r0, #1

21

43

if (a > 10) return 0; else return 1

Nessun branch misprediction!


Architettura degli Elaboratori 2009

Lista delle condizioni


Estensione mnemonica

22
Flag di condizione Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1 e Z=0 C=0 o Z=1 N=V N!=V Z=0 e N=V Z=1 o N!=V Opcode [31:28] 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Significato
Uguali Non uguali Carry Attivato / Senza segno maggiore o uguale Carry Disattivato / Senza segno minore Negativo Positivo o Zero Overflow Non Overflow Senza segno maggiore Senza segno minore o uguale Con segno maggiore o uguale Con segno minore Con segno maggiore Con segno minore o uguale Sempre ( il default) Mai

EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV

43

Architettura degli Elaboratori

2009

I modi di indirizzamento
Ogni categoria di istruzioni ha i propri: ci sono 4 classi di modi di indirizzamento. RISC: niente indirizzamento assoluto (non usa puntatori in memoria, ma solo nei registri) indirizzamento in memoria (indiretto con registro) solo per le istruzioni LDR (load) e STR (store)
Architettura degli Elaboratori

23

43

2009

Classi di indirizzamento
Modo 1: per istruzioni di elaborazione dati ADC, ADD, AND, BIC, CMN, CMP, EOR, MOV, MVN, ORR, RSB, RSC, SBC, SUB, TEQ, TST Modo 2: per Load&Store di word o unsigned byte LDR, LDRB, STR, STRB Modo 3: per L&S di halfword o signed byte LDRH, LDRSB, LDRSH, STRH Modo 4: per L&S di registri multipli LDMxx, STMxx
Architettura degli Elaboratori

24

43

2009

Istruzioni di elaborazione dati


3 indirizzi: <opcode>{<cond>}{S} <Rd>, <Rn>, <shifter_operand>
<cond>: stabilisce lesecuzione condizionata S: stabilisce se modifica i bit di condizione <Rd>: destinazione <Rn>: primo operando <shifter_operand>: secondo operando esempio:

25

43

addges R4, R3, R2

@ R4 R3+R2
2009

Architettura degli Elaboratori

Modo 1 (indirizz. per elaboraz. dati)


sintassi: <istruzione3op> Rd, Rn, <shifter_operand> <istruzione2op> Rd, <shifter_operand> <shifter_operand> pu essere: un valore immediato #<valore> un registro Rm un registro, dopo scorrimento specificato con: - un valore immediato Rm, <sop> #<shift_imm> - un registro Rm, <sop> Rs gli operatori <sop> disponibili sono: ASR, LSL, LSR, ROR, RRX
Architettura degli Elaboratori

26

43

2009

<shifter_operand>: indirizzamento immediato Il campo dellistruzione contiene il valore su cui operare sintassi: #<immediato> esempio:

27

43

add R3, R3, #1

@ R3 R3+1

12 bit a disposizione per loperando immediato, con la seguente struttura:


8 bit (bit c) definiscono un valore c (0 c 255); 4 bit (bit r) specificano una rotazione verso destra di 2r posizioni

Architettura degli Elaboratori

2009

<shifter_operand>: indirizzamento immediato


31 28 24 21 19 16 15 12 11 87 0

28

cond 0 0 1 opcode S

Rn

Rd

rotate

immed_8
43

0x00 c 0xFF 0 r 15 0 2r 30 #<immediato>=c>>rot2r

immediato valido: #0x104 (c=0x41, r=15) immediato non valido: #0x102


Architettura degli Elaboratori 2009

<shifter_operand>: indirizzamento di registro


Il valore su cui operare contenuto in un registro Rm Tale valore pu essere shiftato di una quantit: specificata in modo immediato (0..31: 5 bit) specificata da un altro registro (Rs): Rm, LSR #shift_imm oppure Rm, LSR Rs Rm, ASR #shift_imm oppure Rm, ASR Rs Rm, LSL #shift_imm oppure Rm, LSL Rs Rm, ROR #shift_imm oppure Rm, ROR Rs Rm, RRX esempi: add R3, R1, R2, LSL #2 @ R3 R1+R2*4

29

43

add R3, R1, R2, ASR R5

@ R3 R1+R2/2R5
2009

Architettura degli Elaboratori

<shifter_operand>: indirizzamento di registro


31 28 24 21 19 16 15 12 11 7 5 3 0

30

cond 0 0 0 opcode S

Rn

Rd

shift_imm sop 0

Rm

codifica di Rm, <sop> #shift_imm


31 28 24 21 19 16 15 12 11 7 5 3 0

43

cond

0 0 0 opcode S

Rn

Rd

Rs

0 sop 1

Rm

codifica di Rm, <sop> Rs <sop>: 00 01 10 11 LSL LSR ASR ROR (RRX = ROR #0)
2009

Architettura degli Elaboratori

Modo 1: esempi
mov R0, #0 add R3, R3, #1 cmp R7, #1000 bic R9, R8, #0xff00 mov R2, R0 add R4, R3, R2 mov R2, R0, LSL #2 add R9, R5, R5, LSL #3 sub R9, R5, R5, ASR #3 rsb R9, R5, R5, ASR #3 mov R5, R3, RRX mov R7, R4, ROR R3 @ @ @ @ @ @ @ @ @ @ @ @ @ @ R0 0 R3 R3+1 cc (R71000) R9 R8 and not 0xff00 R2 R0 R4 R3+R2 R2 R0*4 R9 R5+R5*8 = R5*9 R9 R5R5/8 R9 R5/8R5 R5 R3 ruotato esteso a destra di una posiz. R7 R4 ruotato a destra di R3 posizioni

31

43

Architettura degli Elaboratori

2009

Modo 2 (per Word o unsigned Byte)


sintassi: LDR|STR{B} Rd, <addressing_mode2> <addressing_mode2> un indirizzamento di registro con un eventuale: offset immediato offset da registro offset da registro scalato pre-incremento immediato pre-incremento da registro pre-incremento da registro scalato post-incremento immediato post-incremento da registro post-incremento da registro scalato
Architettura degli Elaboratori

32

43

2009

Modo 2: nessun offset


Corrisponde a quello che nel PD32 lindirizzamento indiretto con registro. Il valore delloperando puntato da un registro Rn (cio Rn contiene lindirizzo delloperando) sintassi: [Rn] esempio: ldr R1, [R0]
@ R1 M32[R0]

33

43

Architettura degli Elaboratori

2009

Modo 2: offset
Offset immediato [Rn, #<offset_12>] Offset da registro [Rn, Rm]

34

@ Rd M[Rn <offset_12>]

43

@ Rd M[Rn Rm]

Offset da registro scalato [Rn, Rm, <sop> #<shift_imm>]

@ Rd M[Rn (Rm <sop> # <shift_imm>)]


2009

Architettura degli Elaboratori

Modo 2: pre-incremento
Pre-incremento immediato [Rn, #<offset_12>]! @ Rn Rn <offset_12> @ Rd M[Rn] Pre-incremento da registro [Rn, Rm]! @ Rn Rn Rm @ Rd M[Rn] Pre-incremento da registro scalato [Rn, Rm, <sop> #<shift_imm>]! @ Rn Rn (Rm <sop> # <shift_imm>) @ Rd M[Rn]
Architettura degli Elaboratori

35

43

2009

Modo 2: post-incremento
Post-incremento immediato [Rn], #<offset_12> @ Rd M[Rn] @ Rn Rn <offset_12> Post-incremento da registro [Rn], Rm @ Rd M[Rn] @ Rn Rn Rm Post-incremento da registro scalato [Rn], Rm, <sop> #<shift_imm> @ Rd M[Rn] @ Rn Rn (Rm <sop> # <shift_imm>)
Architettura degli Elaboratori

36

43

2009

Pre/post-increm. con registro scalato


Loffset contenuto nel registro Rm pu essere shiftato di un valore immediato di 5 bit sintassi:

37

43

Pre-incremento
[Rn, [Rn, [Rn, [Rn, [Rn, Rm, Rm, Rm, Rm, Rm, LSL #num]! LSR #num]! ASR #num]! ROR #num]! RRX]!

Post-incremento
[Rn], [Rn], [Rn], [Rn], [Rn], Rm, Rm, Rm, Rm, Rm, LSL #num LSR #num ASR #num ROR #num RRX

esempio: ldr R1, [R0], -R2, ASR #2


Architettura degli Elaboratori

@ R1M32[R0]; R0R0-(R2/4)
2009

Indirizzamento auto-relativo
Si ottiene usando il registro R15 (PC) nellindirizzamento indiretto con registro:
esempi: ldr R1, [R15, -#8] @ R1 M32[R15-8] ldr PC, [PC, R0, LSL #2] @ PC M32[PC+R0*4]

38

43

Il valore di R15 usato PC_istruz.+8 o +12 a causa del prefetching


Lo shift specificato tramite un valore immediato: il valore di R15 usato PC_istruz.+8 Lo shift specificato tramite un registro: il valore di R15 usato PC_istruz.+12
Architettura degli Elaboratori 2009

Modo 2: esempi
ldr R2, [R0] ldr R1, [R0,#4] ldr R1, [R0], #8 @ R2 M32[R0] @ R1 M32[R0+4] @ R1 M32[R0] @ R0 R0+8

39

43

ldr PC, [PC, R0, LSL #2]@ PC M32[PC+R0*4] strb R7, [R9], #1 @ M8[R9] R7B @ R9 R9+1 @ R0 R0+4 @ M32[R0] R5
2009

str R5, [R0,#4]!

Architettura degli Elaboratori

Modo 3 (per HalfWord/signed Byte)


sintassi: STR|LDR[H] Rd, <addressing_mode3> LDR[SH|SB] Rd, <addressing_mode3> <addressing_mode3> pu essere: offset immediato offset da registro pre-incremento immediato pre-incremento da registro post-incremento immediato post-incremento da registro differenze rispetto al Modo 2: - non si possono scalare i registri - gli offset immediati sono a soli 8bit
Architettura degli Elaboratori

40

43

2009

Modo 2 e modo 3: tabella riassuntiva


W SH H SB B LDR Modo 2 Modo 3 Modo 3 Modo 3 Modo 2 STR Modo 2 Modo 3 Modo 2

41

43

NOTA BENE: non ha senso parlare di STORE per quantit con segno, perch non c alcuna estensione del segno da effettuare
Architettura degli Elaboratori 2009

Modo 4 (per load/store multiplo) - 1


sintassi: LDM|STM <addressing_mode4> Rn{!}, <registers>

42

<addressing_mode4> pu essere: IA increment after

43

IB increment before DA decrement after

start_addr = Rn ; end_addr = Rn + #regs*4 - 4 start_addr = Rn + 4 ; end_addr = Rn + #regs*4 start_addr = Rn - #regs*4 + 4 ; end_addr = Rn start_addr = Rn - #regs*4 ; end_addr = Rn 4 (#regs il numero di registri indicati in <registers>)

DB decrement before

! provoca l'aggiornamento del registro Rn: al suo contenuto

viene sommata o sottratta la quantit #regs*4

Architettura degli Elaboratori

2009

Modo 4 (per load/store multiplo) - 2


sintassi: LDM|STM <addressing_mode4> Rn{!}, <registers> <registers> la lista di registri da salvare/caricare, racchiusa tra parentesi graffe {} e con gli elementi separati da virgola.
esempi: STMDB SP!, {R0-R7} LDMIA SP!, {R0-R7} @ salva sullo stack i registri @ da R0 a R7 ricarica R0-R7 salvati dallistruzione precedente carica i registri R1, R3-R5 da M32[R9-12].. M32[R9]

43

43

@ @ LDMDA R9, {R1,R3-R5} @ @

Architettura degli Elaboratori

2009

Fine
03.a

Introduzione ad ARM e al processore S3C2440