Perché gli FPGA non sono onnipresenti?


65

Leggendo sugli FPGA, se ho capito bene, sono fondamentalmente circuiti di gate logici completamente configurabili. Essendo questo, si può progettare qualsiasi cosa con loro. Si può progettare tutto nel modo più personalizzato possibile e, quindi, soddisfare gli stessi fini in un modo molto più efficiente che può essere ottenuto usando un microcontrollore. Detto questo, sembra che un FPGA batte un microcontrollore in qualsiasi momento, in qualsiasi giorno. Quindi la mia domanda è: se gli FPGA sono davvero così fantastici, cosa li impedisce di essere molto più diffusi dei microcontrollori? Da questo punto di vista, per me sembra che gli FPGA avrebbero dovuto spazzare via i microcontrollori molto tempo fa. Allora perché non è così? È il costo, la difficoltà di programmare un FPGA o completamente qualcos'altro?



Potresti anche voler leggere questa discussione: electronics.stackexchange.com/questions/4382/…
Tom L.

43
Gli elicotteri sono più flessibili delle automobili, quindi perché qualcuno usa ancora un'auto per recarsi al lavoro?
Olin Lathrop,

15
Perché tutte le società FPGA offrono strumenti proprietari assolutamente orribili che hanno un'enorme curva di apprendimento e non sono accessibili alla maggior parte degli sviluppatori. Sostituiscilo con una toolchain completamente aperta e probabilmente sarebbero onnipresenti.
R ..

@R .. ... o almeno non una scelta dell'ultima opzione assoluta.
Dan Neely,

Risposte:


94

Stai ignorando molti fattori che vanno a fare le scelte progettuali:

  1. Costo . Gli FPGA sono più costosi dei micro per la stessa complessità della logica.

  2. Complessità logica . Il codice eseguibile può implementare una logica molto più complicata rispetto allo stesso numero di gate nel micro utilizzato direttamente.

  3. Facilità di sviluppo . È più facile scrivere codice eseguibile che definire la logica per tutti i problemi, tranne piccoli. Anche i progetti di microcontrollori modesti hanno migliaia di righe di codice. Lo sviluppo di definizioni logiche equivalenti richiederebbe molto più tempo ed è molto più difficile eseguire il debug e la verifica.

  4. Consumo di energia . Poiché gli FPGA sono destinati ad operazioni ad alta velocità che i micro non sono in grado di gestire (altrimenti si userebbe un micro), non sono ottimizzati per la bassa potenza. Ciò li rende inadatti per alcune applicazioni a bassa potenza. Alcuni micro hanno correnti di sonno inferiori a 1 µA e possono funzionare solo con pochi µA a frequenze di clock lente. Prova a trovare un FPGA in grado di farlo.

Il vantaggio principale degli FPGA rispetto ai micro è che sono più veloci e possono fare più cose in parallelo. A parte questo, preferiresti usare un micro. Pertanto, nel processo di progettazione, di solito inizi con un micro, quindi vai a malincuore a un FPGA quando hai davvero bisogno della velocità e / o delle operazioni simultanee ad alta velocità. Anche allora, implementate solo le parti critiche per la velocità in un FPGA e lasciate le funzioni di controllo della velocità più bassa e simili nel micro.


2
"Anche allora, implementate solo le parti critiche per la velocità in un FPGA e lasciate le funzioni di controllo della velocità più bassa e simili nel micro." E questo perché lo sviluppo di un FPGA è un dolore, giusto?
Utku,

2
@Utku: Sì, questo è il motivo 3 sopra, anche se di solito si applicano anche i motivi 1-2. Gli FPGA non sono economici quanto i micro per la stessa attività, a meno che tale attività non abbia requisiti di velocità così elevati che un micro non può semplicemente farlo.
Olin Lathrop,

4
È facile dire che questa risposta è scritta dal punto di vista dell'utente CPU. "vai a malincuore a un FPGA quando hai davvero bisogno della velocità e / o delle operazioni simultanee ad alta velocità". Non sono poi così male. Ci sono applicazioni in cui non si potrebbe nemmeno pensare di utilizzare una CPU su un FPGA.
stanri,

26
Il modo in cui lo spiego di solito: è difficile fare le cose in parallelo su una CPU, ed è difficile fare le cose in serie in un FPGA.
Ben Jackson,

