Une distinction que je n'ai pas vue développer ici est que les FPGA sont utilisés et se comportent d'une manière complètement différente des processeurs.
Un FPGA est vraiment doué pour effectuer exactement la même tâche, encore et encore. Par exemple, traiter des signaux vidéo, audio ou RF. Ou acheminer des paquets Ethernet. Ou simuler un écoulement de fluide. Toute situation dans laquelle vous recevez très rapidement le même type de données et que vous souhaitez traiter toutes ces informations de la même manière. Ou vous voulez exécuter le même algorithme à plusieurs reprises. Le FPGA n'a pas vraiment de «tâches» qui commencent et qui s'arrêtent [1], tout son travail consiste à faire la même chose pour toutes les données reçues, aussi longtemps qu'elles sont actives. Cela ne change pas de vitesse, cela ne fait rien d'autre. C'est l'ouvrier final de la chaîne de production. Il fera la même chose à plusieurs reprises, aussi vite que possible, pour toujours.
Les processeurs, par contre, sont la quintessence de la flexibilité. Ils peuvent être programmés pour faire n'importe quoi, et pour faire plusieurs choses différentes en même temps. Ils ont des tâches qui démarrent et s’arrêtent, ils changent de vitesse, multitâches, changent constamment de fonctions.
Le FPGA et la CPU sont des opposés complets. La commodité du processeur est le temps - il faut que les choses soient faites plus rapidement. Plus votre application s'exécutera rapidement, mieux ce sera.
La commodité du FPGA est l’espace. Votre FPGA n’est que très grand et il n’ya que peu de portes disponibles pour effectuer la tâche que vous souhaitez. La plupart du temps, le problème est plus grand que la vitesse [2].
Il est possible de faire en sorte qu'un FPGA se comporte comme un processeur. Vous pouvez insérer un noyau IP de processeur dans un FPGA, mais il est très difficile à justifier en raison des raisons avancées par d'autres [3]. Le FPGA et la CPU sont des opposés, chacun ayant ses propres forces et faiblesses, et ayant tous deux leur propre place.
Remarques:
1) Un FPGA peut être conçu pour effectuer différentes tâches, mais même dans ce cas, il s'agirait d'un numéro spécifique pour lequel il a été conçu.
2) La vitesse est également une spécification de conception FPGA. C'est vraiment un compromis entre vitesse et taille.
3) L'installation d'un processeur dans un FPGA est relativement fréquente, mais elle est effectuée au cas par cas, en fonction des applications spécifiques. Par exemple, si vous avez besoin d’un microcontrôleur très petit et d’un espace FPGA supplémentaire.
Et enfin: cette réponse est une grande simplifcation - les FPGA sont utilisés de manière extrêmement variée et complexe et il s’agit d’un très bref aperçu de la façon dont ils sont utilisés en général.