- Elettronica Open Source - https://it.emcelettronica.com -

Microcontrollore o FPGA? Criteri di scelta

Un’analisi di base su due delle periferiche programmabili più utilizzate nel momento, soffermandosi prevalentemente sulle caratteristiche che dovrebbero invogliare il progettista nella scelta del componente più adatto al proprio progetto.

Negli ultimi anni, i componenti elettronici programmabili, hanno pian piano sostituito la maggior parte degli integrati progettati per assolvere ad un’unica funzione. La reperibilità, la facilità d’uso e la velocità di correzione dei bug in caso di sbaglio progettuale, hanno dato una marcia in più a questi dispositivi garantendo una maggiore semplificazione del circuito esterno e implementando le varie operazioni logiche all’interno dell’integrato. Due famiglie molto in voga nel settore sono quelle dei microcontrollori e degli FPGA. [1]

Gli FPGA

Un FPGA è un circuito integrato che consiste in un elevato numero di blocchi logici (CLB), nei quali vengono svolte funzioni digitali di base, i quali sono interconnessi tra di loro attraverso un sistema di canali di routing programmabile direttamente dall’utente. Dopo aver progettato il sistema, per l’implementazione fisica, ogni singolo CLB viene opportunamente  configurato in modo da eseguire una predefinita parte del circuito; dopo di che le interconnessioni tra i singoli  blocchi vengono abilitate in maniera tale che i vari pezzi comunichino tra di loro e svolgano le varie funzioni desiderate.

I CLB (cluster  logic block)

I  CLB sono il cuore pulsante del componente, non sono altro che un insieme di elementi logici di base (BLE) completamente collegati tra di loro mediante interconnessioni locali (routing locale). Un Cluster logic block viene descritto da due parametri fondamentali:  il numero di ingressi gestito (I) e il numero di BLE (N). Ogni sistema logico di base presenta al suo interno un componente combinatorio chiamato LUT (look-up table); il quale ha la funzione di indirizzare e gestire il traffico logico di ingresso garantendo al sistema di eseguire l’operazione desiderata e fornirla in uscita nel momento appropriato. Considerato che la complessità di una LUT cresce con l’aumentare del numero di ingressi da gestire, e che risulterebbe molto difficile indirizzare molti pin in un unico blocco logico, si preferisce decentralizzare  i BLE e realizzare look-up Table meno complesse collegate tra loro.

Le connessioni  tra i vari blocchi

L’FPGA [2] al suo interno mette a disposizione tre tipi di componenti fondamentali per realizzare  i vari collegamenti tra CLB: i segment wire, i switch module e i connection module. I segment wire altro non sono che delle piste metalliche che scorrono all’interno del componente stesso, facendo in modo che a qualsiasi CLB passi adiacentemente almeno un gruppo di essi. Si suddividono in due canali fondamentali: orizzontali e verticali; la cui dimensione, numero e lunghezza sono correlati al dispositivo utilizzato. Ogni canale è potenzialmente connesso ad un altro mediante un dispositivo chiamato switch module, il quale opportunamente configurato e posizionato nel punto di intersezione, farà da ponte tra i segment  wire desiderati. Il connection module invece è quell’insieme di elementi programmabili, generalmente dei MOS, che realizza il collegamento tra i pin del cluster logic block e il segment wire interessato. La figura 1 riassume brevemente ciò che è appena stato letto, dando una visione più chiara di come sia disposta l’architettura di un FPGA.

Figura 1: architettura interna di un FPGA.

Figura 1: architettura interna di un FPGA.

Per una maggiore comprensione mentale, basti prendere come esempio una classica basetta doppia faccia: il CLB è il componente  integrato posizionato, i segment wire sono le piste che portano i segnali  da una parte all’altra del circuito, i switch module sono quei collegamenti che connettono le piste tra le due facce dello stampato, in fine i connection module non sono altro che le saldature tra i pin dell’integrato e le varie piste.

Realizzazione di un progetto con FPGA