14
Una cosa importante da ricordare sugli FPGA: la riconfigurabilità della logica ha un prezzo: la logica equivalente implementata da un FPGA è molto meno complicata rispetto allo stesso FPGA. Tutte le tabelle di ricerca, i componenti della matrice di routing, ecc. Consumano molta più area di silicio e potenza rispetto alle implementazioni equivalenti in logica logica. Ciò significa che gli FPGA sono peggiori in tutte le metriche delle prestazioni - consumo di energia attiva e inattiva, densità, velocità di clock, ecc. - rispetto allo sviluppo direttamente in silicio delle stesse funzionalità di microcontrollori, CPU generiche e FPGA stesso.
alex.forencich,

45

Una distinzione che non ho visto approfondito qui è che gli FPGA sono usati e si comportano in un modo completamente diverso dai processori.

Un FPGA è davvero bravo a fare esattamente lo stesso compito, ancora e ancora. Ad esempio, l'elaborazione di segnali video, audio o RF. O instradamento di pacchetti Ethernet. O simulando il flusso del fluido. Ogni situazione in cui hai un sacco di lo stesso tipo di dati che ti vengono lanciati molto velocemente e vuoi gestirli tutti allo stesso modo. Oppure vuoi eseguire lo stesso algoritmo ripetutamente. L'FPGA non ha davvero "compiti" che si avviano e si fermano [1], il suo intero compito è fare la stessa cosa con qualunque dato ottenga, finché rimane attivo. Non cambia marcia, non fa nient'altro. È l'ultimo lavoratore della linea di produzione. Farà la stessa cosa ripetutamente, il più velocemente possibile, per sempre.

Le CPU, d'altra parte, sono l'epitome della flessibilità. Possono essere programmati per fare qualsiasi cosa e possono essere programmati per fare più cose contemporaneamente allo stesso tempo. Hanno compiti che si avviano e si fermano, cambiano marcia, multitasking, cambiano e cambiano costantemente le funzioni.

FPGA e CPU sono opposti completi. La merce della CPU è il tempo - deve fare le cose più velocemente. Più veloce viene eseguita l'applicazione, meglio è.

La merce dell'FPGA è lo spazio. Il tuo FPGA è solo così grande, e ci sono solo così tante porte disponibili per eseguire l'attività che desideri. La maggior parte delle volte, il problema è più grande della velocità [2].

È possibile fare in modo che un FPGA si comporti come una CPU. È possibile inserire un core IP CPU in un FPGA, tuttavia è molto difficile giustificarlo a causa dei motivi descritti da altri [3]. L'FPGA e la CPU sono opposti, entrambi hanno i loro punti di forza e di debolezza, ed entrambi hanno il loro posto di conseguenza.


Appunti:

1) Un FPGA potrebbe essere progettato per eseguire diverse attività, ma anche in quel caso sarebbe un numero specifico per il quale è stato pre-progettato.

2) La velocità è anche una specifica di progettazione FPGA. È davvero un compromesso tra velocità e dimensioni.

3) L'inserimento di una CPU in un FPGA viene eseguito relativamente spesso, tuttavia viene fatto caso per caso, a seconda delle applicazioni specifiche. Ad esempio, se hai bisogno di un microcontrollore davvero minuscolo e hai spazio FPGA aggiuntivo.

E infine: questa risposta è una grande semplificazione: gli FPGA sono utilizzati in modi estremamente vari e complessi e questa è una breve panoramica sul modo in cui vengono utilizzati in generale.


1
"O instradare i pacchetti ethernet. O simulare il flusso del fluido." Anche se, per quanto ne so, l'ASIC viene solitamente utilizzato per il primo (nella produzione di massa, almeno) e le GPU sono più veloci, più economiche, a bassa potenza e più facilmente programmabili per il secondo.
reirab

1
@reirab Questi erano esempi del tipo di operazioni che gli FPGA possono fare bene, mi sono venuti in mente perché sono entrambe applicazioni per le quali ho codificato personalmente FPGA. C'è più di un modo per scuoiare un gatto. La scelta del dispositivo dipende da molti fattori di progettazione.
stanri,

5
@reirab tutto ciò che un FPGA può fare un ASIC può fare per una potenza inferiore e un costo di produzione marginale inferiore. I vantaggi di FPGA sono la prototipazione e la produzione a basso volume perché i costi iniziali per un ASIC sono molto più grandi; il che significa che quest'ultimo ha senso solo quando il design è finalizzato e tu ne fai molti.
Dan Neely,

È strano affermare che una CPU è più flessibile di un FPGA, considerando che è possibile implementare facilmente una CPU all'interno di un FPGA (qualsiasi studente CS serio dovrebbe farlo almeno una volta). Un FPGA è un concetto molto più basso di una CPU, quindi non ha molto senso confrontarli direttamente.
Voo

