Introduzione ad ARM e al processore S3C2440

Documenti analoghi
ARM: le istruzioni assembly

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Lezione E3. Architettura ARM - I. Sistemi embedded e real-time

Microelettronica. Architettura del processore ARM. Stefano Salvatori. Università degli Studi Roma Tre. Microelettronica

Richiami sull architettura del processore MIPS a 32 bit

Sommario. Premessa Architettura ARM Programmer's model (ARM7) Sistemi di sviluppo. S. Salvatori - Microelettronica aprile 2016 (13 di 45)

PXA255: concetti avanzati

Università degli Studi di Cassino

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

FONDAMENTI DI INFORMATICA Lezione n. 11

Calcolatori Elettronici

ARM PROCESSORS FAMILY

Architettura dei calcolatori e sistemi operativi. Il processore Capitolo 4 P&H

Architettura di una CPU

Architettura hardware

In realtà, non un solo microprocessore, ma un intera famiglia, dalle CPU più semplici con una sola pipeline a CPU molto complesse per applicazioni ad

Sistemi e Tecnologie per l'automazione LS. HW per elaborazione digitale in automazione: Microcontrollori e DSP

Introduzione. Caratteristiche generali. Sistemi e Tecnologie per l'automazione LS. HW per elaborazione digitale in automazione: Microcontrollori e DSP

Accesso a memoria. Accesso a memoria. Accesso a memoria. Modalità di indirizzamento. Lezione 5 e 6. Architettura degli Elaboratori A.

Il Processore: l unità di controllo

Metodi di indirizzamento

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Linguaggio Assembly e linguaggio macchina

Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA

Linguaggio Assembly e linguaggio macchina

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Componenti di un processore

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Il linguaggio assembly

Architettura di tipo registro-registro (load/store)

Architettura dei computer

Motivazioni. Assembly

Laboratorio di Architettura degli Elaboratori

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Architettura del Set di Istruzioni (ISA)

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Esempio di moltiplicazione come somma e spostamento

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico pagina 1

Lecture 2: Prime Istruzioni

Calcolatori Elettronici Parte VII: il Livello delle Istruzioni Macchina

Programmazione dello Z80

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Il Processore. Informatica di Base -- R.Gaeta 27

La macchina programmata Instruction Set Architecture (1)

Lezione4: MIPS e Istruzioni (1 Parte)

Architettura ARM. 1 Introduzione 1 INTRODUZIONE 1

ARCHITETTURA DELLE CPU come ARCHITETTURA DEL SET DI ISTRUZIONI

Lezione E12. Sistemi operativi open-source, embedded e real-time

Modi di indirizzamento

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Componenti e connessioni. Capitolo 3

Esame di INFORMATICA Lezione 4

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

Architettura dei calcolatori

Nel microprocessore 8086 abbiamo una gran quantità di registri

Architettura dei calcolatori. Architettura dei calcolatori. Cos'è un computer?

Architettura degli elaboratori (A)

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003

DEFINIZIONE. particolare l'unità di elaborazione centrale è una tipologia di

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Uso dei metodi di indirizzamento

Modi di indirizzamento del processore MC68000 (parte prima)

Calcolatori Elettronici

Introduzione alle architetture

Macchina di von Neumann

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

ARCHITETTURA DEL MICROPROCESSORE INTEL 8086 (iapx86/10)

Linguaggio Assembly. Architettura di riferimento Formato istruzioni Classi di istruzioni Modalità di indirizzamento Direttive Codice macchina

Cenni ad Assembly Intel

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Architettura dei calcolatori

Transcript:

03.a Introduzione ad ARM e al processore S3C2440 C. Fantozzi, A. Gardich (revisione di S. Congiu, M.Moro) Che cosa è ARM? ARM = Advanced RISC Machine 1 ARM Ltd non produce microprocessori: progetta e vende proprietà intellettuale ARM è una architettura: insieme dei registri e delle istruzioni disponibili modi d indirizzamento gestione delle interruzioni Esistono molte versioni dell architettura, e molti processori per versione