La realizzazione di un circuito sfruttando la tecnologia delle FPGA può risultare complessa e quasi impossibile, senza l’utilizzo degli strumenti appropriati. Durante la progettazione si vanno a colpire principalmente:  i CLB, i switch module e i  connection module; si capisce altresì che risulterebbe davvero difficile programmare “manualmente” migliaia di questi minuscoli dispositivi. Ci si affida dunque a dei programmi di CAD in grado di convertire  il circuito digitale, sotto forma di schema elettrico o codice sorgente, in un insieme di bit utilizzati per programmare direttamente l’FPGA.

I microcontrollori

Un microcontrollore è un sistema elettronico, basato su un microprocessore, progettato per funzionare autosufficiente rispetto all’ambiente che lo circonda. In grado di conglobare al suo interno un elevato numero di interfacce e memorie, il dispositivo comunica con l’esterno attraverso le proprie periferiche d’uscita programmabili, interfacciandosi in questo modo con eventuali altre parti circuitali che necessitano di una comunicazione.

Architettura interna di un microcontrollore

L’architettura di un microcontrollore non è molto semplice, ma può essere riassunta in cinque parti fondamentali: un aritmetic logic unit, un program counter, un file register, una program memory e un interfaccia input output. Tutti i blocchi cooperano tra di loro sotto l’influenza di un segnale di clock, che ha la funzione di scandire il  tempo all’interno dell’integrato. La parte che risente maggiormente del clock è il  program counter (PC).  Il PC è un registro speciale di sistema adibito a memorizzare l’indirizzo del comando seguente a quello in esecuzione, facendo in modo che il microcontrollore abbia sempre un’instruzione pronta da essere eseguita. L’aritmetic logic unit (ALU), è una delle parti fondamentali di questa famiglia di integrati; infatti è la parte del controllore dedicata all’esecuzione dei calcoli matematici e alla manipolazione dei dati più complessi. Risiede in questa porzione di sistema tutta la potenza del micro stesso, e viene prevalentemente  presa in considerazione come “unità di misura” per stabilire quale tra due dispositivi è il più efficiente.  Il file register è l’insieme di tutti i  registri e di tutte le parti di memoria volatile presenti nel dispositivo. I registri di sistema sono quella parte del file register adibita alle gestione del sistema, attraverso questi indirizzi si può: configurare la memoria, impostare se un determinato piedino deve comportarsi come un ingresso o un uscita, leggere un valore in ingresso; garantiscono in questa maniera la piena collaborazione tra l’hardware e il  software del microcontrollore. La program memory è quella parte di memoria, generalmente una flash o CMOS, adibita alla memorizzazione del programma da eseguire. Le istruzioni vengono salvate sotto forma di numeri esadecimali apparentemente incomprensibili per la mente umana, ma interpretabili dal micro. Quando il  dispositivo è correttamente alimentato,  il program counter attinge direttamente a questa porzione di memoria per svolgere le proprie funzioni. Le interfacce di input output sono quella parte del dispositivo che ha il compito di comunicare con l’esterno. Per mezzo della loro costituzione fisica sono in grado di essere programmate, l’una indipendentemente dall’altra, per essere utilizzate o come ingressi o come uscita. Attraverso la figura 2 è facile rendersi conto di come sia organizzata la circuiteria inter na, ponendo l’accento principalmente sulla gestione delle comunicazioni tra le vari parti.

Figura 2: architettura interna di un microcontrollore PIC 16F84

Figura 2: architettura interna di un microcontrollore PIC 16F84

Risulta veloce e affidabile garantire un bus dati che interconnetta i vari blocchi, in modo che si riesca ad avere una trasmissione globale di informazioni tra i componenti.

Realizzazione di un progetto con microcontrollore

La realizzazione di un progetto mediante l’utilizzo di questi integrati si può dividere in due fasi: la progettazione del circuito e la scrittura del firmware. Preso in esame l’ambiente in cui dovrà operare il microcontrollore, e scelte le caratteristiche che dovrà possedere, si passa alla connessione dei vari piedini con i dispositivi interessati, realizzando in questa maniera la varia circuiteria necessaria al funzionamento. La scrittura del firmware è la parte più delicata e fondamentale di tutto il  progetto. Mediante l’utilizzo di ambienti specifici, si riuscirà ad utilizzare un linguaggio di programmazione confortevole rispetto alle richieste dell’utente, dando così la possibilità al progettista di lavorare in maniere più concisa e intuitiva. Realizzato il firmware,  e simulato il corretto funzionamento, si eseguirà la “compilazione” dello stesso trasformando il listato in un formato interpretabile dal microcontrollore.

