Microcontrollori

Introduzione

Il continuo aumento delle applicazioni di controllo, l'emergere sempre maggiore dei cosiddetti Embedded Systems e il crescente ingresso nella vita di tutti i giorni del concetto che va sotto il nome di Pervasive Computing sono aspetti di rilevanza fondamentale per quanto riguarda l'aumento di importanza dei microcontrollori nelle odierne applicazioni. Tali dispositivi estendono in un certo senso il concetto di microprocessore in quanto pur costituendo come questo il cuore computazionale della elaborazione del sistema di cui fanno parte, vanno al di la del semplice concetto di dispositivo programmabile. Tale fenomeno µe dovuto alla particolare funzione che i microcontrollori si trovano a svolgere: essi sono infatti collocati, nella maggior parte delle situazioni, in sistemi la cui funzione µe di interagire in modo sensibile con l'ambiente in cui sono collocati. Questo fa si che la peculiaritµa dei microcontrollori non sia soltanto quella di costituire un dispositivo general-purpose programmabile in grado di eseguire del software, ma anche quella di avere a disposizione una vasta gamma di periferiche che consentono appunto l'interazione con l'ambiente in cui si trovano, la quale risulta essere fondamentale praticamente in tutte le applicazioni in cui essi sono utilizzati.
Tipicamente, questo sposta il baricentro dell'attenzione nella valutazione di un prodotto dalla mera capacitµa di calcolo (che pur conserva la sua importanza) ad altre metriche di valutazione quali il numero e il tipo di periferiche presenti, il numero di pin per l'I/O con l'esterno o la memoria integrata.

Microcontrollori

