Università degli studi di Enna Facoltà di Ingegneria Telematica Laboratorio di Elettronica Sistemi Elettronici integrati salvatore.tirrito@unikore.it
Motivazioni Crescita di esigenze computazionali; Intelligenza diffusa; Elettronica dilagante Crescita di esigenze computazionali; Intelligenza diffusa; Elaborazione e processamento di dati in larga scala. Basic Technologies: Sistemi Embedded Tecnologie di comunicazione
Definizione Sistema Embedded: qualsiasi dispositivo che include una logica programmabile, ma che non risulti un general purpose computer; Un sistema embedded è costituito da una parte Software ed una Hardware; Risponde, monitora e controlla l’ambiente esterno usando sensori ed attuatori.
Definizione (cont’d.) Da Wikipedia: An embedded system is a computer system with a dedicated function within a larger mechanical or electrical system, often with real-time computing constraints. It is embedded as part of a complete device often including hardware and mechanical parts. By contrast, a general-purpose computer, such as a personal computer (PC), is designed to be flexible and to meet a wide range of end-user needs. Embedded systems control many devices in common use today.
CPU integrata Central Processing Unit integrata nel dispositivo; L’embedded computer non è utilizzato per computazioni general purpose; Il sistema integrato si interfaccia con l’ambiente esterno, necessita di un interfacciamento analogico.
Sistemi Embedded – Dove? Trasporti Automotive; Avionica; Treni.
Sistemi Embedded – Dove? Consumer Mobile Home
Sistemi Embedded – Dove? Industrial Automation Home Automation
Sistemi Embedded – Esempi Prodotto: Spazzolino Elettronico Microprocessore: 8bit Velocità programmabile, timer e circuito di ricarica
Sistemi Embedded – Esempi Qualsiasi PC, Mouse tastiera o dispositivo USB Solitamente microprocessore: 8bit
Sistemi Embedded – Esempi Qualsiasi Stampante Solitamente microprocessore: Intel Motorola o ARM a 32 bit RISC
Sistemi Embedded – Esempi Oscilloscopio Agilent Microprocessore a 64 bit OS Windows XP
Sistemi Embedded – Esempi BMW 745i Windows CE OS 53 – 8 bit uP 11 – 32 bit uP 7 – 16 bit uP Reti Multiple
Sistemi Embedded – Esempi Wireless Sensor Networks Solitamente sono caratterizzate da una collezione più o meno numerosa di dispositivi elettronici costituiti da: Sensori; Radio transiver; CPU/Memory; Power source.
Caratteristiche Sistemi Embedded Potrebbero prevedere funzionalità sofisticate Operazioni Real-Time; Basso costo di produzione; Basso consumo; Basso Time To Market.
Funzionalità complesse Spesso devono eseguire algoritmi sofisticati o multipli. Fast Fourier Trasform; Encoder/Decoder Audio-Video Spesso forniscono complesse interfacce utenti
Operazioni Real-time La computazione deve essere effettuata prima della deadline. Hard real-Time: Missing deadline = Failure Soft Real Time: Missing deadline = degradation Alcuni sistemi sono multi-rate: affrontano requisiti differenti in tempi differenti
Specifiche non funzionali Molti sistemi embedded sono dispostivi di massa che devono avere un basso costo di produzione. Memoria limitata, potenza CPU, etc. Il consumo di potenza è un fattore critico in dispositivi alimentati a batteria. Consumo eccessivo –> Crescita costo dell’intero sistema anche in sistemi non alimentati a batteria
Team di sviluppo Solitamente progettati da un ristretto Team di sviluppatori; Spesso occorre soddisfare stringenti deadline di sviluppo.
Team di sviluppo P.M. Architetti SW/HW Reference SW/HW developer
Sistema Embedded: Cosa usa? Che tipo di CPU? Che sistema operativo? Che linguaggio di Programmazione? Indagine di mercato di sviluppatori ingegneri appartenenti ad EETimes e Embedded System Design Magazine
CPU bit- size
Numero di CPU
Perché un sistema operativo Supporto per multitasking, scheduling e sincronizzazione; Supporto per un ampio range di dispositivi di I/O; Supporto per il networking; Supporto per la gestione della memoria; Supporto per display grafico; Sicurezza (accesso alle risorse) e gestione della potenza.
Perché un sistema operativo (2) Solitamente la licenza per OS sono di qualche dollaro per dispositivo. Sistemi Embedded semplici non necessitano di un Sistema Operativo. Ma i nuovi dispositivi diventano sempre più complessi.
Uso di un sistema operativo
Sistemi operativi commerciali
Linguaggi di programmazione utilizzati
Memoria in SE Occorre sia memoria non volatile che volatile; Il Sistema Operativo e l’applicativo memorizzati in FLASH Boot dalla Flash all’accensione; Flash molto più lento della RAM. codice copiato nella ram interna
Quindi … SE si possono trovare ovunque ed in qualsiasi numero; La maggior parte dei nuovi dispositivi utilizza processori a 32 bit; Dispositivi con sistema operativo, usano un commercial OS. La famiglie di linguaggio C (C, C++, C#) è la più utilizzata per la programmazione di SE.
Esigenze tecniche e di mercato Le richieste di flessibilità ed integrazione hanno generato la necessità di raggruppare: Parallelismo delle operazioni; Numero delle variabili di controllo; Modularità del sistema; Affidabilità del controllo; Flessibilità dei componenti. RIDUZIONE DIMENSIONI, COSTI, FLESSIBILITA’, PROGRAMMABILITA’ Reti Logiche Logiche programmabili Controlli digitali e analogici
Microprocessore Il microprocessore diventa indispensabile quando il numero delle variabili da controllare diventa elevato. Comunica con l’esterno; Esegue esclusivamente operazioni logiche, aritmetiche e di controllo Elabora sia dati prodotti internamente che provenienti da dispositivi esterni; Totalmente dipendenti da elementi periferici; Non presenta elementi per la memorizzazione non volatile dei dati.
Microcontrollore Il microcontrollore racchiude tutte le caratteristiche del microprocessore aggiungendo le possibilità di: Comunicazione diretta con dispositivi esterni integrando periferiche interne; Memorizzazione di dati o programmi; Effettuare operazioni di controllo, ricezione ed elaborazione segnali; In generale non necessitano ulteriori aggiunte di memoria RAM oltre a quella integrata. Eseguono esclusivamente le operazioni legate al firmware con il quale sono stati programmati
Microcontrollore vs Microprocessore Linee I/O; Memoria Flash; Convertitore A/D; Timer; USART; SPI; PWM; I2C; ... Microprocessore: Unità di calcolo Unità di controllo Memoria istruzioni e calcolo
Microcontrollore vs Microprocessore
Microcontrollore vantaggi L'integrazione delle periferiche su un singolo chip porta vantaggi legati a: Minor numero di dispositivi discreti per la realizzazione di un sistema Dimensioni ridotte del sistema Costi inferiori Sistema nel complesso più affidabile Protezione dalle copiature Risparmio energetico Ri-programmabilità del sistema Comunicazione diretta con altri sistemi
Microcontrollore MCU I sistemi embedded a microcontrollore realizzano una logica di ottimizzazione del rapporto prezzo/prestazioni. Hanno un elevato campo di impiego che può spaziare dai più semplici oggetti di utilizzo quotidiano a complesse architetture in ambito medicale e industriale. Ha una capacità di calcolo relativamente limitata ed esegue esclusivamente il set di istruzioni definiti nel firmware.
Architettura del Microcontrollore I microcontrollori si distinguono tra loro per: Set di istruzioni: CISC/RISC Organizzazione della memoria: Van Neumann/Harvard Frequenza di clock Numero di dispositivi di I/O e di periferiche intergrate Consumo Numero di bit: 4/8/16/32
Prestazioni CPU TCPU= Nistr * CPI * T Dove: N istr è il numero di istruzioni del programma; CPI è il numero medio di cicli di clock per istruzioni macchina; T= 1/fck è il periodo di clock.
Prestazioni CPU NISTR dipende dal set di istruzioni resi disponibili dal MCU. Una CPU RISC riduce il Nistr; CPI dipende dall’architettura. Un set di istruzioni semplici permette di eseguire istruzioni in pochi cicli di clock e di sfruttare un elevato pipeline (RISC) riducendo CPI T = 1/fCK dipende dalla tecnologia elettronica e dall’architettura. Istruzioni complesse richiedo frequenze di clock più basse.
CPU CISC CISC = Complex Instruction Set Computer L’insieme di istruzioni macchina è molto vasto, e quindi si riduce il gap tra linguaggio ad alto livello e linguaggio macchina; In alcuni casi è possibile avere istruzioni ad hoc, più potenti di quelli esprimibili in linguaggio ad alto livello. Ciò aumenta la complessità del compilatore; Sono necessari più cicli di clock per completare un’istruzione; Numero di registri ridotto numero elevato di scritture in memoria;
CPU RISC RISC = Reduced Instruction Set Computer L’insieme di istruzioni macchina è molto piccolo, e quindi aumenta il gap tra linguaggio ad alto livello e linguaggio macchina; Le istruzioni hanno tutte lo stesso formato e la stessa lunghezza e molte son eseguite in un solo colpo di clock; Unità di controllo semplice e bassa latenza; Elevato numero di registri interni; Avere un formato unico di istruzioni agevola l’utilizzo di stadi di pipe Frequenze di clock più elevate; Numero di registri elevato numero ridotto di scritture in memoria, utilizzo registri interni
PIPELINE Operazioni: Instruction Fetch; Instruction decode; Data Fetch; Instruction execution
Esecuzione senza pipeline
Esecuzione con pipeline
Memoria Van Neumann Adottata in microcontrollori di fascia bassa; Svantaggi legati all’utilizzo di un’unica memoria sia per le variabili volatili che per il codice del programma; Harvard Separazione dei bus per i dati e gli indirizzi; Vantaggi legati all’accesso contemporaneo a codice e dati, diminuendo i tempi di esecuzione
Harvard vs Van Neumann Harvard Van Neumann
PIC24FJ256GB108
PIC24FJ256GB108 PIC è una famiglia di circuiti integrati a semiconduttore con funzione di microcontrollore. Microchip technology non usa il termine PIC come acronimo; Il suo nome aziendale è PICmicro. Il PIC24F è un microcontrollore a 16 bit e ha a disposizione una settantina di istruzioni; L’esecuzione delle istruzioni è scandita da un segnale di clock, cioè un onda quadra a frequenza costante.
PIC24FJ256GB108 PIN: 80; CPU: RISC; Memoria: Harvard; Program Memory: 128 kBytes; Data Memory: 16 kBytes; Timer a 16 bit: 5; Uscite PWM: 9; UART: 4; SPI: 3; I2C: 3; 10-BIT ADC: 16
PIC24FJ256GB108 periferiche Porte: Periferiche di base per la comunicazione verso il mondo esterno, possono essere configurate come ingresso o uscite digitali. Alcune come ingressi analogici (Porta B); Memoria: FLASH e RAM; ADC: 16 Ingressi, risoluzione a 10 bit; Timer: usati per generare ritardi o per chiamare routine periodicamente; PWM: permette di generare un onda quadra con duty cycle variabile; Comunicazioni: permette interfacciamento per mezzo di protocolli standard, quali (I2C, UART, CAN, …) con altri dispostivi. 66 Sorgenti di interrupt;
Interrupt Un meccanismo molto potente nella programmazione dei microcontrollori è la gestione delle interruzioni (interrupt). In risposta ad eventi esterni, il micro sospende l’esecuzione del programma principale, esegue apposite routine di servizio, e poi ritorna all’esecuzione principale Es. Posso programmare una periferica Timer (contatori) per generare un interrupt ogni secondo. Il micro può ad es. avere un programma principale in cui legge dati continuamente da un sensore con l’ADC e, ogni secondo grazie all’interrupt, aggiornare un display con l’indicazione dell’ora.
Interrupt Al RESET il micro esegue l’istruzione contenuta alla locazione 0000H (detta reset vector); Il RESET vector causa un salto all’entry point main 0020H, il programma inizia ad essere eseguito; Se durante l’esecuzione si verifica un interrupt a bassa priorità il micro automaticamente salta all’indirizzo 0018H ed esegue l’istruzione ivi contenuta; Un nuovo salto ci porta all’indirizzo 0040H dove risiede la procedura di gestione degli interrupt; Verificando i FLAG è possibile capire quale periferica ha fatto scattare l’interruzione, per poi eseguire la routine corrispondente; Terminata la routine di gestione il micro ritorna al punto del programma in cui era stato interrotto.
Compilazione Nel momento in cui si progetta un'applicazione per tali sistemi, si utilizza un ambiente di sviluppo che permette di farli comunicare con il PC, detto Host. Il Target identica la piattaforma su cui verrà eseguita l'applicazione; mentre l'host e la macchina su cui si sviluppa il programma. In generale e possibile programmare tutti i processori in un linguaggio a basso livello come l'Assembler, permettendo la massima efficienza a scapito, però, della portabilità. Infatti, ogni famiglia di processori prevede delle proprie “istruzioni macchina", cosicché il codice scritto per una famiglia di processori non può essere valido per un'altra. Il linguaggio utilizzato più versatile e il C. Fermo restando che e importante conoscere l'assembler perche delle volte occorre implementare delle funzioni obbligatoriamente in tale linguaggio.
Compilazione Un progetto software solitamente e costituito da uno o piu file.c e file.h; i primi sono i file sorgenti, mentre gli altri sono gli header file, vale a dire i file di intestazione. Ai fini dei processi di compilazione, queste due tipologie di file risultano identici mentre, dal punto di vista della buona pratica di programmazione, occorre usarli diversamente. Il criterio da utilizzare è quello di non inserire costrutti C che generino codice negli header file ma solo delle dichiarazioni, al contrario di quanto accade nei source file. Costruite le due tipologie di file si passa alla generazione del codice eseguendo tre principali operazioni: 1. Pre-processing Si tratta di un'operazione testuale consistente in una sostituzione letterale del codice; ad esempio la stringa #include xxx.h fa sì che il file in questione venga sostituito così com'è in quella porzione di codice; 2. Compilazione Si ha la conversione dei file xxx.c in codice macchina producendo dei file oggetto (.o); 3. Linking Partendo dai differenti file oggetto generati, li si “linka" tra di essi.
Cross-Compilazione Con il termine cross-compiling ci si riferisce ai flussi di processo che permettono di ottenere un eseguibile, per mezzo dei tre passi descritti precedentemente, in grado di “girare" su di un target differente dalla piattaforma in cui e stato sviluppato. Si fa uso di questo al fine di garantire la portabilità delle applicazioni sviluppate su le più svariate piattaforme, lavorando sempre con lo stesso ambiente di programmazione. Il compilatore, quindi, e abile, a partire da una serie di source file, a generare i file oggetto che, opportunamente linkati, permettano di ottenere un eseguibile.
Programmazione JTAG: protocollo standard di test funzionale che permette di effettuare debug sul firmware. Il programma viene memorizzato in una specifica area di memoria del microcontrollore definita bootloader. Il microcontrollore all'avvio esegue le istruzioni contenute in questa area di memoria
Ambiente di sviluppo Ambiente multi-piattaforma MPLAB X IDE v 2.00 o superiori. Compilatore xC16. Scaricabili da: http://www.microchip.com/pagehandler/en-us/family/mplabx/
Ambiente di sviluppo