Le due famiglie a confronto

Dispositivi così diversi ma fondamentalmente che possono essere usati per le medesime applicazioni, spesso non sono conosciuti entrambi dai progettisti/hobbisti elettronici; proprio per questo il lettore è stato trascinato in una descrizione sommaria, ma esauriente, sui principi di funzionamento di questi integrati. Le differenze sostanziali tra le famiglie vengono riassunte brevemente nei punti seguenti:

■  1-Tipo di circuiteria e sistema di funzionamento.

2-Efficienza  nell’ implementazione di un progetto.

■  3-Dotazione di periferiche e interfacce (convertitori A/D, sistemi di comunicazione).

4-Linguaggi di programmazione.

5-Ambienti di sviluppo e corredo di base.

Tipo di circuiteria e sistema  di funzionamento

Per analizzare in maniera mirata ed efficace il sistema di funzionamento dei due integrati, si prendono in considerazione la figura 1 e 2: mentre nella tipologia FPGA all’utilizzatore viene lasciata una libertà di scelta più elevata in ambito circuitale, nel microcontrollore ciò non è possibile a causa delle caratteristiche a cui deve adempiere. Quando si sceglie come cuore del circuito un FPGA, il progettista deve aver sempre ben chiaro lo schema logico e elettrico delle funzioni che dovranno essere svolte dal dispositivo; d’altro canto, affrontando la problematica con un micro, il programmatore  sarà impegnato nello sfruttare a pieno mediante il firmware  il corredo di periferiche messe a disposizione dal produttore. A causa di queste motivazioni viene classificata: la prima come una famiglia hardware e la seconda come una famiglia software.

Figura 3: FPGA serie Spartan prodotta da Xilinx.

Figura 3: FPGA serie Spartan prodotta da Xilinx.

 

Figura 4: microcontrollore serie 18F8722 prodotto da Microchip.

Figura 4: microcontrollore serie 18F8722 prodotto da Microchip.

Efficienza nell’implementazione di un progetto

L’efficienza progettuale, sinonimo anche di prestazioni, è la parte che maggiormente interessa al tecnico impegnato nello sviluppo. Viene definita come l’insieme dei punti a favore e di quelli a sfavore coinvolti nell’utilizzo del dispositivo. Nel caso in esame si notano le maggiori differenze in: modalità d’esecuzione, velocità d’esecuzione e consumo energetico. In base alle caratteristiche di FPGA e microcontrollori, riassunte precedentemente, si capisce che gioca un ruolo fondamentale per la selezione tra i due integrati la modalità d’esecuzione. Negli FPGA ogni calcolo, comparazione o scelta, viene affidata ad una rete combinatoria, spesso molto complessa, ma efficace. Nei microcontrollori invece tutto viene gestito come un’istruzione, un parametro della memoria che deve essere sommato ad un altro, confrontato o sostituito. Si capisce bene che fino a che si eseguono calcoli aritmetici di facile interpretazione ciò non da nessun vantaggio, ma quando si comincia ad utilizzare formule complesse, conversioni e vari parametri la semplicità del software ha la meglio sull’hardware. In qualsiasi periferica programmabile che esegue istruzioni in rapida successione, la velocità è sempre un tasto dolente a causa dell’enorme numero di ritardi che si accumulano tra i vari controlli. Proprio per questo le FPGA, come la maggior parte degli integrati discreti, avendo tempi di latenza brevissimi riescono ad essere applicate in circuiti che richiedono risposte rapide come: lettori dvd, telefoni cellulari e televisori.  Il consumo energetico, preso in esame quando si ha la necessita di realizzare un dispositivo portatile, risulta essere pressappoco identico durante le varie fasi dell’esecuzione. Vantaggio dei microcontrollori però, risulta essere la possibilità di passare ad una condizione di risparmio energetico, “spegnendo” tutte le parti non interessate in quel preciso istante. Le FPGA dal canto loro, a causa della loro disposizione circuitale interna, non hanno la possibilità di levare alimentazione ai blocchi logici, in quanto così facendo si bloccherebbe l’intero sistema.