L'architettura tipica di un microcontrollore ricalca, per alcuni aspetti, quella di un classico microprocessore. Anche qui si parla di architettura Harvard o architettura di Von Neumann e, anche per i microcontrollori, si distinguono architetture RISC ed architetture CISC. Il punto in cui in realtà si differenziano i due diversi dispositivi è il modo in cui l'importanza dei vari componenti viene interpretata e dipende dalla filosofia che si trova alla base. Nella quasi totalità dei casi infatti i microcontrollori, a differenza dei microprocessori, non hanno lo scopo di essere inseriti in sistemi il più possibile general-purpose caratterizzati da elevate capacità di calcolo. Al contrario si tratta di elementi di calcolo inseriti in sistemi destinati a svolgere quasi sempre un'unica funzione e che, per farlo, hanno la necessità di interagire con l'ambiente circostante. Non è raro dunque che i microcontrollori dispongano di una potenza di calcolo relativamente limitata (facendo a meno di soluzioni evolute quali l'utilizzo di memorie cache o ampiezze di bus elevate) e che l'area del silicio venga impiegata per implementare funzionalità di tipo diverso. All'interno di un odierno microcontrollore possiamo infatti trovare quasi sempre periferiche quali convertitori A/D, Timers,UART, Counters, Comparators, PWM Channels, LCD Controller, Key Ma-
trix Controller, tanto che non è raro che ci si riferisca ai microcontrollori con il termine Embedded Computers. L'evoluzione è tale che attualmente sul mercato si possono trovare microcontrollori che integrano al loro interno anche componenti più complessi quali interfacce USB o Ethernet. Un altro aspetto importante dell'equipaggiamento dei microcontrollori è quello relativo alla memoria. Questo tipo di dispositivi, infatti, dispone sempre al suo interno di una certa quantità di memoria destinata a contenere il programma da eseguire unitamente ad un'altra area di memoria utilizzata per contenere i dati durante l'esecuzione dei programmi. Per comprendere la rilevanza dei microcontrollori nella società odierna basti pensare che secondo alcuni studi nella società occidentale una tipica abitazione può contenere in media uno o due microprocessori ma può arrivare a contenere addirittura una o due decine di microcontrollori. Oggigiorno, infatti, un qualsiasi dispositivo che sia equipaggiato con un display, un tastierino, o abbia funzionalità programmabili affida quasi certamente ad un microcontrollore il compito di gestire l'elaborazione. Gli esempi di applicazione sarebbero molteplici: si pensi soltanto ad oggetti di uso ormai comunissimo quali possono essere telefoni cellulari, lavatrici, forni a microonde, televisori, presenti praticamente in ogni casa, per capire quanto i microcontrollori intervengano ormai nella vita di tutti i giorni. A questo va aggiunto che il trend che ci si aspetta è quello di una ulteriore crescita, visto che le ulteriori applicazioni sono innumerevoli soprattutto con l'emergere di concetti come il Pervasive Computing e l'Ambient Intelligence. L'insieme di tutte le periferiche di cui sono dotati fa si che i microcontrollori siano dei veri e propri sistemi indipendenti su un singolo chip riducendo, nella progettazione di un sistema, il numero di chip necessari. In molti casi questa ricerca di diminuire il numero di componenti necessari fa si che ci sia anche la possibilità di generare internamente il clock di sistema così da poter evitare anche l'utilizzo di un quarzo esterno. Come è comprensibile la possibilità di svolgere quasi tutte le operazioni all'interno di un unico dispositivo presenta numerosi vantaggi, in primo luogo la riduzione delle dimensioni complessive del sistema, ma soprattutto, vista la possibilità di evitare la maggior parte delle comunicazioni off-chip, si ottiene un grande vantaggio in termini di dissipazione di potenza. Proprio il basso consumo di potenza rispetto ad altri tipi di soluzione è uno dei parametri che contraddistinguono i microcontrollori e spesso il loro impiego è privilegiato proprio per tale motivo. Sono infatti disponibili in commercio un numero sempre maggiore di dispositivi i quali offrono la possibilità di andare in uno stato di Sleep a basso consumo in quelle condizioni in cui il sistema non debba operare in maniera continuata ma risvegliarsi occasionalmente a seguito di eventi esterni. Infine va sicuramente sottolineato come i microcontrollori spesso rappresentino una soluzione preferita rispetto agli ASIC in quanto consentono di abbattere in maniera drastica i Non Recurrent EngineeringCosts (NRE) dal momento che sono concepiti per essere venduti su larga scala ed il costo del loro sviluppo non si ripercuote in maniera eccessiva sull'acquirente.
Il flusso di progetto di un sistema basato su microcontrollore prevede, naturalmente, lo sviluppo sia di hardware che di software. Nella realizzazione dell'intero sistema, oltre alle caratteristiche specifiche del microcontrollore utilizzato, va sicuramente tenuto in conto anche tutto il set di Tool che il produttore mette a disposizione. Infatti, uno dei concetti più importanti e oramai affermati in tale settore è quello che prende il nome di HW/SW Codesign, ovvero la possibilità di svolgere in modo concorrente lo sviluppo appunto dell'hardware e del software. In tal senso chi produce un microcontrollore può fornire strumenti di supporto allo sviluppo. Uno dei tool sicuramente più importanti è l'Integrated Development Environment (IDE) ovvero l'ambiente di sviluppo (tipicamente del codice). Allo stato attuale vi sono caratteristiche di quest'ultimo che possono impattare in modo molto significativo i tempi di sviluppo (e quindi il time-to-market) di un prodotto, tra cui si può sicuramente citare la presenza di un debugger con funzionalità avanzate, quali possono essere ad esempio quelle di profiling del codice, al fine di valutare le prestazioni del sistema. Inoltre, dal momento che si ha la necessità quasi sempre di sviluppare il codice quando ancora il sistema su cui verrà eseguito non è stato realizzato, è importantissimo avere un simulatore che consenta di effettuare la fase di progettazione del software quando ancora lo stesso hardware per cui lo si scrive è in fase di progettazione. Per quanto riguarda il software, infine, bisogna sottolineare che una gran parte del codice che si scrive per i microcontrollori viene ancora scritto in linguaggio a basso livello come l'assembler. Tuttavia anche sotto questo punto di vista il produttore può facilitare lo sviluppo mettendo a disposizione, come avviene per molte case produttrici odierne, un cross-compiler per linguaggi di alto livello. Attualmente per diversi prodotti si trovano in commercio compilatori per il linguaggio C.
Anche la fase di progettazione dell'HW può essere semplificata nel caso in cui si abbiano a disposizione quelli che prendono il nome di Starter Kits (o Demo Board): si tratta di schede equipaggiate con il microcontrollore e alcuni componenti di uso generico che consentono di prendere confidenza con la piattaforma scelta ma che spesso sono considerate anche come schede che forniscono le linee guida per la progettazione di sistemi basati su un determinato microcontrollore. Quando poi la fase di progettazione HW è completata e si ha a disposizione almeno un prototipo del sistema, vi è ancora uno strumento che può semplificare lo svolgimento del lavoro finale di debug del sistema: si tratta dell'In Circuit Emulator, un dispositivo che può sostituire il microcontrollore all'interno del sistema progettato, che può arrivare ad avere anche prestazioni paragonabili ma che è concepito per facilitare il debug, ovvero (pur essendo collocato nel sistema finale) consente al progettista di avere un controllo quasi totale su quello che avviene all'interno del controllore. È chiaro come in assenza di un simile strumento il debugging, una volta che il microcontrollore sia stato collocato all'interno
del sistema vero e proprio, risulti abbastanza complesso. In questo paragrafo sono state dunque esaminate le caratteristiche principali di un moderno microcontrollore e si è fornita una indicazione su quali siano i parametri che ne determinano la qualità e che quindi vanno tenuti in considerazione nella scelta del modello da utilizzare per il proprio sistema, evidenziando non solo le caratteristiche peculiari del dispositivo, ma anche quelle di contorno (Development & Debugging Tools) che possono contribuire a semplificare e velocizzare la progettazione. Nei paragrafi successivi saranno esaminati esempi concreti di microcontrollori di alcuni dei più importanti produttori attuali e se ne discuteranno tali caratteristiche.

Atmel AVR ATMega128

L'ATmega128 è un microcontrollore CMOS a 8-bit basato sull'architettura RISC AVR della Atmel. La capacità di eseguire le istruzioni in un singolo ciclo consente a questo dispositivo di raggiungere prestazioni di circa 1 MIPS per MHz, consentendo al progettista di fissare il tradeoff tra consumo di potenza e velocità di calcolo. Tale dispositivo è dotato di 32 registri general purpose, tutti connessi in modo diretto alla ALU, cosìda consentire l'accesso simultaneo a due registri e l'esecuzione di istruzioni in un solo ciclo. Le caratteristiche più importanti sono: 128KB di memoria Flash, 4KB di EEPROM, 4KB di SRAM, 53 linee di I/O, 2 USART, un ADC ad approssimazioni successive a 10 bit, porte di comunicazione Two-wire Serial Interface e Serial Peripheral Interface e supporto al protocollo JTAG sia per il test che per l'On Chip Debug. Per quanto riguarda il consumo di

potenza il chip dispone di diversi stati operativi per spegnere tutto il dispositivo tranne l'oscillatore o il timer asincrono. Infine, un particolare stato è dedicato alla conversione A/D per limitare al massimo il rumore dovuto alla circuiteria digitale. Sono disponibili 6 porte di I/O ad 8 bit (una delle quali è utilizzata come ingresso per l'ADC) più un'altra porta a 5 bit, il che fornisce un totale di 53 pin di I/O disponibili all'utente. Il microcontrollore utilizza una architettura Harvard dunque con bus e memorie separate per il codice e i dati ed è inoltre previsto un pipelining a singolo livello così che, mentre un'istruzione si trova in esecuzione, quella successiva è già in fase di prefetch, rendendo possibile l'esecuzione single-cycle delle istruzioni. Il controllo di flusso è consentito dalla presenza di istruzioni di jump condizionali e non condizionali e istruzioni di call. Una caratteristica particolare riguarda il fatto che lo stack è allocato all'interno della memoria SRAM, in tal modo la sua dimensione è limitata solo dalla quantità di memoria libera, anche se viene richiesta una maggiore attenzione al programmatore. Il modello esaminato fornisce diverse possibilità per quanto riguarda il modo in cui viene fornito il segnale di clock. In particolare, è possibile generare quest'ultimo attraverso un quarzo esterno o attraverso un oscillatore RC esterno. Si può, in alternativa, scegliere di fornire direttamente su un apposito piedino il segnale di clock o di sfruttare l'oscillatore RC interno in modo da non necessitare di componenti aggiuntivi. I diversi dispositivi presenti all'interno del chip non necessitano di avere sempre attivo un segnale di clock al loro ingresso e si può dunque decidere di disabilitare selettivamente la propagazione del clock ad alcune periferiche con lo scopo di ridurre i consumi. Dal punto di vista dei tools di progettazione, la Atmel mette a disposizione l'ambiente di sviluppo AVR-Studio. Tale software è pensato per essere un ambiente integrato all'interno del quale si scrive il codice, si effettua la compilazione e la successiva fase di debugging. Proprio sotto questo punto di vista il software risulta molto completo, dal momento che è provvisto di un Fully Symbolic Debugger. Inoltre, è possibile visualizzare e modificare, durante l'esecuzione, tutte le locazioni di memoria del microcontrollore. Durante la

