Per ogni progetto vanno considerati vari fattori, tra cui la selezione del più appropriato dispositivo di elaborazione, valutandone il rapporto ottimale tra costo e prestazioni
Selezionare il dispositivo giusto su cui basare ogni nuovo progetto può essere un lavoro molto impegnativo. La necessità di trovare il giusto equilibrio tra prezzo, prestazioni e consumo energetico ha molte implicazioni. In prima battuta ci sono le considerazioni tecnologiche di ordine generale, ma se il dispositivo, che siano microcontrollori (MCU) o microprocessori (MPU), diventa la base per un approccio alla piattaforma di una famiglia di prodotti la decisione implica conseguenze durature.
Microcontrollori e microprocessori
Vanno prese in considerazione alcune delle principali differenze tra microcontrollori e microprocessori.
In genere un MCU utilizza una memoria flash incorporata sul chip in cui archiviare ed eseguire il programma. Questa soluzione operativa consente all'MCU di avviarsi molto rapidamente. L'unica limitazione pratica all'utilizzo della memoria incorporata è che lo spazio di memoria totale disponibile è ristretto. La maggior parte dei dispositivi flash su MCU disponibili sul mercato ha un massimo di 2 Mbyte di memoria di programma e, a seconda dell'applicazione, questo potrebbe rivelarsi un fattore limitante.
I microprocessori non hanno invece questo tipo di vincoli di memoria. Utilizzano una memoria esterna per fornire archiviazione di dati e programmi. Il programma è in genere archiviato in una memoria non volatile, come NAND flash, e all'avvio viene caricato in una DRAM e quindi inizia l'esecuzione. Ciò significa che la MPU non sarà operativa e funzionante rapidamente come una MCU, ma la quantità di DRAM e NVM che è possibile collegare al processore è nell'ordine delle centinaia di Mbyte e persino di Gbyte nel caso di NAND.
Un'altra differenza è l'alimentazione. Incorporando il proprio alimentatore, la MCU necessita di un solo rail di alimentazione a singolo valore di tensione. Al contrario, una MPU richiede diversi rail di tensione (per core, DDR ecc.), il progettista deve quindi considerare anche questa esigenza con IC di alimentazione o con convertitori aggiuntivi. La DDR (Double Data Rate) trasferisce i dati al processore sia sul fronte di salita sia di discesa del segnale di clock, quindi due volte per ciclo.
L’inserimento di memorie direttamente nel processore è emerso come una soluzione hardware a basso consumo energetico particolarmente indicata per il machine learning e l'intelligenza artificiale. L’utilizzo di SRAM (static random access memory) è stato prevalente in passato, ma una crescente attenzione è oggi rivolta allo sfruttamento delle DRAM (dynamic random access memory) e delle NVM (non-volatile memory) con le sue caratteristiche uniche come l'alta densità e la non volatilità.
Dal punto di vista dell'applicazione, alcuni aspetti delle specifiche di progettazione potrebbero guidare la selezione del dispositivo secondo indirizzi particolari. Ad esempio, va tenuto presente il numero di canali richiesti per le interfacce periferiche, ma anche le specifiche delle capacità per l’interfaccia utente che richiede una quantità di memoria che travalica usualmente quella dei microprocessori.
La potenza di elaborazione di microprocessori o microcontrollori
Nel caso in cui siano previste molte varianti di prodotto, è molto probabile che venga preferito un approccio di progettazione basato sul concetto di piattaforma. Ciò stabilirebbe più "margine" in termini di potenza di elaborazione e capacità di interfaccia per accogliere futuri aggiornamenti delle funzionalità. Un attributo difficile da determinare è la prestazione di elaborazione richiesta che futuri upgrade di progetto potrebbero richiedere. La potenza di elaborazione, misurata in termini di Dhrystone MIPS (DMIPS), aiuta a quantificare questi criteri. Dhrystone MIPS (Million Instructions per Second), è una misura delle prestazioni del computer.
Ad esempio, un microcontrollore basato su ARM Cortex-M4 come MCU SAM4 di Microchip è valutato a 150 DMIPS mentre un processore applicativo (MPU) ARM Cortex-A5 come l'SAMA5D3 di Atmel può fornire fino a 850 DMIPS.
Un modo per stimare i DMIPS richiesti è quello di esaminare le parti dell'applicazione che potrebbero richiedere i maggiori livelli di prestazioni. L'esecuzione di un sistema operativo completo, come Linux, Android o Windows CE, per una qualsiasi prestazione richiederebbe almeno 300-400 DMIPS. Per molte applicazioni di medio-basso livello, un RTOS semplice (sistema operativo real-time) potrebbe essere sufficiente e una tolleranza di 50 DMIPS sarebbe più che adeguata. L'utilizzo di un RTOS ha anche il vantaggio di richiedere poco spazio di memoria; in questo caso un kernel (programma situato al centro del sistema operativo che ha un controllo completo dell'intero sistema) di pochi kB è tipico. Sfortunatamente, un SO completo richiede un'unità di gestione della memoria per funzionare; questo a sua volta specifica il tipo di core del processore da utilizzare e la sua capacità. Per l'esecuzione di applicazioni che richiedono un'elaborazione numerica piuttosto intensa, è necessario riservare una buona quota DMIPS in cima a qualsiasi sistema operativo e ad altre attività di comunicazione e controllo. Più l'applicazione è basata sui numeri, più è probabile che siano richiesti dei microprocessori.
L’interfaccia utente
Che l'applicazione prevista sia rivolta all'elettronica di consumo o all'automazione industriale, l'interfaccia utente (UI) può essere un problema impegnativo. Il consumatore ha acquisito familiarità e dimestichezza con l'uso di interfacce utente grafiche, colorate e intuitive. Le applicazioni industriali utilizzano sempre di più questo metodo di interazione con l'operatore, sebbene l'ambiente operativo non sempre lo giustifichi.
Va considerato il sovraccarico di elaborazione richiesto, che per una libreria UI come Qt, ampiamente utilizzata su Linux, potrebbe essere sufficiente un sovraccarico di 80-100 DMIPS. Più animazioni, contenuti multimediali e modifiche vengono applicate all'immagine da visualizzare, più potenza di elaborazione e memoria sono necessarie. E questi requisiti aumentano con la risoluzione, motivo per cui nelle applicazioni incentrate sull'UI è più probabile che sia adatta una MPU. Con un'UI semplice, con immagini pseudo-statiche e risoluzione medio-bassa può essere sufficiente una MCU.
Considerazioni sulla connettività
La maggior parte dei microcontrollori e microprocessori sono disponibili con tutte le comuni interfacce, ma le periferiche di comunicazione ad alta velocità come HS USB 2.0, le porte Ethernet 10/100 o le porte Gigabit Ethernet si trovano generalmente solo su MPU perché sono maggiormente in grado di gestire ed elaborare grandi quantità di dati.
Che ci siano abbastanza canali e larghezza di banda per gestire il traffico dati odierno è una questione chiave. A seconda dei protocolli di comunicazione utilizzati, dovrebbe essere verificato l'impatto sullo spazio occupato dal codice utilizzando stack di terze parti. Le applicazioni che richiedono connettività ad alta velocità, specialmente in combinazione con l'utilizzo di stack basati su sistema operativo, richiederanno un design basato su MPU.
Consumo e applicazione
Un ultimo punto da considerare è il consumo energetico. Sebbene le MPU abbiano modalità a basso consumo va considerato l'hardware esterno che le supporta, pertanto avere una MPU in modalità a basso consumo potrebbe anche essere leggermente complesso. Il consumo effettivo di una MCU è di gran lunga inferiore rispetto a una MPU; in modalità a basso consumo, ad esempio con SRAM, è possibile ipotizzare un fattore da 10 a 100. Ovviamente questo è direttamente correlato alla quantità di RAM richiesta dal sistema operativo e quindi da alimentare.
Le decisioni coinvolte nella scelta di un approccio basato su MCU o su MPU sono molte e riguardano prestazioni, capacità e budget (considerando la BOM complessiva). In generale, le MCU tendono a essere utilizzate in soluzioni ottimizzate in termini di costi, in cui è essenziale un controllo rigoroso della BOM e il risparmio energetico (ad esempio telecomandi ed elettrodomestici), dove l'enfasi è posta sulla longevità della batteria e nessuna o poca interazione riguarda l’interfaccia utente.
Le MPU tendono a essere utilizzate per applicazioni ricche di funzionalità e ad alte prestazioni; sono ideali per applicazioni industriali, basate su un sistema operativo che potrebbero essere ad alta intensità di calcolo e richiedere più connettività ad alta velocità o un'interfaccia utente avanzata.