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.