fase di debug il software consente di esaminare in modo completo quello che sta avvenendo all'interno del microcontrollore anche per quanto riguarda i piedini esterni. Molto importante inoltre è la presenza di un simulatore che consente di procedere allo sviluppo del software senza necessitare della presenza del dispositivo fisico. Nel caso in cui si faccia uso del simulatore, l'IDE mette a disposizione apposite funzioni per simulare la presenza di stimoli sui piedini al fine testare, ad esempio, la funzionalità delle routine di interrupt. La progettazione è ancora migliore nel caso in cui si decida di utilizzare un dispositivo hardware di supporto, Atmel produce lo Starter Kit STK500 utilizzabile per tutti i microcontrollori della famiglia AVR essendo provvisto di diversi socket: si tratta di una scheda equipaggiata con due porte seriali per l'interfacciamento con un PC Host, tutta la circuiteria necessaria per la programmazione anche di microcontrollori Target in sistemi esterni e diversi LED e Push Buttons di uso generico per effettuare esperimenti. Inoltre, la scheda fornisce accesso in maniera semplice alle porte del micro attraverso dei Pin Headers Connectors.In alternativa si può pensare di utilizzare l'In Circuit Emulator ATICE50. Infine, per tale famiglia di controllori, è importante segnalare una caratteristica molto particolare: Atmel produce i chip FPSLIC che integrano al loro interno uno di questi controllori in abbinamento con una FPGA fino a 40K gates, fornendo inoltre supporto alla progettazione tramite un software di nome System Designer che integra l'AVR Studio e soluzioni di terze parti per la progettazione professionale su FPGA quali ModelSim e LeonardoSpectrum.

Microchip PIC18F8620

La famiglia di microcontrollori PIC18FXX20 rappresenta una soluzione a basso costo nel settore delle architetture RISC avanzate. Si tratta di una serie di dispositivi basati su memoria Flash, pensati per applicazioni high-end nelle quali sia richiesta una interfaccia utente di una certa complessità. Il particolare dispositivo che è stato esaminato è il PIC18F8620. Tale modello dispone di 64KB di memoria Flash, 3KB di memoria SRAM e 1KB di EEPROM, a questo va aggiunto che nel caso in cui la necessità di memoria del progettista vada oltre queste quantità sul chip è implementato un External Memory Interface che consente di indirizzare uno spazio di memoria fino a 2MB, caratteristica a disposizione di pochi controllori a 8-bit.