Questa risposta mi dà davvero fastidio. "La merce della CPU è il tempo", "La merce FPGA è lo spazio". Eh? ASIC e CPU sono opposti polari e FPGA siedono nel mezzo ottenendo sia il meglio che il peggio di entrambi i mondi.
Jotorious il

20

Come dice Olin, qualcosa come un micro è più efficiente per molte attività e quasi sempre troverai un micro usato ovunque appaia un FPGA. La superficie coltivata del silicio utilizzato (che si traduce in costi in modo non lineare) e i consumi energetici sono molto inferiori. Per questo motivo, non è raro implementare un MCU "soft" su un FPGA, ma i costi e le prestazioni di un tale micro sono deludenti.

Alcuni FPGA moderni contengono uno o più core "duri" come l'onnipresente serie ARM. Inoltre, possono contenere blocchi di memoria dedicati poiché è davvero inefficiente liberare memoria dai gate. Un micro core a 32 bit occupa una piccola parte dell'area di silicio in un tipico FPGA, il che ti dà un'idea dei costi relativi.

Lo sviluppo è significativamente più difficile e l'IP tende a non essere così liberamente disponibile come per i micro e le soluzioni SOC dedicate, ad esempio controller LCD, interfacce PCI, MAC Ethernet. Il motivo è in parte il fatto che, rivelando le descrizioni logiche dell'HDL, trasferiscono il progetto non solo l'istanza del progetto. Un altro motivo è che le prestazioni dipendono dal layout della logica nell'FPGA, il che richiede molto sforzo durante lo sviluppo.

Un'ulteriore complicazione è che gli FPGA più complessi sono basati su RAM per la configurazione e i costi di processo sono tali che è necessaria memoria esterna non volatile per memorizzare la memoria di configurazione e programma per qualsiasi MCU a bordo. Questa memoria deve essere caricata nella RAM all'accensione.

Gli FPGA sono strumenti estremamente utili nella casella degli strumenti, ma presto non sostituiranno universalmente MCU o ASIC.


10

Il miglior uso del silicio per un lavoro è un ASIC, niente sprecato, ma hanno un'enorme curva di apprendimento, NRE e inflessibilità.

Esistono due modi per integrare la flessibilità in un chip. a) Avere un ALU ottimizzato per lo spazio e riutilizzarlo più volte sui dati memorizzati. Questo si chiama MCU e richiede una vasta area di silicio che "non sta facendo nulla", la memoria del programma, ampi bus che vanno da un'unità all'altra e interruttori di accesso al bus. b) Avere una logica a grana fine, con alcune parti opzionali ottimizzate nello spazio come moltiplicatori, piccole RAM e semplici CPU. Questo è chiamato FPGA e richiede una vasta area di silicio che "non fa nulla", interruttori programmabili e linee di connessione.

Ovviamente con queste strutture, le MCU funzionano meglio per le attività che possono essere suddivise in blocchi seriali e le FPGA funzionano meglio per le attività che richiedono operazioni parallele ad alta velocità. Quando l'applicazione è pesante e il costo è dominato dal costo del silicio, è così che verranno naturalmente utilizzati i due tipi.

Quando l'applicazione è leggera ma ad alto volume, il costo è dominato dall'imballaggio piuttosto che dal silicio, ed entrambi i tipi sono praticabili. Altera ha alcuni FPGA molto piccoli a bassissima potenza per competere con MCU da un dollaro a manciata.

Per le app a basso volume, il costo di sviluppo tende a dominare e lì gli MCU vincono, supponendo che abbiano la velocità


9

In termini di consumo energetico e utilizzo del silicio, un FPGA è molto scarso rispetto a un microprocessore.

Un FPGA consuma gran parte della sua area di silicio nei circuiti di configurazione logica qualcosa che non si applica a un micro. Devono essere disponibili molte più interconnessioni di quante sarebbero necessarie su un'implementazione dedicata di un microprocessore.

L'FPGA consuma più energia di un ASIC dedicato come un microprocessore poiché la logica non viene implementata in modo efficiente.

Qualsiasi funzione che può essere implementata in un FPGA può essere eseguita in modo più efficiente, più economico, con un consumo di energia inferiore, minore spazio sulla scheda ecc. In un ASIC dedicato. Ciò presuppone che i volumi siano abbastanza grandi da compensare l'NRE.