ARM nella vita quotidiana: esempi 2 Nintendo DSi (un ARM7 e un ARM9) Netgear WGR614 (Marvell ARM9) Apple iphone (ARM11) Molte calcolatrici e palmari Architettura ARM: versioni Sono state definite 7 versioni (da 1 a 7) del set di istruzioni ARM. 3 Per ogni versione esistono varianti, identificate da lettere: 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 ARM: famiglie Le famiglie di processori ARM attualmente più diffuse sono: 4 FAMIGLIA ARM7 ARM9 ARM9E ARM10E XScale ARM11 Cortex VERSIONE CORE ARMv3 ARMv4T ARMv5TE ARMv5TE ARMv5TE ARMv6 ARMv7-x (anche ARMv6-M) La famiglia Cortex Presentata nel 2005, si caratterizza per essere costituita da un insieme di unità funzionali collegabili tra loro Uno specifico processore ne può realizzare un sottoinsieme serie A (application) è quella più completa (computer, smartphone, ecc.) serie R (realtime), floating point opzionale, cache configurabile, MMU più semplice serie M (microcontroller) è quella più semplice, cache assente e MMU opzionale Le diverse configurazioni possono essere a singolo core o multicore Alcune caratteristiche specifiche dell architettura v7 unità NEON per operazioni SIMD su 64 o 128 bit unità floating point con più registri e nuove operazioni set di istruzioni Thumb per accelerare l esecuzione di macchine virtuali (es. JVM) modalità di esecuzione sicura (TrustZone) 5

Cortex 6 La famiglia Cortex 7

Samsung S3C24xx Application Processors 8 Applicazioni Mobile Computing Portable Network Devices Portable media players Edutainment toys E-book readers Mobile Communication Smartphones Obiettivi di progetto Insieme completo di periferiche on-chip Elevate prestazioni Basso consumo Rapporto prezzo/prestazioni S3C2440: specifiche tecniche 9 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. 14x14 mm 289-pin FBGA (Fine Ball Grid Array) Processo produttivo: 130 nm Frequenza: 533 MHz max Bus memoria: 100 MHz max Tensione di alimentazione 1.2V Consumo: 0,368W @ 400 MHz

S3C2440: schema a blocchi 10 ARMv4: caratteristiche 11 L architettura 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) 2 32 byte di memoria indirizzabili (4GB), ma S3C2440 supporta max 1 GB (8 banchi da 128 MB)

ARMv4: caratteristiche RISC 12 L architettura 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 dell istruzione ARMv4: altre caratteristiche 13 Controllo sia dell ALU 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

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 d accesso 14 I registri: panoramica 15

I registri R0-R13: registri di uso generale SP: stack pointer (R13) LR: link register (R14) Memorizza l indirizzo di ritorno da subroutine PC: program counter (R15) Punta all istruzione da eseguire 16 CPSR: Current Program Status Register Contiene i bit di stato SPSR: Saved Program Status Register Copia di CPSR prima del cambio di modo CPSR: bit utili Bit 0 4 (M): modo operativo (7 attualmente previsti) Bit 7 (I): interruzioni on/off (0/1) Bit 28 (V): indica errore di overflow (aritmetica con segno in complemento a 2) Bit 29 (C): indica il carry o riporto (overflow nell aritmetica senza segno) Bit 30 (Z): indica un risultato zero Bit 31 (N): indica un risultato negativo (aritmetica con segno in complemento a 2) Altri bit: Bit 5 (T): Thumb instruction set off/on (0/1) Bit 6 (F): fast IRQ on/off (0/1) Bit 7 (I): IRQ on/off (0/1) 17 Riservati

