Che cos'è un FPGA?


38

Ho già visto molte persone parlare di FPGA prima e so che sta per gate array programmabile sul campo, ma come funziona e qual è lo scopo di usare un FPGA?

Risposte:


30

Sono componenti elettronici che aggiungono logica ai circuiti (quindi sono simili ai microcontroller). Ma l'approccio progettuale è quindi completamente diverso rispetto all'uC (micro controller). In un uC, non è possibile modificare il design interno degli uC; puoi solo eseguire programmi "classici" su di esso. La programmazione di FPGA è più simile alla creazione di nuovo hardware. Si creano nuove connessioni tra porte logiche e si crea un nuovo processore specializzato. E puoi fare tutto a casa, sulla scrivania e sul PC.

Sembra fantastico? Sì, ma ci sono alcuni svantaggi. Ad esempio, il prezzo (ma penso sia difficile confrontarlo), un maggiore consumo di energia e velocità di clock inferiori (ma è possibile progettare l'applicazione in modo intelligente e eseguire più operazioni in un ciclo di clock).

Link utili:

Esempio di utilizzo: http://nsa.unaligned.org/


3
Noterò che molti FPGA sono abbastanza grandi da contenere più core della CPU, permettendo così all'FPGA di essere un intero computer a sé stante.
Craig Trader,

3
Come nota, penso che basse velocità di clock possano essere fuorvianti. rispetto a un PC, sì. Rispetto a un pic16, possono essere più veloci, ma dipende dal costo. La maggior parte di quelli più economici con cui ho messo le mani a 40MHz, ma ancora, varia da prodotto a prodotto.
Kortuk,

23

Un FPGA è letteralmente un array di porte logiche che possono essere programmate sul campo. Flip-flop, multiplexer, tabelle di ricerca a 4 bit, ecc. Che possono essere collegati nel modo desiderato, usando un linguaggio di tipo C (Verilog).

Un uC, come un AVR, è anch'esso costituito da porte logiche simili, ma sono configurate al momento della creazione del dispositivo. Certo, ha RAM e Flash in modo da poter scrivere software per leggere input e controllare output, ma non è possibile modificare le disposizioni effettive delle porte. I gate saranno sempre disposti in un ALU, un controller di memoria, una porta seriale, ecc.

Il vantaggio di uC è che puoi programmarlo sul campo (alla tua scrivania), con un linguaggio di alto livello facile da usare, familiare, come C. Il problema è che il software è "lento". Per avere un input che controlli un output, nel caso più semplice, potresti scrivere:

void loop () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}

Ciò verrebbe trasformato in una dozzina di istruzioni di assemblaggio, quindi il circuito impiegherebbe circa un microsecondo per controllare quell'uscita da un ingresso. E ci vuole l'intero chip uC per farlo così in fretta. Certo, puoi fare molto di più, ma poi la tua capacità di controllare quell'output rallenterà mentre l'UC si impegna a fare altre cose.

In un FPGA, potrei configurare i gate in modo che un input controlli un output in 1 clock. Quindi l'output seguirà l'input con un ritardo di circa 25 nanosecondi. È 40 volte più veloce, usando lo stesso periodo di clock. E il resto delle porte dell'FPGA sono disponibili per fare molte altre cose, il che non influirà sulla velocità di questa piccola funzione.

Il codice per FPGA sarebbe un semplice infradito:

sempre @ (posedge clock) ledPin <= buttonPin;

Ciò richiederebbe solo 1 cella FPGA, circa 40 gate, su decine di migliaia in un FPGA.

Posso riprogrammare il mio FPGA per fare qualcos'altro, ad esempio controllare il led in base a una combinazione di quattro ingressi, sempre in un clock, usando ancora quella cella FPGA. Oppure controlla il led in base a un flusso seriale dall'ingresso, in alcune celle FPGA, che sarebbero 100 di gate. Quindi ho potuto controllare il LED in base ai dati seriali, dire "ON" o "OFF", con il flusso seriale a una velocità molto elevata (facilmente 20 MHz), e ancora utilizzare solo una piccola parte della capacità dell'FPGA.

Quindi il vantaggio di un FPGA è chiaramente la velocità. Può fare tutto ciò che un uC può fare e può farlo molto più velocemente, con tutto fatto in parallelo. Cose complesse che un uC richiederebbe in millisecondi, un FPGA potrebbe fare in microsecondi o meno. Finché ci sono delle porte rimaste nell'FPGA, posso aggiungere altre funzioni senza influire sulla velocità o sul funzionamento delle funzioni precedenti nell'FPGA. A proposito, un FPGA può eseguire molto facilmente una frequenza di clock di 20 MHz.

