Una distinción que no he visto aquí es que los FPGA se usan y se comportan de una manera completamente diferente a los procesadores.
Un FPGA es realmente bueno para hacer exactamente la misma tarea, una y otra vez. Por ejemplo, procesamiento de señales de video, audio o RF. O enrutamiento de paquetes Ethernet. O simulando el flujo de fluido. Cualquier situación en la que se le arroje una gran cantidad del mismo tipo de datos realmente rápido y desea tratarlos de la misma manera. O desea ejecutar el mismo algoritmo repetidamente. El FPGA realmente no tiene 'tareas' que comienzan y se detienen [1], todo su trabajo es hacer lo mismo con cualquier dato que obtenga, mientras esté encendido. No cambia de marcha, no hace nada más. Es el último trabajador de la línea de producción. Hará lo mismo repetidamente, tan rápido como pueda, para siempre.
Las CPU, por otro lado, son el epítome de la flexibilidad. Se pueden programar para hacer cualquier cosa, y se pueden programar para hacer varias cosas diferentes al mismo tiempo. Tienen tareas que comienzan y se detienen, cambian de marcha, realizan múltiples tareas, cambian constantemente y cambian funciones.
El FPGA y la CPU son opuestos completos. El producto básico de la CPU es el tiempo: debe hacer las cosas más rápido. Cuanto más rápido se ejecute su aplicación, mejor.
La mercancía del FPGA es el espacio. Su FPGA es tan grande y solo hay tantas puertas disponibles para realizar la tarea que desea. La mayoría de las veces, el problema es más tamaño que velocidad [2].
Es posible hacer que un FPGA actúe como una CPU. Puede poner un núcleo IP de CPU en un FPGA, sin embargo, es muy difícil de justificar debido a las razones que otros han descrito [3]. El FPGA y la CPU son opuestos, ambos tienen sus propias fortalezas y debilidades, y ambos tienen su propio lugar como resultado.
Notas:
1) Un FPGA podría diseñarse para realizar diferentes tareas, pero incluso entonces sería un número específico para el que fue prediseñado.
2) La velocidad también es una especificación de diseño FPGA. Es realmente una compensación entre velocidad y tamaño.
3) Colocar una CPU en un FPGA se realiza con relativa frecuencia, sin embargo, se realiza caso por caso, dependiendo de las aplicaciones específicas. Por ejemplo, si necesita un microcontrolador realmente pequeño y tiene espacio FPGA adicional.
Y finalmente: esta respuesta es una gran simplificación: los FPGA se usan de formas muy variadas y complejas y esta es una breve descripción general de la forma en que se usan en general.