FPGA's vs Microcontrollers [chiuso]


36

Ho lavorato sulla famiglia Arduino (in particolare il Sanguino), costruito alcuni semplici dispositivi e un semplice fototropio. Sono quindi abbastanza a mio agio con i microcontrollori, in particolare quelli di Atmel. Sono curioso di sapere come differiscono gli FPGA dai microcontrollori standard. Vengo da un background tecnico (programmazione C / C ++) e quindi amerei le risposte tecniche. Tieni a mente che sono un principiante (relativamente alla mia esperienza p / e) nel dominio dell'elettronica. :)

Ho esaminato questa query ed è stato positivo, ma sto cercando ulteriori dettagli più approfonditi.

Grazie! Sushrut.


Addendum - Esistono buoni esempi nel mondo reale che usano architetture ibride, cioè combinando gli FPGA con i microcontrollori?
Sushrut J Mair,

Sushrut J Mair - In genere quando si ha un FPGA e bisogno di un micro, micro viene implementato in FPGA.
Connor Wolf,

Sì, nome falso, d'accordo. Tuttavia, stavo cercando di trovare casi reali in cui sia FPGA che MCU vengano utilizzati per progettare un sistema. L'idea è che la parte FPGA del progetto sia utilizzata per implementare h / w 'evolvibili' che rispondano e si trasformino secondo la modifica degli input al sistema mentre l'elaborazione logica di base viene eseguita dall'MCU.
Sushrut J Mair,

Risposte:


48

La progettazione per un FPGA richiede un Hardware Description Language (HDL). Gli HDL non sono assolutamente nulla come C. Mentre un programma C è una serie sequenziale di istruzioni e deve contorcersi per ottenere un'esecuzione parallela, un HDL descrive un circuito concorrente e deve contorcersi per ottenere l'esecuzione sequenziale. È un mondo molto diverso e se provi a costruire un circuito in un FPGA mentre pensi come uno sviluppatore di software, ti farà male.

Un MCU è limitato nel tempo. Per svolgere più lavoro, sono necessari più cicli del processore. Gli orologi hanno limiti molto reali alle loro frequenze, quindi è facile colpire un muro computazionale. Tuttavia, un FPGA ha uno spazio limitato. Per svolgere più lavoro, è sufficiente aggiungere più circuiti. Se il tuo FPGA non è abbastanza grande, puoi acquistarne uno più grande. È molto difficile costruire un circuito che non si adatta al più grande FPGA, e anche se lo fai ci sono note di app che descrivono come collegare in cascata gli FPGA.

Gli FPGA si concentrano maggiormente sull'esecuzione parallela. A volte devi preoccuparti di quanto tempo impiega l'ISR della tua MCU a servire l'interruzione e se sarai in grado di raggiungere i tuoi limiti in tempo reale. Tuttavia, in FPGA ci sono molte macchine a stati finiti (FSM) in esecuzione tutto il tempo. Sono come "femto-controllori", come piccole nuvole di logica di controllo. Funzionano tutti contemporaneamente, quindi non c'è motivo di preoccuparsi di perdere un interrupt. Potresti avere un FSM per l'interfaccia con un ADC, un altro FSM per l'interfaccia con l'indirizzo / bus dati di un microcontrollore, un altro FSM per lo streaming di dati a un codec stereo, un altro FSM per bufferizzare il flusso di dati dall'ADC al codec ... è necessario utilizzare un simulatore per assicurarsi che tutti gli FSM cantino in armonia.

Gli FPGA sono il sogno bagnato di un progettista di layout PCB. Sono estremamente configurabili. Puoi avere molte interfacce logiche diverse (LVTTL, LVCMOS, LVDS, ecc.), Con tensioni variabili e persino intensità di azionamento (quindi non hai bisogno di resistori di terminazione in serie). I pin sono sostituibili; hai mai visto un bus di indirizzo MCU in cui i pin erano sparsi attorno al chip? Il progettista di PCB probabilmente deve eliminare un sacco di vie solo per collegare correttamente tutti i segnali. Con un FPGA, il progettista di PCB può quindi eseguire i segnali nel chip praticamente in qualsiasi ordine sia conveniente, quindi il design può essere annotato indietro nella toolchain FPGA.

Gli FPGA hanno anche molti bei giocattoli di fantasia. Uno dei miei preferiti è il Digital Clock Manager nei chip Xilinx. Gli dai un segnale di clock e ne può ricavarne altri quattro usando una grande varietà di moltiplicatori e divisori di frequenza, tutti con un ciclo di funzionamento incontaminato del 50% e il 100% in fase ... e può anche tenere conto del disallineamento dell'orologio che deriva da ritardi di propagazione esterni al chip!