Il costo non è un fattore di differenziazione. Posso acquistare un FPGA che potrebbe implementare quasi tutti i progetti Arduino che abbia mai visto per circa $ 5, più o meno come un chip Arduino AVR. Esistono anche toolchain gratuite (IDE, compilatore, debugger) per FPGA.

Il potere non è un fattore di differenziazione. Dal momento che posso eseguire l'FPGA a una frequenza di clock molto più bassa per ottenere la stessa funzione di un uC e utilizzare una piccola porzione dei suoi gate (i gate non utilizzati utilizzano solo la perdita di potenza), un FPGA può battere la potenza di quasi tutti gli UC design.

Il più grande svantaggio di un FPGA è che è molto più complesso e richiede tempo per definire, scrivere il codice ed eseguire il debug di un design FPGA non banale rispetto a un programma uC. Un tipico progetto uC che potresti fare in una serata potrebbe richiedere giorni su un FPGA.

Altri problemi potenzialmente risolvibili sono che la maggior parte delle persone è addestrata nella programmazione del software, ma pochi comprendono la programmazione dell'hardware. Puoi imparare Verilog abbastanza facilmente. Ma dovresti anche pensare in termini di progettazione hardware anziché di progettazione software. I modelli di progettazione sono molto diversi.

Un altro problema è che gli FPGA non arrivano in piccoli pacchetti DIP da 8 a 20 pin. Tendono a venire in pacchetti da 100 pin o più grandi, quindi costruire le schede è più difficile.

E un ultimo problema è che un sacco di progetti interessanti possono essere implementati bene in quegli UC facili da usare, quindi perché preoccuparsi di un FPGA?


2
"Posso acquistare un FPGA in grado di implementare quasi tutti i progetti Arduino che abbia mai visto per circa $ 5" Mi dispiace, ma no? Dove?
Medivh

9

Se hai familiarità con le porte logiche di base, dovresti sapere che sono praticamente istantanee. L'operazione A e B OR C cambia istantaneamente quando cambiano A, B o C.

Un FPGA è (una specie di) una matrice di porte logiche programmabili. È possibile definire gli ingressi e le uscite (come una combinazione di ingressi).

In uC, A + B / C * sqrt (D) richiederebbe diversi cicli di clock e un po 'di memoria. In un FPGA, il risultato è quasi immediato.

Sono fantastici per video, DSP, crittografia ...

Questo è il vantaggio principale. I moderni FPGA sono adatti ora con la memoria e ci sono ibridi uC / FPGA.


Conosco molti ESE di pratica con molti anni di esperienza che spesso passano semplicemente attraverso un FPGA nella progettazione invece di un uC in cui eri solito vedere uC. Penso davvero che siano fantastici per la gestione delle interfacce.
Kortuk,

Sì, penso che questo sia un bell'esempio: armadeus.com/english/index.html . Particolarmente interessante per me è l'esempio del servocontrollo
Maciek Sawicki

2
Da notare anche che ci sono sempre più convertitori da "C a VHDL" o "da C a Verilog". Non sono ancora le cose più efficienti ma puoi convertire il codice già scritto in hardware che può essere utilizzato per un miglioramento della velocità. Abbastanza bello se me lo chiedi (e se hai l'impasto per questo).
Chris Gammell

5

Sono utilizzati per decifrare le chiavi di crittografia molto più velocemente di quanto potrebbe fare un computer generico. : D


1
Haha, mi è piaciuta la tua descrizione molto funzionale. Sono assolutamente sorprendenti durante l'elaborazione parallela.
Kortuk,

Un progetto di codebreaker
hhh

2

Per risparmiare denaro e rischio rispetto a un ASIC. A meno che tu

  1. Profondamente cura del potere o
  2. Ne stanno costruendo un mucchio (diciamo> 10k unità)

i costi fissi (NRE) della realizzazione di un ASIC lo rendono proibitivo.

Dal momento che è possibile modificare facilmente un FPGA, è possibile simulare meno il design ed entrare in laboratorio più rapidamente. Inoltre puoi fare una progettazione parziale e basarti su di essa, come nel software.

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.