Corso introduttivo di progettazione di sistemi embedded

Transcript

Corso introduttivo di progettazione di sistemi embedded
Progettazione di sistemi Embedded
Corso introduttivo di progettazione di sistemi embedded
A.S. 2013/2014
Caratteristiche della famiglia LPC2000
e del core ARM7TDMI
proff. Nicola Masarone e Stefano Salvatori
Eccetto dove diversamente specificato, i contenuti di questo documento sono rilasciati sotto Licenza Creative Commons Attribuzione 3.0 Italia.
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (1 di 32)
Sommario
●
●
Macchina basata su microprocessore
–
Architettura di Von Neumann
–
Elementi fondamentali di una CPU
Microntrollori della famiglia LPC2000
–
Processore ARM7TDMI
–
Memoria
–
Periferiche di sistema e d'utente
–
Pinout
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (2 di 32)
Sistemi programmabili
●
I sistemi elettronici a cui facciamo riferimento sono quelli
programmabili, nel senso che sono in grado di eseguire
un programma
FF..FF16
instructions
registers
address
data
processor
instructions
and data
memory
00..0016
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (3 di 32)
Architettura di Von Neumann
●
Dobbiamo ricordare l'architettura di una macchina di calcolo
automatica che segua lo schema di Von Neumann
processore
bus
memoria
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (4 di 32)
Microcontrollore
●
Un microcontrollore è un singolo chip in cui sono integrati tutti
(o quasi) gli elementi di una macchina di calcolo
–
Processore
–
Memoria
–
Periferiche
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (5 di 32)
SEGNALI DI
CONTROLLO
Elementi fondamentali di una CPU
PC
DECODER
MDR
REG
FUNZ
BUS INTERNO
MAR
BUS
ESTERNI
SR
...
IR
R0
R1
ALU
BANCO
DI
REGISTRI
Rn
REG
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (6 di 32)
LPC2000
●
Noi useremo un microcontrollore della famiglia LPC2000
di NXP (Philips) basato su ARM
–
Processore: ARM7TDMI
–
Memoria: flash (programma) + RAM
–
Periferiche (GPIO, I2C, SPI, UART, ADC, ...)
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (7 di 32)
LPC2000
●
Noi useremo un microcontrollore della famiglia LPC2000
di NXP (Philips) basato su ARM
–
Processore: ARM7TDMI
–
Memoria: flash (programma) + RAM
–
Periferiche (GPIO, I2C, SPI, UART, ADC, ...)
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (8 di 32)
ARM7TDMI-S
●
Thumb mode,
●
Debug support,
●
enhanced Multiplier,
●
embedded-ICE,
●
Synthesizable
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (9 di 32)
Datapath ARM7TDMI
A[31:0]
control
address register
●
Da evidenziare:
–
–
P
C
Moltiplicatore
incrementer
Barrel shifter
moltiplicatore
a 64 bit
PC
register
bank
instruction
decode
A
L
U
b
u
s
multiply
register
&
A
B
b
u
s
b
u
s
barrel
shifter
control
Shifter 2°
operando
ALU
data out register
data in register
D[31:0]
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (10 di 32)
Pipeline
●
Pipeline a 3 stadi
–
Fetch
–
Decode
–
Execute
per esempio:
0x4000 LDR PC, [PC, #4]
da cui: PC <- 0x400C e non 0x4004
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (11 di 32)
Programmer's model
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (12 di 32)
Current Program Status Register
●
Il CPSR contiene le flag che indicano il risultato
(negativo, zero, …) e il modo operativo in cui lavora il
processore
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (13 di 32)
Eccezioni
●
●
Ogni modo operativo è associato a un elemento del
vettore delle interruzioni;
Quando il processore cambia modo, PC assume il valore
indicato nel vettore.
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (14 di 32)
Architettura di tipo load & store
●
Tutte le istruzioni di elaborazione
possono lavorare solo sul contenuto
dei registri interni della CPU
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (15 di 32)
Esempio
●
●
Stralcio di codice C/C++:
int a, b, s, ;
...
s = a + b;
...
Codifica in assembly:
LDR
LDR
...
ADD
STR
...
r1, <addr.a> ; r1 ← mem[a]
r2, <addr.b> ; r1 ← mem[b]
r3, r2, r1; r3 ← r2 + r1
r3, <addr.s> ; mem[s] ← r3
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (16 di 32)
Load & store multiplo
●
È possibile operare il load/store su
diversi registri con una sola istruzione
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (17 di 32)
Modalità THUMB
●
●
L'ARM7TDMI possiede un set
ulteriormente ridotto di istruzioni: Thumb
Istruzioni a 16 bit anziché 32 bit
–
Risparmio del 30% sulla memoria
programma
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (18 di 32)
LPC2000
●
Noi useremo un microcontrollore della famiglia LPC2000
di NXP (Philips) basato su ARM
–
Processore: ARM7TDMI
–
Memoria: flash (programma) + RAM
–
Periferiche (GPIO, I2C, SPI, UART, ADC, ...)
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (19 di 32)
Memoria
●
Flash fino a 32 kB;
●
RAM: fino a 8 kB
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (20 di 32)
Mappa della memoria
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (21 di 32)
LPC2000
●
Noi useremo un microcontrollore della famiglia LPC2000
di NXP (Philips) basato su ARM
–
Processore: ARM7TDMI
–
Memoria: flash (programma) + RAM
–
Periferiche (GPIO, I2C, SPI, UART, ADC, ...)
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (22 di 32)
Le periferiche sono mappate in memoria
●
Tutte le periferiche sono allocate sul VLSI peripheral bus.
●
I registri di ogni periferica sono allocati
in uno spazio di 16 kB.
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (23 di 32)
PLL
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (24 di 32)
VLSI Peripheral Bus Divider
●
I bus distinti del processore e delle periferiche possono
lavorare a frequenze diverse per contenere i consumi
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (25 di 32)
Idle mode
●
●
●
La modalità idle annulla il clock
della CPU,
le periferiche possono continuare
a lavorare ;
Un interrupt farà ripartire la CPU.
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (26 di 32)
Power down mode
●
●
La modalità power down ferma il
clock della CPU e delle
periferiche;
Un interrupt farà ripartire la CPU
e le periferiche.
P @ 60 MHz ~ 100 mW
Power down: < 100 μW
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (27 di 32)
Pin connect block
●
Il modulo PINSELECT permette di selezionare quale
periferica connettere a un pin del dispositivo
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (28 di 32)
External interrupt
●
Diversi pin possono essere programmati per ricevere un
interrupt dall'esterno
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (29 di 32)
Vectored Interrupt Controller
●
●
Il blocco VIC permette di gestire diverse
sorgenti di interruzione;
Le interruzioni si dividono nei tre gruppi:
–
veloci
–
vettorizzate
–
non vettorizzate
VIC
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (30 di 32)
Le periferiche d'utente
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (31 di 32)
Pinout
Corso introduttivo di progettazione di sistemi embedded – gennaio 2014 – (32 di 32)