ASIC vs FPGA
Una matriz de puerta programable de campo puede verse como la etapa de creación de prototipos de los circuitos integrados específicos de la aplicación: los ASIC son muy caros de fabricar, y una vez que se fabrica no hay vuelta atrás (ya que el costo fijo más costoso son las máscaras [tipo de plantilla de fabricación " "] y su desarrollo). Los FPGA son reprogramables muchas veces, sin embargo, debido al hecho de que una matriz genérica de puertas está conectada para lograr su objetivo, no está optimizada como los ASIC. Además, los FPGA son dispositivos dinámicos nativos en el sentido de que si lo apaga, pierde no solo el estado actual sino también su configuración. Sin embargo, ahora existen placas que agregan un chip FLASH y / o un microcontrolador para cargar la configuración al inicio, por lo que este suele ser un argumento menos importante. Tanto los ASIC como los FPGA se pueden configurar con lenguajes de descripción de hardware, y a veces se usan FPGA para el producto final. Pero, en general, los ASIC se activan cuando el diseño es fijo.
FPGA vs microcontrolador
En cuanto a la diferencia entre un microcontrolador y un FPGA, puede considerar que un microcontrolador es un ASIC que básicamente procesa el código en FLASH / ROM secuencialmente. Puede hacer microcontroladores con FPGA incluso si no está optimizado, pero no al contrario. Los FPGA están conectados al igual que los circuitos electrónicos para que pueda tener circuitos verdaderamente paralelos, no como en un microcontrolador donde el procesador salta de un código a otro para simular un paralelismo suficientemente bueno. Sin embargo, debido a que los FPGA se han diseñado para tareas paralelas, no es tan fácil escribir código secuencial como en un microcontrolador.
Por ejemplo, generalmente si escribe en el pseudocódigo "deje que C sea A XOR B", en un FPGA que se traducirá en "construir una puerta XOR con los ladrillos de lego contenidos (tablas de búsqueda y pestillos) y conectar A / B como entradas y C como salida ", que se actualizará en cada ciclo de reloj independientemente de si se utiliza C o no. Mientras que en un microcontrolador que se traducirá en "instrucción de lectura: es un XOR de variables en la dirección A y la dirección B de RAM, el resultado se almacena en la dirección C. Cargue registros de unidades lógicas aritméticas, luego solicite a la ALU que haga un XOR, luego copie el registro de salida en la dirección C de RAM ". Sin embargo, en el lado del usuario, ambas instrucciones fueron 1 línea de código. Si hiciéramos esto, ENTONCES otra cosa, en HDL tendríamos que definir lo que se llama un Proceso para hacer secuencias artificialmente, separadas del código paralelo. Mientras que en un microcontrolador no hay nada que hacer. Por otro lado, para obtener el "paralelismo" (sintonizar y desconectar realmente) de un microcontrolador, necesitaría hacer malabarismos con hilos que no son triviales. Diferentes formas de trabajo, diferentes propósitos.
En resumen:
ASIC vs FPGA: fijo, más caro para una pequeña cantidad de productos (más barato para grandes volúmenes), pero más optimizado.
ASIC vs microcontrolador: ciertamente le gusta comparar una herramienta con un martillo.
FPGA vs microcontrolador: no está optimizado para el procesamiento de código secuencial, pero también puede realizar tareas verdaderamente paralelas muy fácilmente. Generalmente los FPGA se programan en HDL, los microcontroladores en C / Ensamblaje
Siempre que la velocidad de las tareas paralelas sea un problema, tome un FPGA, desarrolle su diseño y finalmente conviértalo en un ASIC si es más barato para usted a largo plazo (producción en masa). Si las tareas secuenciales están bien, tome un microcontrolador. Supongo que podría hacer un IC aún más específico de la aplicación a partir de esto si también es más barato para usted a largo plazo. La mejor solución probablemente será un poco de ambos.
Qué búsqueda rápida después de escribir esto me dio:
FPGA vs Microcontroladores, en este mismo foro