Dal punto di vista della comunicazione il micro dispone di un modulo denominato Master Synchronous Serial Port, utile per la comunicazione con altri microcontrollori o periferiche esterne. Il modulo implementa i due protocolli SPI e I2C supportando direttamente in hardware le modalitµa Master, Slave e Multi-Master. In aggiunta µe presente un secondo modulo USART attraverso il quale si può implementare la comunicazione di tipo seriale, ad esempio con la porta RS232 di un PC, in modalità full-duplex. In virtù del loro orientamento ad applicazioni di controllo tutti i dispositivi della famiglia sono provvisti di moduli di tipo Capture/Compare/PWM. Ogni modulo ha un registro il cui contenuto, a seguito del verificarsi di un evento su un determinato piedino, può catturare il valore di un timer o essere confrontato con quest'ultimo così da produrre un evento in uscita. In alternativa il dispositivo può fornire uscita di tipo PWM con risoluzione fino a 10-bit. Sotto il punto di vista dell'equipaggiamento analogico il micro presenta un A/D converter con 16 ingressi con la possibilità di effettuare le conversioni anche in Sleep mode. Inoltre è presente la circuiteria per rilevare un abbassamento della tensione di alimentazione e generare un Reset. L'interfacciamento con l'esterno è garantito dalla presenza di 9 porte di I/0 per un totale di 68 pin. La massima velocità di clock è di 25 MHz e consente di raggiungere prestazioni pari a 6 MIPS, il clock può essere fornito dall'esterno (con un quarzo o direttamente su un piedino) ma non può essere generato direttamente all'interno.

Per quanto riguarda lo sviluppo è disponibile l'ambiente MPLAB fornito gratuitamente dal produttore. Esso include diversi moduli, di cui uno globale per la gestione del progetto, un editor di testo, il compilatore ed il debugger. Il software implementa anche la funzionalità di simulatore: in particolare, è possibile modificare il codice e rieseguirlo in maniera immediata, simulare stimoli esterni applicati al micro, settare i valori dei piedini e dei registri ad intervalli fissati e tracciare l'esecuzione del codice. Il supporto hardware alla progettazione è fornito mettendo a disposizione un'apposita Demo Board interfacciata con il PC attraverso una porta seriale. Essa contiene il micro, un potenziometro connesso al canale ADC, un sensore di temperatura, 8 LED ed una prototyping area organizzata come una scheda millefori. In alternativa a questa soluzione di basso costo si può considerare l'utilizzo in un ICE. Microchip produce l'MPLAB ICE 2000, che consente l'emulazione del micro a velocità reale (fino a 25 MHz) sia di codice assembler che di codice in linguaggio C, potendo impostare un numero illimitato di breakpoint e consentendo di tracciare l'utilizzo di tutte le aree di memoria nonchè di leggerne e modificarne il contenuto. Infine si può effettuare anche il profiling della copertura del codice in base agli accessi in memoria del programma.

Freescale MC9S08GT60

Il microcontrollore in esame fa parte della famiglia HCS08 della Freescale, orientata alla ricerca di performance elevate ma con l'obiettivo di realizzare un chip di basso costo. Il chip preso in considerazione è dotato di 60KB di memoria Flash e 4KB di memoria RAM ma non dispone di memoria EEPROM, per cui eventuali dati costanti vanno collocati nella memoria di programma. Per quanto concerne le periferiche è dotato di dispositivi che possono ormai essere ritenuti standard all'interno di un microcontrollore: 2 timer che possono operare nelle modalitµa capture, compare e PWM; due interfacce indipendenti SCI per la comunicazione seriale che rendono agevole la connessione con un PC o anche con altri controller embedded. Tali periferiche si differenziano da quelle comunemente presenti sui micro per il fatto di disporre di un data sampling avanzato che consente una maggiore affidabilità e rilevazione del rumore. Il MC9S08GT60 integra al suo interno una periferica I2C che consente appunto di comunicare con altri chip fino ad una velocità di 100 kbps. Anche questo microcontrollore contiene al suo interno un ADC, la tecnologia utilizzata è quella ad approssimazioni successive. Questo dispositivo ha una risoluzione programmabile di 8/10 bit,e l'avvenuta conversione può essere gestita ad interrupt per un numero di canali che può arrivare fino ad 8.

Come in tutti i microcontrollori di moderna generazione grande attenzione è posta sulla riduzione del consumo di potenza. A tal proposito l'architettura prevede 4 modi operativi: il Wait mode nel quale la CPU viene spenta e il clock di sistema rimane attivo e tre diversi Stop Modes ordinati per livello decrescente di periferiche alle quali viene interrotta l'alimentazione. Nel primo si ha un totale power down della circuiteria interna per risparmiare potenza, nel secondo questo è fatto solo in maniera parziale ed il contenuto della RAM è preservato; nell'ultimo quasi tutta la circuiteria interna è alimentata per garantire il Fast Wake Up in seguito ad un evento esterno. La capacità di I/O fornita al programmatore è costituita da 7 porte che includono un totale di 56 pin. Una di queste porte (PORTA) è in realtà condivisa con una periferica del micro ovvero il Key-board Interrupt Module. Questo modulo è stato pensato originariamente per quelle applicazioni che necessitano di un tastierino semplificando la sua connessione al micro, ma sono in ogni caso utilizzabili come ingressi consentendo al chip di essere risvegliato da uno degli stati descritti in precedenza.

Il tool di sviluppo scelto da FreeScale è una apposita versione di CodeWarrior. Si tratta di un software di terze parti molto affermato per lo sviluppo di software embedded adattato al prodotto in esame. Sebbene il prodotto sia di indubbia qualità è importante sottolineare che non è fornito gratuitamente ma che si tratta di un prodotto commerciale. Il livello raggiunto da questo software è in ogni caso molto elevato, includendo un Build System che consente la compilazione anche di codice in C/C++, più di 60 optimization strategies, il simulatore ed un debugger che offre anche la funzionalità di automatizzare cicli di debug ripetitivi durante la validazione del codice oltre al profiling ed alla Code Coverage Analysis. La Demo Board relativa risulta essere molto semplice e dispone di 5 LED, 4 Switches ed un'area di prototipizzazione. Interessante è la possibilità di alimentarla a batterie.
Molto completo è invece il tool FSICE, l'emulatore in-circuit di Freescale che consente il debugging real time, un numero illimitato di breakpoint e la possibilità di variare il clock di CPU da 4KHz a 40MHz interfacciandosi alla perfezione con l'ambiente CodeWarrior.