Se l'obiettivo è implementare l'intero set di funzionalità del microprocessore, sicuramente. Una volta che si passa a un'attività specifica, è possibile identificare un sacco di silicio sprecato anche nel microcontrollore, forse quel motore di crittografia è uno spazio sprecato nel progetto. O la periferica CAN? O l'unità a virgola mobile? Il miglior utilizzo di FPGA è inferiore, ma non si subisce lo 0% di utilizzo in aree estese come fa un microcontrollore. (D'altra parte, con il clock gating, avere uno 0% di utilizzo di grandi circuiti è molto desiderabile dal punto di vista della potenza)
Ben Voigt

8

I sistemi basati su microprocessore, e successivamente i microcontrollori, sono stati in grado di raggiungere un enorme grado di funzionalità grazie alla loro capacità di utilizzare molti dei singoli circuiti in essi contenuti per svolgere molti compiti diversi in momenti diversi. Penso che sia istruttivo confrontare la macchina arcade Tank, progettata nel 1976, con il gioco Combat che gira sulla seconda macchina da gioco al mondo controllata da microprocessore, l'Atari 2600. Mentre ci sono alcune differenze nel gameplay, l'hardware Atari 2600 è stato essenzialmente progettato implementare giochi come Tank a costi minimi; il fatto che potesse essere fatto per giocare a giochi diversi inserendo cartucce ROM diverse era un bel vantaggio.

Il gioco Tank consente a due giocatori di guidare carri armati intorno allo schermo e sparare colpi l'uno contro l'altro. Ha segnalini "slip" per la posizione X e Y di ogni carro armato, la posizione X e Y dei colpi di ciascun giocatore, il contatore su / giù per l'angolo di ciascun giocatore e l'angolo di ciascun giocatore, un contatore per il punteggio di ciascun giocatore, raggio di raggi X e Y contatori di posizione e molti circuiti di controllo oltre a queste cose. Ha hardware per recuperare i dati del campo di gioco dalla ROM e visualizzarli, così come hardware per recuperare le forme per i carri armati dei due giocatori e punteggi dalla ROM e visualizzarli.

L'Atari 2600 ha un contatore di scorrimento per le posizioni orizzontali di ciascuno dei due oggetti giocatore, ciascuno dei due oggetti missilistici e un oggetto aggiuntivo chiamato "palla" che non è usato in combattimento ma è usato in alcuni altri giochi. Per ciascuno degli oggetti giocatore, ha l'hardware per produrre un pattern memorizzato in un latch a 8 bit, così come un latch "ritardato" a otto bit per ogni giocatore che viene copiato nel latch primario a 8 bit ogni volta che l'altro la forma è aggiornata. Ha anche un contatore di posizione del raggio orizzontale e un fermo a forma di campo di gioco a 20 bit che viene emesso sullo schermo due volte per linea di scansione, con la copia del lato destro che appare come ripetizione o riflesso della sinistra. Ha hardware per rilevare le collisioni, ma non per fare nulla in conseguenza di esse. Lo fa Non non ha hardware per le posizioni verticali di alcun oggetto, né per la posizione verticale del raggio raster (!), né ha hardware associato alla conservazione del punteggio, alla visualizzazione del punteggio, alla durata del gioco, ecc.

Tutte le funzioni per le quali il 2600 omette l'hardware sono gestite dal software nella cartuccia. È necessario solo verificare la posizione verticale di ciascun oggetto rispetto alla posizione del raggio raster una volta per linea di scansione, è necessario solo aggiornare il punteggio del giocatore e il tempo di gioco rimanente al massimo uno per fotogramma, i punteggi dei giocatori sono memorizzati su linee di scansione sopra il campo di gioco e quindi potrebbe condividere lo stesso hardware utilizzato per il campo di gioco, ecc.

L'approccio normale all'implementazione di un gioco come "Tank" in un FPGA sarebbe quello di utilizzare circuiti separati per funzioni diverse più o meno allo stesso modo della macchina arcade del 1976. Un tale approccio funzionerebbe, ma userebbe una notevole quantità di hardware. Un approccio basato su microprocessore potrebbe eliminare più della metà dell'hardware in cambio dell'aggiunta di un microprocessore, che conterrebbe probabilmente meno circuiti rispetto all'hardware che ha sostituito (il 2600 potrebbe implementare giochi molto più sofisticati di Tank, che richiederebbe molto più hardware se non utilizzavano un microprocessore).

Gli FPGA sono eccellenti nei casi in cui è necessario un dispositivo in grado di eseguire contemporaneamente molte attività semplici . I sistemi basati su microprocessore (o basati su microcontrollore) sono generalmente migliori, tuttavia, nei casi in cui ci sono molte attività che devono essere eseguite, ma non devono essere elaborate contemporaneamente, perché rendono facile l'uso di una piccola quantità di circuiti per realizzare un gran numero di scopi distinti.


Non potresti anche posare mine? ;-)
Scott Seidman,

