Una distinción que no he visto más detallada aquí es que los FPGA se usan y se comportan de una manera completamente diferente para 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 de Ethernet. O simulando el flujo de fluidos. Cualquier situación en la que tengas la misma clase de datos que se te envíen realmente rápido y quieres tratarlos todos de la misma manera. O quieres ejecutar el mismo algoritmo repetidamente. El FPGA no tiene realmente "tareas" que comiencen y se detengan [1], todo su trabajo es hacer lo mismo con cualquier información que reciba, 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. Pueden programarse para hacer cualquier cosa, y pueden programarse para hacer varias cosas diferentes al mismo tiempo. Tienen tareas que comienzan y se detienen, cambian de marcha, realizan múltiples tareas, cambian y cambian de función constantemente.
El FPGA y la CPU son opuestos completos. El producto básico de la CPU es el tiempo, se 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 solo muy grande, y hay tantas puertas disponibles para realizar la tarea que desea. La mayoría de las veces, el problema es más grande que la velocidad [2].
Es posible hacer que un FPGA actúe como una CPU. Puede colocar 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 en ese caso sería un número específico para el que fue diseñado previamente.
2) La velocidad es también una especificación de diseño FPGA. Es realmente un intercambio entre velocidad y tamaño.
3) La colocación de 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 utilizan de maneras enormemente variadas y complejas y esta es una breve descripción general de la forma en que se usan en general.