Epson S1C8F360

Il prodotto di Epson risulta essere sicuramente il più completo di quelli esaminati. Esso fa parte della famiglia S1C88 di microcontrollori a 8-bit, ha uno spazio di indirizzamento addirittura pari a 16MB e un set di istruzioni molto ricco. La dotazione di memoria è costituita da 60KB di memoria Flash per il codice e 2KB di memoria RAM. La sezione relativa al clock prevede diverse possibilità, poichè sono presenti due generatori interni. Il primo serve a generare un clock a bassa frequenza (32,768 kHz) per le modalità di risparmio energetico, mentre il secondo è utilizzato per generare (tramite un quarzo o una rete RC esterni) il clock ad alta frequenza per il funzionamento normale che può arrivare ad una frequenza massima pari a 8.2 MHz.
Le porte di comunicazione sono molteplici ed arrivano fino ad un massimo di 60 pin di I/O, alcuni dei quali utilizzati come bus indirizzi o dati nel caso in cui si progetti un sistema complesso. In particolare due di queste porte possono fungere da controller per un keypad connesso al micro. Va comunque sottolineato che molti dei piedini hanno una funzionalità fissa di input o output e non sono flessibili come avviene nella maggior parte dei microcontrollori. L'interfaccia seriale della quale il micro è dotato dispone di un unico canale che consente l'operazione in full duplex potendo scegliere anche, via software, se realizzare un collegamento sincrono o asincrono.

Le periferiche di timing presenti sono un clock timer utilizzato appunto per la generazione di segnali di clock, uno Stopwatch timer e infine vi sono due ulteriori Timer a 8 bit programmabili anche per funzionare in coppia come timer a 16 bit. Sul versante delle periferiche analogiche il S1C8F360 integra un comparatore a due canali ed un convertitore A/D. Quest'ultimo si basa su una struttura ad approssimazioni successive ed ha una risoluzione massima di 10 bit. Attraverso un apposito piedino (AVREF ) si pu&oggrave; fissare il range di tensione della conversione. Quando quest'ultima viene completata è possibile lanciare automaticamente un segnale di interrupt.

Due sono le periferiche che rendono particolare questo controllore: un LCD controller ed un Sound Generator. Il primo costituisce sia una soluzione integrata per pilotare un dot matrix display fino a 1.632 punti (51 segments x 32 commons), sia un controller per un eventuale driver LCD esterno. Il secondo dispositivo è, invece, un generatore di suoni utile per generare il segnale di comando per un buzzer. Queste due periferiche denotano l'intenzione di Epson di destinare questo controllore a sistemi di una certa complessità. La gestione del consumo di potenza è realizzata mettendo a disposizione tre modalità operative: Normal mode, Low power mode e High speed mode. Il primo è quello in cui si trova il micro al reset ed ha una frequenza massima di lavoro di 4.2 MHz, consentendo un certo risparmio di potenza; il secondo è il modo di massimo risparmio, ottenuto commutando l'attività sul clock a bassa frequenza; infine, l'ultimo modo è quello riservato alla ricerca di massime prestazioni ottenute potendo spingere il clock fino a 8.2 MHz, ma aumentando così notevolmente il consumo. Anche il tool di sviluppo è di alta qualità.Il Sim88 oltre ai tradizionali moduli di project management, compilazione (anche di codice C) ed un simulatore, offre anche la possibilità di simulare sia un display LCD connesso al driver del micro sia un keypad. E' importantissima anche la presenza di un Logic Analyzer che consente di visualizzare graficamente le forme d'onda, (rappresentanti le porte di I/O del micro), che il software è in grado di memorizzare in fase di esecuzione. Di grandissima qualità è anche la Demo Board (S5U1C8F360T1) che comprende, oltre al micro, la predisposizione per l'installazione sia di memoria RAM che ROM, un LCD panel 67x32, un keypad da 32 tasti, due trimmer da utilizzare come ingressi variabili per il convertitore A/D ed anche uno speaker da utilizzare con il buzzer output. Infine, la scheda ha la possibilità di essere alimentata tramite batterie. L'ultimo elemento che è importante esaminare è l'In Circuit Emulator. Epson produce il S5U1C88000H5, un modulo che si integra con la Demo Board appena illustrata per formare un dispositivo di emulazione. Il dispositivo così ottenuto ha 576KB di memoria di emulazione built-in, funzioni avanzate di emulazione (step execution, trace, break, coverage, etc...) e fornisce uno strumento validissimo per velocizzare la fase di debugging del sistema realizzato.

Conclusioni