@ScottSeidman: la macchina arcade aveva alcune mine in posizioni cablate, che venivano disegnate come X. Sarebbe stato molto difficile per il 2600 mostrare le mine come X mentre mostravano sia i giocatori sia i missili. Se a uno non dispiacesse avere lo sfarfallio delle mine a 60Hz sarebbe stato possibile utilizzare alcuni trucchi che sono stati scoperti in seguito, ma avrebbe richiesto più codice (COMBAT è una cartuccia da 2K che è praticamente piena - anche i due byte inutilizzati Il vettore BRK / IRQ a $ FFFE / FFFF viene utilizzato per contenere una tabella a due byte!).
supercat

Probabilmente sarebbe stato possibile per Combat implementare le miniere come quadrati lampeggianti se fosse stato disposto a rinunciare ad alcune delle sue altre opzioni come il tiro a segno, ecc. Ma penso che Joe Decuir (programmatore) abbia fatto un buon lavoro nella scelta delle opzioni giocabili. La mia unica preoccupazione è che il biplano vs bombardiere avrebbe potuto essere più divertente se il bombardiere fosse uno sprite 2x anziché 4x.
supercat

5

È interamente il costo. Quando un micro può arrivare a un minimo di 30 centesimi, un FPGA economico si trova nel territorio di $ 5. Il costo potrebbe non sembrare così alto, ma quando si guadagna un milione di un nuovo giocattolo scoreggia da vendere a $ 10, il prezzo dell'FPGA uccide i tuoi profitti.


6
Il costo è certamente un problema, ma dire che la differenza è interamente il costo è ingenuo come pensare che tutti i micron possano essere sostituiti da FPGA.
Olin Lathrop,

@OlinLathrop se il costo non era un problema, qualsiasi cosa un micro può fare, può essere fatto da un FPGA. Ciò è stato dimostrato dalla capacità di un FPGA di contenere un nucleo di microcontrollore morbido. Il problema è che un FPGA che può contenere un tale core è almeno e l'ordine di grandezza è più costoso del micro core che viene emulato.
vini_i,

Il costo può significare molto più del prezzo per unità, ma questo è tutto ciò che si desidera gettare in questa analisi.
Scott Seidman,

2
Non so dire se stai deliberatamente fingendo di perdere il punto, o se sei solo denso. Ad ogni modo, stai rispondendo a qualcosa che nessuno ha detto. Tutti concordano sul fatto che gli FPGA costano di più e che il costo è un problema. Ma ancora una volta, affermare che è l' unico problema è semplicemente sbagliato. Se ti dessi un sacco di micro e FPGA gratuiti, ci sono ancora ragioni significative per cui dovresti usare i micro rispetto agli FPGA in molti progetti.
Olin Lathrop,

4
@sleb: No, la differenza di costo non è dovuta solo al volume. L'area di silicio richiesta per gate consegnato è significativamente più grande in un FPGA rispetto a un chip personalizzato come un microcontrollore. Tutta quella configurabilità a livello di interconnessione del gate richiede l'implementazione dell'area di silicio. A volumi elevati, il costo di un chip è interamente legato alla sua area di silicio.
Olin Lathrop,

5

Solo per aggiungere altre ottime risposte, penso che l'adozione di FPGA sia anche una questione di dominio: ad esempio, per i dispositivi neuromorfi, le schede FPGA stanno diventando abbastanza onnipresenti perché c'è un enorme bisogno di parallelismo, che è un punto di forza di FPGA.

Se estrapoli la tendenza che vediamo per i dispositivi neuromorfi, si può immaginare che altri campi che sono basati, o che richiedono criticamente, il parallelismo probabilmente adotteranno molto di più gli FPGA. Quindi forse FPGA non diventerà onnipresente per i prodotti di qualità consumer, ma può essere per domini specifici come sembra stia accadendo attualmente per i dispositivi neuromorfi.


Anche se questo può essere vero, questo non sembra abbastanza per una risposta completa. Forse sarebbe meglio come commento, o potresti ampliarlo.
Null,

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post.
Funkyguy,

3
@Funkyguy, questo risponde alla domanda. Sostanzialmente affermano che gli FPGA non sono onnipresenti perché le comuni applicazioni dei consumatori non richiedono il parallelismo che è il punto di forza degli FPGA.
stanri,
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.