Dotazione di periferiche e interfacce

Lo sviluppo di nuovi standard di comunicazione e l’invenzione di nuovi prodotti, ha fatto sì che i progettisti aumentassero le dotazioni di base dei singoli chip. Le periferiche integrate di un microcontrollore dipendono dalla fascia di prezzo nella quale ci si addentra. In ogni modo si parte con: un eeprom, un temporizzatore, delle interfacce di comunicazione; per arrivare a micro che conglobano: convertitori A/D, modulatori PWM, comparatori, standard USB e standard RS485. Dove un microcontrollore ha a disposi zione blocchi in grado di comunicare, convertire o memorizzare interfacciati con il centro d’elaborazione interno, un FPGA si trova in quest’ambito un gradino al di sotto. Certo, recentemente hanno fatto la comparsa nel mercato FPGA con convertitori A/D e pronte alla comunicazione seriale, ma in ogni caso a parità di dotazioni  i micro risultano essere più efficaci e concorrenziali.

Linguaggi  di programmazione

In ogni progetto che sfrutta un integrato programmabile, la parte che forse maggiormente affascina è quella dedicata al listato. Entrambi  i componenti presi in esame sono corredati da vari linguaggi di programmazione, a volte proprietari di aziende specializzate che li rendono disponibili a pagamento, e altre volte gratuiti e liberi. Prendendo in considerazione le FPGA dei maggiori produttori del momento Xilinx, Altera o Atmel, queste vengono programmate prevalentemente usando il VHDL.  Il VHDL è un linguaggio di programmazione sia visuale che a codice; permette al programmatore di realizzare parti del listato piazzando componenti elettronici e altre parti scrivendo codice in linguaggio C. Risulta molto versatile per applicazioni complesse e per l’interlacciamento tra i vari blocchi interni alle FPGA. D’altro canto, i microcontrollori prodotti da aziende quali Microchip, ST o Motorola, pongono al primo posto l’assembler. L’assembler, conosciuto anche come linguaggio macchina, è uno tra i sistemi  di scrittura del codice più datati ma tutt’ora in voga. Il suo punto di forza è che con poche istruzioni riesce a garantire  il pieno controllo di tutte le parti del dispositivo programmato, facendo sì che il tecnico sfrutti a pieno l’utilità messe a sua disposizione. Negli ultimi anni aziende impegnate nel settore della programmazione hanno reso disponibile, ai professionisti e agli hobbisti, nuovi tools che impiegano linguaggi più ad alto livello quali: Basic, C, C++ o Java. In ogni caso però si tratta di delle emulazioni, che non fanno altro che convertire un listato scritto in un linguaggio più semplice in assembler.

Ambienti di sviluppo e corredo  di base

Con ambiente di sviluppo, s’intende quel software per computer in grado di convertire il listato scritto nel linguaggio di programmazione, in un linguaggio comprensibile dalla periferica utilizzata nel progetto. La maggior parte dei produttori di FPGA o microcontrollori rende disponibile nel mercato gratuitamente  il proprio ambiente di sviluppo. Ciò che comporta un costo aggiuntivo durante la fase di studio è il costo del programmatore stesso, ovvero quel dispositivo che fa da “ponte” tra il PC e l’integrato stesso. Ogni azienda rende disponibile il proprio tools di programmazione, a volte con prezzi esorbitanti, ma perfettamente funzionale e aggiornabile successivamente nel caso d’uscita di nuove interfacce.

Conclusioni

In definitiva, entrambi i dispositivi,  con le opportune modifiche al circuito esterno, possono essere impiegati nei medesimi progetti. A mio avviso quindi non esiste ne un migliore ne un peggiore, ma soltanto il  più adatto a svolgere la funzione richiesta. E’ compito quindi del progettista scegliere quale utilizzare, tra l’innumerevole collezione di dispositivi presenti nel mercato.