Le soluzioni esaminate si possono ritenere equivalenti sotto determinati punti di vista, mentre si differenziano molto per altri aspetti. Si può infatti notare come vi siano alcune periferiche che sono di fatto presenti in maniera sistematica sui microcontrollori di una certa fascia e che per tanto l'unica differenza consista nelle prestazioni di tali periferiche. Si tratta in particolare di Timer, convertitori A/D, comparatori e periferiche di comunicazione seriale. Accanto a queste si trovano poi periferiche più particolari che differenziano un dispositivo dall'altro: si puµo pensare, infatti, a driver LCD, a controller per key matrix o a periferiche di livello ancora più alto. Nel caso in esame, ad esempio, una necessitµa di questo tipo sposterebbe l'attenzione necessariamente sul chip di Epson. L'altro aspetto di fondamentale importanza è la dotazione di memoria, di fatto ormai ènaturale aspettarsi la presenza di memoria di tipo Flash per il codice e una dotazione di memoria SRAM, mentre non sempre si trova una memoria EEPROM aggiuntiva da utilizzarsi per eventuali dati costanti. Va sottolineato che per il micro di Epson si ha la possibilità di avere il chip equipaggiato con memoria ROM personalizzata fornendo la maschera al produttore. Nonostante non sia quasi mai il parametro fondamentale, una certa attenzione va posta anche sulle prestazioni, tra i modelli esaminati si va dai 4.2 ai 40 MHz, tuttavia tale parametro va valutato sempre congiuntamente al relativo consumo di potenza. Sotto questo punto di vista i dispositivi meglio concepiti sono sicuramente quello di Atmel e quello di Freescale, mentre quello in cui pochi sforzi sembrano fatti in tal senso sembra essere quello di Microchip.Infine, va chiaramente tenuto in considerazione il costo di ciascun chip che risulta essere fortemente variabile nonostante le caratteristiche dei micro controllori siano piuttosto simili. Accanto agli aspetti appena citati, i quali

sono puramente inerenti ad aspetti hardware del chip da utilizzare, bisogna poi considerare aspetti che riguardano piµu da vicino la sola fase di progettazione. La presenza di strumenti di supporto che possano semplificare quest'ultima e ridurre il time-to market può pesare in modo decisivo sulla scelta di una piattaforma. Da un lato si ha l'esigenza di strumenti di livello qualitativo elevato, dall'altro bisogna sempre considerare i conseguenti costi da sostenere. Nei casi discussi ad esempio possiamo trovare ambienti gratuiti realizzati dagli stessi produttori dei chip o, come nel caso di Freescale, l'IDE può essere affidata a sviluppatori esterni, nel qual caso la qualità può risultare superiore a fronte, tuttavia, di un aumento dei costi.

 

DIGITAL SIGNAL PROCESSORS

Introduzione ai DSP

La tecnologia digital signal processor (DSP) si è imposta negli ultimi anni come soluzione alle problematiche applicative di media ed elevata complessità nella maggior parte dei campi tecnici. L'analisi e la sintesi dei segnali vocali, l'elaborazione delle immagini, l'audio digitale, l'automazione, la strumentazione biomedica e di laboratorio, e in generale l'elettronica destinata alle applicazioni di consumer, sono solo alcuni campi di utilizzo dei DSP.

Un DSP può essere utilizzato come co-processore in grado di aumentare le prestazioni di un processore general-purpose a cui viene affiancato. Sfruttando la potenza di calcolo e la precisione del DSP si può evitare così al processore centrale il sovraccarico di lavoro, liberandolo per operazioni più generiche rimandando appunto al DSP funzioni di accelerazione grafica, compressioni video o calcolo ripetitivo di algoritmi numerici, tutte operazioni che ne rallenterebbero notevolmente il funzionamento. Qualora il DSP si occupasse del calcolo di algoritmi o processi numerici ripetitivi potrebbe fornire i risultati finali al microprocessore centrale direttamente o tramite il DMA, rendendo cosi l'operazione real-time (in tempo reale).

I DSP trovano impiego in tutte quelle applicazioni che ne esaltano le sue caratteristiche, mentre un processore propriamente detto ("o general purpose ") è volutamente più versatile, ha un campo di impiego più ampio ma senza avvicinare i livelli di rendimento di un DSP.

Oltre ad essere dei processori specializzati ad eseguire in tempo reale applicazioni per l'elaborazione dei segnali, i DSP costituiscono un punto di unione tra i microprocessori ASIC (Circuiti Integrati per Applicazioni Specifiche) ed i microprocessori general purpose (processori per scopi generali), combinando la velocità dei circuiti specializzati ASIC con la convenienza dei processori riprogrammabili general purpose. La potenza di calcolo e la flessibilità dei DSP consente il loro impiego per un vasto intervallo di applicazioni.

I DSP sono caratterizzati da una struttura appositamente realizzata per il trattamento e l'elaborazione dei segnali digitali; in questo tipo di applicazioni è molto importante la velocità di elaborazione e la rapidità di accesso alla memoria essendo molto frequenti le operazioni di lettura e scrittura. Per soddisfare queste esigenze suddetti sistemi sono realizzati secondo l'architettura Harvard (Fig. 1) nella quale si nota immediatamente la presenza di due banchi di memoria separati, uno per le istruzioni (memoria interna) e uno per i dati del problema (memoria esterna), permettendo simultaneamente il caricamento di un dato e di un istruzione.

 

 

Figura 1 Architettura Harvard

 

Avere a disposizione due canali di comunicazione, uno per i dati ed uno per le istruzioni del programma, consente di accedere in parallelo alle due aree di memoria (memoria dati e memoria programma) migliorando la velocità di elaborazione. In questo modo riduciamo ad uno i cicli macchina contrariamente ai due cicli necessari per l'architettura di Von Neumann.

Perchè usare i DSP

Il DSP e le sue periferiche costituiscono un sistema molto complesso che però deve funzionare nell'ambito di stringenti specifiche in termini di tempo di elaborazione e trattamento dei segnali. A livello di sistema dunque vi sono molti aspetti da considerare:

Applicazioni