EDIT (risposta all'addendum):

È possibile posizionare un "soft core" in un FPGA. Stai letteralmente collegando un circuito di microcontrollore, o piuttosto stai probabilmente facendo cadere il circuito di qualcun altro nel tuo progetto, come PicoBlaze di Xilinx o MicroBlaze o Nios di Altera. Ma come i compilatori C-> VHDL, questi core tendono ad essere un po 'gonfi e lenti rispetto all'utilizzo di FSM e datapath o di un vero microcontrollore. Gli strumenti di sviluppo possono anche aggiungere una notevole complessità al processo di progettazione, il che può essere negativo quando gli FPGA sono già chip estremamente complessi.

Ci sono anche alcuni FPGA che hanno "hard core" incorporati, come la serie Virtex4 di Xilinx che ha un vero IBM PowerPC dedicato con tessuto FPGA attorno ad esso.

EDIT2 (risposta al commento):

Penso di vedere ora ... stai chiedendo di collegare un MCU discreto a un FPGA; cioè due chip separati. Ci sono buoni motivi per farlo; gli FPGA che hanno core duri e quelli abbastanza grandi da supportare decenti soft core sono generalmente mostri con molte centinaia di pin che finiscono per richiedere un pacchetto BGA, il che aumenta facilmente la difficoltà di progettare un PCB di un fattore 10.

C è molto più semplice, quindi le MCU hanno sicuramente il loro posto di lavoro in tandem con un FPGA. Dato che è più facile scrivere C, potresti scrivere i "cervelli" o l'algoritmo centrale nell'MCU, mentre l'FPGA può implementare sotto-algoritmi che potrebbero richiedere accelerazioni. Prova a mettere le cose che cambiano nel codice C, perché è più facile cambiare e lascia che l'FPGA sia roba di tipo più dedicata che non cambierà spesso.

Gli strumenti di progettazione MCU sono anche più facili da usare. Gli strumenti di progettazione impiegano diversi minuti per creare il file bit FPGA, anche per progetti un po 'semplici, ma i programmi MCU complessi richiedono in genere alcuni secondi. C'è molto, molto meno da sbagliare con l'MCU, quindi sono anche più facili da eseguire il debug ... Non riesco a capire quanto possano essere complessi gli FPGA. Hai davvero bisogno di ottenere il foglio dati per quello che hai e dovresti provare a leggere ogni pagina di esso. Lo so, sono poche centinaia di pagine ... fallo comunque.

Il modo migliore per collegarli è utilizzare una MCU con un indirizzo esterno e un bus dati. Quindi è possibile semplicemente mappare in memoria i circuiti FPGA nell'MCU e aggiungere i propri "registri" che hanno ciascuno il proprio indirizzo. Ora l'FPGA può aggiungere periferiche personalizzate, come un timer a 32 bit in grado di bloccare tutti e 4 i byte contemporaneamente quando viene letto il primo byte per evitare overflow tra le letture a 8 bit. Puoi anche usarlo come logica di colla per mappare più periferiche da altri chip, come un ADC separato.

Infine, alcune MCU sono progettate per l'uso con un "master esterno" come un FPGA. Cypress produce alcune MCU USB con 8051 all'interno, ma l'intento è che i dati USB vengano prodotti / consumati ad esempio da un FPGA.


Questa è una buona informazione, grazie. Ho sentito parlare di compilatori da C / C ++ a HDL. Li hai provati affatto?
Sushrut J Mair,

Sono ... va bene. Per un singolo blocco logico, non è poi così male. Ma non scriverei un intero progetto attraverso quel tipo di compilatore. Non sono troppo efficienti perché le lingue sono così incredibilmente diverse ... devi usare convenzioni speciali, non prendono solo un vecchio codice ANSI C.
ajs410,

Grazie, è utile Ho ordinato il kit di sviluppo XP2 Brevia di Lattice Semiconductor. Ho intenzione di provare alcuni compilatori da HDL a C una volta che mi sento a mio agio con i concetti base di progettazione FPGA.
Sushrut J Mair,

Ho appena visto la risposta al mio addendum nella query originale. Grazie - quindi stai dicendo che praticamente parlando (almeno con la tecnologia di oggi), un'architettura ibrida di un MCU standard + un FPGA ha un valore aggiunto molto piccolo per essere realmente utilizzabile nelle situazioni del mondo reale?
Sushrut J Mair,

Eccezionale. Grazie ajs410. Spero di passare qualche settimana a lanciarmi su FPGA prima di entrare nelle entusiasmanti possibilità dell'arco ibrido!
Sushrut J Mair,

10

"esempi nel mondo reale ... combinando FPGA con microcontrollori?"

In linea di principio, un FPGA sufficientemente grande da solo può fare tutto ciò che può fare un FPGA più un microcontrollore, magari implementando una CPU soft all'interno dell'FPGA. In pratica, un determinato livello di prestazioni ha spesso costi di parti inferiori e richiede una potenza inferiore quando implementato con un FPGA più un microcontrollore separato rispetto ai soli FPGA (o solo MCU). Ecco alcuni dei dispositivi più famosi con FPGA e microcontrollori integrati:

  • La fotocamera di Elphel ; Elphel Project Wiki ha un FPGA Xilinx (R) Spartan 3e 1200K gates e un processore ETRAX FS con GNU / Linux.
  • Il TS-7500 dispone di una LUT 5000 Lattice FPGA e un 250MHz Cavium ARM9 CPU in grado di eseguire Linux.
  • La scheda Balloon ha un FPGA Xilinx Spartan e una CPU ARM
  • diversi SBC Linux Teeny weeny includono sia un FPGA che una CPU
  • Il wiki del Progetto Armadeus documenta alcune schede con sia un FPGA Xilinx Spartan-3 che una CPU ARM9 a 400 MHz.
  • La Handy Board Blackfin include sia un processore FPGA Xilinx Spartan 3e che un processore Blackfin® ADSP-BF537 Analog Devices da 600 MHz. (Non ha una MMU, quindi non può eseguire Linux completo, ma può eseguire uClinux).
  • Il "Minimig" (mini Amiga) comprende un Xilinx Spartan-3 FPGA, una CPU M68000, ed un piccolo PIC MCU come agenti di controllo del disco.

4

Spesso gli FPGA vengono utilizzati in modo specifico per svolgere attività che un microcontrollore non può svolgere in modo efficiente, come operazioni altamente parallele o a bassa latenza, operanti in più domini di clock o eseguendo logiche personalizzate a velocità hardware. Come tale, faranno il lavoro pesante e raramente hai bisogno di un MCU per essere centrale nel design: potrebbero essere spostati in posizioni di gestione, come il caricamento del flusso di configurazione. Un esempio di ciò è il PIC o ARM in Minimig , che implementa l'interfaccia di archiviazione.

Alcuni prodotti sfocano le linee, tuttavia. Qualche esempio:

  1. FPGA più grandi tendono ad avere CPU rigide integrate (spesso i progetti più grandi ne hanno bisogno), così come hanno blocchi RAM e moltiplicatori
  2. Alcuni microcontrollori mirano a operazioni parallele (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. Alcuni chip sono progettati come ibridi (Cypress PSoC, Atmel FPSLIC)

Proveniente da un background di programmazione imperativo, è abbastanza una regolazione per la progettazione in hardware in quanto è necessario ottenere i vantaggi degli FPGA. Tuttavia, troverai un'esperienza utile anche altrove.


1

Non c'è davvero alcuna differenza tra un MCU come un AVR e uno programmato in un FPGA. Il sito OpenCores ha un codice VHDL per un AVR che può essere utilizzato in un FPGA. Puoi studiarlo e vedere come funziona e persino provarlo tu stesso in un simulatore senza acquistare una scheda FPGA adatta.


1
Spesso trovo che gli FPGA debbano funzionare a una velocità di clock inferiore per lo stesso MCU, o saranno significativamente più costosi. Nel caso più costoso puoi facilmente implementare hardware aggiuntivo tra il controller e i pin esterni, spesso ne vale la pena.
Kortuk,

Se è comunque necessario un FPGA nel sistema, l'MCU è "gratuito".
Leon Heller,

1

I microcontrollori sono circuiti digitali che eseguono i comandi dalla sua memoria di programma in sequenza uno dopo l'altro. Il circuito hardware digitale di un microcontrollore è fisso e le interconnessioni tra le diverse porte che compongono il circuito digitale sono permanenti e sono incise sul silicio. Dove come FPGA possono essere pensati come un pool di porte digitali (in realtà, invece sono presenti i lut) che hanno interconnessioni programmabili. Ora qualsiasi circuito digitale (anche un microcontrollore) può essere realizzato sull'FPGA programmando le interconnessioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.