Big o Little Endian? 18 S3C2440 supporta tutte e 2 le modalità Il comportamento predefinito è little endian, secondo specifiche ARM Operazioni di I/O L I/O è di tipo memory mapped: i registri delle periferiche si trovano in locazioni di memoria predefinite 19 2 tipi di interruzioni: Normale Fast (vengono salvati meno registri) Hardware delle periferiche con accesso diretto alla memoria (DMA)

Classificazione delle istruzioni Accesso alla memoria Load / store tra memoria e registri 20 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 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 l op. destinazione, uno per l op. sorgente: MOV R2, R2, ASR #2 @ R2=R2/4 - altre istruzioni a 1 operando: ad es. le istruzioni di branch: B LAB2 21

Modifica dei bit di stato 22 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 dell istruzione: ADD R2, R0, R1 ADDS R2, R0, R1 @ non modifica NZCV @ modifica NZCV Non vale per le istruzioni di confronto! Istruzioni con condizione - 1 Aggiungendo specifici suffissi di condizione, l istruzione viene eseguita solo se i bit di condizione soddisfano quanto specificato 23 Esempi: MOVEQ R0, #0 poni R0=0 solo se Z=1 MOVNE R0, #0 esegui se Z=0 MOVGT R0, #0 esegui se Z=0 e N=V MOVLE R0, #0 esegui se Z=1 o N V MOVAL R0, #0 esegui sempre

Istruzioni con condizione - 2 Permettono di velocizzare il codice risparmiando salti condizionati mantenendo pieni i pipeline 24 CMP r0, #10 if (a > 10) return 0; MOVGT r0, #0 else return 1 MOVLE r0, #1 Nessun branch misprediction! Lista delle condizioni Estensione mnemonica Significato Flag di condizione Opcode [31:28] EQ Uguali Z=1 0000 NE Non uguali Z=0 0001 CS/HS Carry Attivato / Senza segno maggiore o uguale C=1 0010 CC/LO Carry Disattivato / Senza segno minore C=0 0011 MI Negativo N=1 0100 PL Positivo o Zero N=0 0101 VS Overflow V=1 0110 VC Non Overflow V=0 0111 HI Senza segno maggiore C=1 e Z=0 1000 LS Senza segno minore o uguale C=0 o Z=1 1001 GE Con segno maggiore o uguale N=V 1010 LT Con segno minore N!=V 1011 GT Con segno maggiore Z=0 e N=V 1100 LE Con segno minore o uguale Z=1 o N!=V 1101 AL Sempre (è il default) - 1110 NV Mai - 1111 25

I modi di indirizzamento Ogni categoria di istruzioni ha i propri: ci sono 4 classi di modi di indirizzamento. 26 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) 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 27 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

