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)