Dall'audio digitale alle applicazioni multimediali, alla sintesi vocale, alle applicazioni nel campo automotive, ai controllori per hard disks, alle telecomunicazioni wireless, i DSP hanno contribuito in maniera fondamentale allo sviluppo di sistemi portatili piccoli ma potenti in grado di svolgere complesse funzioni con un ridotto consumo di potenza.

Le nuove architetture

Misurare le prestazioni di un processore significa capire quale sia il più utile allo scopo prefissato da chi lo andrà ad acquistare. Si intuisce quindi quanto sia fondamentale per il mercato dei DSP avere dei buoni ed attendibili parametri di valutazione. La misura delle prestazioni può essere chiamata BENCHMARKING . Tra i benchmark più usati ci sono quelli della BDTI (Berkeley Design Tecnology Inc.) .

Si analizzeranno in questa sezione alcune nuove architetture che secondo la BDTI sono tra le migliori in termini di prestazioni.

STARCORE SC140

Il DSP StarCore Sc 140 è la prima implementazione di un'architettura innovativa che si rivolge al mercato delle applicazioni DSP wireline e wireless. È un esempio concreto di processore studiato per le applicazioni che dovrà svolgere nel campo delle comunicazioni. La sua specificità lo rende tale da essere installato sui cellulari di terza generazione che usufruiranno dei servizi a banda larga. Lo StarCore SC140 offre buone prestazioni, basso consumo di potenza (per le applicazioni per il quale è stato implementato), compilabilità efficiente e ristretta densità di codice di programmazione. Gli obbiettivi di mercato per il quale si propone sono: codifica del parlato, sintesi e riconoscimento vocale, servizi internet wireless e multimediali, comunicazioni in rete e trasmissione dati.

Figura 2: Diagramma a blocchi dello StarCore SC140

 

L'SC140 è costituito dalle seguenti unità funzionali: da una unità aritmetica e logica; da una unità per la generazione degli indirizzi; e da una unità che si occupa della gestione delle istruzioni(PSEQ). Per il trasferimento dei dati, sono presenti i seguenti bus: due bus per i dati in memoria, XDBA e XDBB, cui corrispondono per gli indirizzi rispettivamente XABA e XABB; un bus per il trasferimento delle parole di codice dalla memoria (PDB, Program Data Bus), cui corrisponde il bus degli indirizzi PAB; e diversi bus che consentono un buon trasferimento di dati con l'esterno. L'unità DALU si occupa delle operazioni aritmetiche e logiche, ed è costituita: da un register file con sedici parole da 40 bit; quattro ALU parallele, ognuna delle quali un MAC e da una unità che si occupa delle elaborazioni sui bit (BFU, Bit Field Unit) come shift, rotate ed operazioni logiche. L'Address Generation Unit contiene registri per gli indirizzi e si occupa di calcolare gli indirizzi degli operandi contenuti in memoria. Con due unità aritmetiche per gli indirizzi (AAU) è in grado di calcolare un indirizzo ad ogni colpo di clock. Il PSEQ si occupa di prelevare le istruzioni, di farne il dispatch, si occupa dei loop e della gestione delle eccezioni. Le istruzioni hanno la lunghezza di 16 bit e ne possono essere eseguite fino a sei per colpo di clock