Istruzioni di elaborazione dati 28 3 indirizzi: <opcode>{<cond>}{s} <Rd>, <Rn>, <shifter_operand> <cond>: stabilisce l esecuzione condizionata S: stabilisce se modifica i bit di condizione <Rd>: destinazione <Rn>: primo operando <shifter_operand>: secondo operando esempio: addges R4, R3, R2 @ R4 R3+R2 Modo 1 (indirizz( 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 29

<shifter_operand>: indirizzamento immediato Il campo dell istruzione contiene il valore su cui operare sintassi: #<immediato> 30 esempio: add R3, R3, #1 @ R3 R3+1 12 bit a disposizione per l operando 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 <shifter_operand>: indirizzamento immediato 31 28 24 21 19 16 15 12 11 8 7 0 cond 0 0 1 opcode S Rn Rd rotate immed_8 31 0x00 c 0xFF 0 r 15 0 2r 30 #<immediato>=c>> rot 2r r c immediato valido: #0x104 (c=0x41, r=15) immediato non valido: #0x102

<shifter_operand>: indirizzamento di registro 32 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 add R3, R1, R2, ASR R5 @ R3 R1+R2/2 R5 <shifter_operand>: indirizzamento di registro 33 31 28 24 21 19 16 15 12 11 7 5 3 0 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 cond 0 0 0 opcode S Rn Rd Rs 0 sop 1 Rm codifica di Rm, <sop> Rs <sop>: 00 LSL 01 LSR 10 ASR 11 ROR (RRX = ROR #0)

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

Modo 2: nessun offset Corrisponde a quello che nel PD32 è l indirizzamento indiretto con registro. 36 Il valore dell operando è puntato da un registro Rn (cioè Rn contiene l indirizzo dell operando) sintassi: [Rn] esempio: ldr R1, [R0] @ R1 M 32 [R0] Modo 2: offset Offset immediato [Rn, #±<offset_12>] @ Rd M[Rn ± <offset_12>] 37 Offset da registro [Rn, ±Rm] @ Rd M[Rn ± Rm] Offset da registro scalato [Rn, ±Rm, <sop> #<shift_imm>] @ Rd M[Rn ± (Rm <sop> # <shift_imm>)]

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] 38 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>) 39

Pre/post post-increm.. con registro scalato L offset contenuto nel registro Rm può essere shiftato di un valore immediato di 5 bit sintassi: Pre-incremento Post-incremento 40 [Rn, ±Rm, LSL #num]! [Rn, ±Rm, LSR #num]! [Rn, ±Rm, ASR #num]! [Rn, ±Rm, ROR #num]! [Rn, ±Rm, RRX]! esempio: ldr R1, [R0], -R2, ASR #2 [Rn], ±Rm, LSL #num [Rn], ±Rm, LSR #num [Rn], ±Rm, ASR #num [Rn], ±Rm, ROR #num [Rn], ±Rm, RRX @ R1 M 32 [R0]; R0 R0-(R2/4) Indirizzamento auto-relativo Si ottiene usando il registro R15 (PC) nell indirizzamento indiretto con registro: esempi: ldr R1, [R15, -#8] ldr PC, [PC, R0, LSL #2] @ R1 M 32 [R15-8] @ PC M 32 [PC+R0*4] 41 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

Modo 2: esempi ldr R2, [R0] ldr R1, [R0,#4] ldr R1, [R0], #8 @ R2 M 32 [R0] @ R1 M 32 [R0+4] @ R1 M 32 [R0] @ R0 R0+8 42 ldr PC, [PC, R0, LSL #2]@ PC M 32 [PC+R0*4] strb R7, [R9], #1 @ M 8 [R9] R7 B @ R9 R9+1 str R5, [R0,#4]! @ R0 R0+4 @ M 32 [R0] R5 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 43

Modo 2 e modo 3: tabella riassuntiva 44 W LDR Modo 2 STR Modo 2 SH Modo 3 - H Modo 3 Modo 3 SB Modo 3 - B Modo 2 Modo 2 NOTA BENE: non ha senso parlare di STORE per quantità con segno, perché non c è alcuna estensione del segno da effettuare Modo 4 (per load/store multiplo) - 1 sintassi: LDM STM <addressing_mode4> Rn{!}, <registers> <addressing_mode4> può essere: IA increment after start_addr = Rn ; end_addr = Rn + #regs*4-4 IB increment before start_addr = Rn + 4 ; end_addr = Rn + #regs*4 DA decrement after start_addr = Rn - #regs*4 + 4 ; end_addr = Rn DB decrement before start_addr = Rn - #regs*4 ; end_addr = Rn 4 (#regs è il numero di registri indicati in <registers>) 45! provoca l'aggiornamento del registro Rn: al suo contenuto viene sommata o sottratta la quantità #regs*4

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} @ salva sullo stack i registri @ da R0 a R7 LDMIA SP!, {R0-R7} @ ricarica R0-R7 salvati @ dall istruzione precedente LDMDA R9, {R1,R3-R5} @ carica i registri R1, R3-R5 @ da M 32 [R9-12].. M 32 [R9] Fine 03.a Introduzione ad ARM e al processore S3C2440