Si propone come un DSP per prestazioni di punta. È in grado di caricare fino a 16 istruzioni per ciclo, ma può arrivare fino a 4 MAC per ciclo. È dotato di una pipeline poco profonda (5 cicli). Funziona a 300 MHz, con una tensione di 1.5 volt . Utilizza istruzioni da 16 bit con un prefisso opzionale di altri 16 bit (VLES). Il prefisso modifica l'esecuzione dell'istruzione stessa (ad esempio di può rendere condizionale un'istruzione).

 

ADI_TigerSHARC_ADSP-TS20x

I processori Analog Devices' TigerSHARC si rivolgono al mercato delle telecomunicazioni, delle bioimmagini, e alle applicazioni della strumentazione industriale.

Tale architettura ha una tecnologia da 0.25 um con cinque livelli di metallizzazioni operante a 150 MHz. Presenta una potenza di calcolo di 900 Mflop in floating point a singola precisione o 3.6 GOPS con aritmetica a 16 bit. Internamente ha una larghezza di banda da 7.2 Gbyte/s. Presenta diverse implementazioni che sono state riprese da macchine general purpouse, in particolare:

Figura 3 Architettura del TigerSHARC

L'architettura è costituita da:

L'architettura del TigerSharc implementa un modello in cui il compilatore si occupa solo dell'ILP, mentre è l'hardware ad occuparsi della temporizzazione. Questo offre la compatibilità tra diverse versioni del processore in quanto non richiede la ricompilazione del codice.

ADI Blackfin ADSP-BF53x

I processori Blackfin rappresentano una nuova classe di dispositivi che combinano l'ingegneria dei processori Single Instruction, Multiple Data (SIMD) con la potenza di elementi come la Memory Management Unit (MMU),il watchdog timer,il real-time clock, le istruzioni RISC a lunghezza variabile, le porte UARTs, and SPI. Queste caratteristiche sono tipicamente presenti solo nei microcontrollori e nei microprocessori. I processori Blackfin, possedendo tutta la potenza di un DSP ed essendo così caratterizzati, possono sostituire altre classi di DSP o di un ASIC nel designs.

Figura 4 Architettura del Blackfin

L'architettura del processore è la Micro Signal Architecture, sviluppata da Analog Devices ed Intel. Si tratta, in pratica, di un'architettura di tipo Harward modificata, combinata con una struttura gerarchica della memoria, in cui si distingue tra una memoria di livello 1(L1), che opera tipicamente alla stessa velocità del processore, senza alcuna latenza, e la memoria esterna che è invece compatibile con lo standard PC133. Gli indirizzi sono generati da due Data Address Generator(DAG) pilotati dall'unità di controllo di flusso(Program Sequencer Control Unit) con l'ausilio di un blocco di 24 registri a 32 bit per le varie modalità di indirizzamento. I due DAG possono operare in parallelo, consentendo così due fetch simultanei in memoria.

Le caratteristiche principali del processore BF533 sono:

Il Blackfin vede la memoria come un unico spazio di indirizzamento di 4 Gb (attraverso indirizzi a 32 bit). Tutte le risorse, incluse memoria interna, memoria esterna, registri di controllo I/O ( memory mapped registers ), occupano sezioni diverse dello stesso spazio comune di indirizzamento. Le porzioni di memoria di questo spazio sono organizzate in una struttura gerarchica per consentire un buon compromesso prezzo/prestazioni tra i sottosistemi on-chip (cache e SRAM) che sono costosi e a bassa latenza, e sottosistemi off-chip (le porte di comunicazione), più economici e lenti.

Dal momento che i processori Blackfin sono implementati con CMOS di tecnologia da 0.13µm, possono dissipare approssimativamente la metà della potenza dei processori più competitivi.

Inoltre i processori Blackfin hanno prezzi a partire da $4.95/ciascuno in unità da 10K per operazioni da 400 MHz.

A questo prezzo i processori Blackfin offrono una potenza di processing senza precedenti in termini di costi.

 

TI TMS320C64xx

Texas Instruments ha rivoluzionato la tecnologia wireless 3G, in termini di infrastruttura su banda larga e applicazioni di imaging, e lo ha fatto col lancio dei nuovi DSP TMS320C64x : tre nuovi componenti programmabili, funzionanti a velocità di oltre 600 MHz, con prestazioni dieci volte superiori a qualsiasi altro DSP disponibile per banda larga, e fino a 15 volte superiori rispetto a quelli di tipo evoluto per video e imaging.

I nuovi DSP TMS320C6414, TMS320C6415 e TMS320C6416 sono i primi dispositivi basati sull'architettura del DSP TMS320C64x ; dispongono di un'architettura in grado di consumare (a parità di prestazioni) un terzo dell'energia, ottimizzando così la densità di canale nelle apparecchiature per l'infrastruttura dedicata alle comunicazioni. Tra queste le stazioni base wireless 30, le DSLAM (Digital Subscriber Line Access Multiplexer) e altre unità di concentrazione di rete. I nuovi chip prevedono, inoltre, un'elevata integrazione a livello di sistema, per garantire la riduzione dei costi di gestione dei sistemi; una più rapida commercializzazione dei prodotti; la presenza di un ambiente di sviluppo di linguaggio ad alto livello, che risulta il più completo del settore.

Figura 5 Architettura del TMS320C64xx

Le caratteristiche principali del C64 sono:

- Una nuova direzione per i DSP: i tempi di esecuzione sono variabili

 

Caratteristica fondamentale del C64 è l'utilizzo delle istruzioni SIMD (single instruction multiple data):

Dal punto di vista computazionale si è in grado di quadruplicare14 volte la velocità di esecuzione dell'operazione.

Dal punto di vista hardware, la realizzazione di istruzioni SIMD si ottiene con la moltiplicazione delle execution unit che sono in grado di gestire indipendentemente i risultati derivati dall'esecuzione dell'operazione stessa.

Problemi connessi all'uso delle SIMD:

Prestazioni a confronto

In conclusione si riportano alcune tabelle ottenute utilizzando i benchmark della BDTI, in cui sono a confronto, tra i vari processori, anche i quattro processori analizzati in questa relazione.

In particolare le due tabelle qui sotto riportate rappresentano le prestazioni in termini di velocità e potenza.

Figura 6 Speed scores for fixed-point DSP (Figure courtesy of BDTI)

La Figura 6 mostra le prestazioni in termini di velocità per alcuni dei più comuni DSP fixed point. La Figura 7 invece mostra le prestazioni in termini di potenza minima e massima raggiungibile per alcuni processori.

Figura 7 Power scores for fixed-points DSP (Figure courtesy of BDTI)

Figura 8 Speed/mW ratios for fixed-points packaged processors

Nella Figura 8 osserviamo invece una misura delle prestazioni sulla base del rapporto velocità/potenza.

Come si può notare le differenze riflettono i tradeoffs di progetto, dettati a seconda delle specifiche che si vogliono soddisfare. Per esempio il TMS320C64x+ è il processore più veloce di tutti, ma in termini di potenza non è sicuramente il migliore. Questo perché esso è stato progettato per essere il più veloce possibile, sacrificando considerevolmente la potenza. Il Blackfin invece, pur essendo abbastanza veloce, è molto più efficiente in termini di potenza.

Conclusioni

Dunque i DSP vantano di una enorme flessibilità: scegliere un DSP significa valutare le specifiche funzioni che si vogliono realizzare e capire quale processore meglio soddisfa tali specifiche. La difficoltà della scelta sta proprio nel fatto che esiste una vasta gamma di processori DSP tra cui scegliere. Il “migliore” processore dipende quindi dall'applicazione che si vuole svolgere. L'attenzione più grande va quindi al trade-off tra velocità, utilizzo della memoria e consumo di potenza.