¿Cuáles son las diferencias y similitudes entre FPGA, ASIC y los microcontroladores generales?

24

He leído esta publicación y no responde a mi pregunta en su totalidad:

Creo que un microcontrolador es algo que tiene algo de memoria, se registra y puede procesar un conjunto de instrucciones como CARGAR, ALMACENAR y AGREGAR. Contiene puertas lógicas y otras para cumplir su función, pero su tarea principal es ser un procesador universal de bits. Pienso en un Microntroller como un sistema de diseños ASIC interconectados para crear la capacidad de almacenar y procesar instrucciones.

Creo que un dispositivo ASIC es un circuito que se ha construido específicamente utilizando componentes lógicos y eléctricos para realizar una sola tarea, sin ninguna otra tarea en mente ni hardware adicional incluido.

Pienso en un dispositivo FPGA como un dispositivo ASIC (un dispositivo de bajo nivel) + un montón de cosas que no se han utilizado y que se utilizan para implementar una tabla de verdad en particular.

A pesar de su nombre, un FGPA se siente muy "específico de la aplicación", ya que se debe volver a cablear para realizar una tarea nueva y diferente. Esto lleva a la confusión con ASIC. Si bien, en el caso de volver a cablear un FPGA, todo el hardware necesario debería estar presente. Además, los FPGA están destinados a ser programables, pero ¿no es eso para lo que está diseñado un Microcontrolador?

La publicación anterior a la que hice referencia también menciona HDL, con la que estoy familiarizado. ¿No se puede utilizar HDL para ASIC y FPGA, y por proxy para diseñar un microcontrolador completo?

    
pregunta user58446

5 respuestas

26

ASIC vs FPGA

Una matriz de puertas programable de campo se puede ver 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 están hechos no hay vuelta atrás (ya que el costo fijo más costoso son las máscaras fabricación "plantilla"] y su desarrollo). Los FPGA son reprogramables muchas veces, sin embargo, debido al hecho de que un conjunto genérico de puertas está conectado para lograr su objetivo, no está optimizado como los ASIC. Además, los FPGA son dispositivos dinámicos de forma nativa, ya que si lo apagas, perderás no solo el estado actual sino también tu configuración. Ahora existen placas que agregan un chip FLASH y / o un microcontrolador para cargar la configuración en el inicio, por lo que este suele ser un argumento menos importante. Tanto los ASIC como los FPGA pueden configurarse con lenguajes de descripción de hardware y, a veces, los FPGA se utilizan para el producto final. Pero, en general, los ASIC se activan cuando se arregla el diseño.

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 de forma secuencial. Puede hacer microcontroladores con FPGA incluso si no está optimizado, pero no al contrario. Los FPGA están conectados como circuitos electrónicos, por lo que puede tener circuitos verdaderamente paralelos, no como en un microcontrolador donde el procesador salta de un fragmento de código a otro para simular un paralelismo suficientemente bueno. Sin embargo, como los FPGA se han diseñado para tareas paralelas, no es tan fácil escribir código secuencial como en un microcontrolador.

Por ejemplo, por lo general, si escribe el pseudocódigo "sea C sea A XOR B", en un FPGA que se traducirá en "compile una compuerta XOR con los ladrillos lego contenidos (tablas de búsqueda y cierres), y conecte A / B como entradas y C como salida ", que se actualizará en cada ciclo de reloj independientemente de si se usa o no C. Mientras que en un microcontrolador que se traducirá en "instrucción de lectura - es un XOR de variables en la dirección A y una dirección B de RAM, el resultado se almacena en la dirección C. Cargue los registros de unidades lógicas aritméticas, luego pida a la ALU que haga un XOR, luego Copie el registro de salida en la dirección C de RAM ". En el lado del usuario, sin embargo, ambas instrucciones eran 1 línea de código. Si tuviéramos que hacer esto, ENTONCES otra cosa, en HDL tendríamos que definir lo que se llama un Proceso para hacer secuencias artificialmente, separado 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, debe hacer malabares con hilos que no son triviales. Diferentes formas de trabajar, 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: desde luego, me gusta comparar una herramienta con una   martillo.

     

FPGA vs microcontrolador: no está optimizado para el procesamiento de código secuencial,   Pero también puede hacer tareas verdaderamente paralelas muy fácilmente. Generalmente los FPGA están programados en HDL, los microcontroladores en C / Ensamblado

     

Cuando la velocidad de las tareas paralelas es un problema, tome un FPGA, evolucione   su diseño y, finalmente, conviértalo en un ASIC si es más barato para usted en el   largo plazo (producción en masa). Si las tareas secuenciales están bien, tome un microcontrolador. supongo   usted podría hacer un IC aún más específico de la aplicación de esto si es   Más barato para usted a largo plazo también. La mejor solución probablemente sea un poco de ambas.

Lo que me dio una búsqueda rápida después de escribir esto:

FPGA vs Microcontrollers, en este mismo foro

    
respondido por el Mister Mystère
14

Los FPGA se pueden "volver a conectar" mediante la reprogramación. Un FPGA carga su configuración en sus celdas lógicas configurables cuando se enciende . Esto significa que se puede volver a programar sin cambios en el hardware.

Los ASIC solo se pueden volver a conectar modificando las máscaras fotolitográficas en la fundición de silicio.

Un microcontrolador es un tipo de ASIC, que ejecuta un programa y puede hacer cosas genéricas como resultado. Sin embargo, si desea modificar el conjunto de instrucciones o hacer algo similar, debe modificar el diseño real de IC de silicio.

La diferencia entre un FPGA y una MCU es más difusa. Básicamente, lo que un FPGA es, a nivel de hardware, es una gran cantidad de pequeñas células SRAM, todas conectadas a una matriz densa de multiplexores. Básicamente, un FPGA es una pila completa de lógica discreta que puede electrónicamente "re-cablearse" ** simplemente reprogramando los multiplexores y las celdas SRAM.

Como tal, puede implementar una MCU dentro de un FPGA, ya que una MCU es solo una cierta configuración de celdas lógicas. De hecho, los FPGA son muy comúnmente utilizados en el proceso de diseño de MCU.

Un microcontrolador es una implementación de una configuración lógica determinada. La razón por la que los tenemos es que al implementar una MCU directamente en el silicio, la cantidad total de espacio de matriz de silicio requerida se puede optimizar considerablemente, y se pueden hacer ciertas optimizaciones de rendimiento que prohíbe el "carácter genérico" requerido de un FPGA. Esto permite que los costos de producción de una MCU se reduzcan drásticamente, y como resultado, la MCU común es mucho más barata que una FPGA capaz de contener la lógica equivalente.

Los FPGA son útiles en ciertas aplicaciones, porque pueden implementar estructuras lógicas de una manera que las MCU no pueden. Por ejemplo, si necesita agregar X1 + Y1, X2 + Y2, X3 + Y3 y X4 + Y4, la MCU deberá realizar cada operación en secuencia *. Un FPGA simplemente puede tener 4 separadas ALUs al mismo tiempo , por lo que puede hacer la misma operación en un cuarto de tiempo (asumiendo que los dos dispositivos estén sincronizados al mismo tiempo) tasa).

Aquí es donde los FPGA (o ASIC diseñados para la misma tarea) pueden brillar realmente, en el hecho de que puedes hacer muchas, muchas cosas simultáneamente , que un solo proceso solo puede hacer secuencialmente.

* (nota: aquí estoy ignorando algunas cosas como SIMD)

    
respondido por el Connor Wolf
6

Esta es una buena pregunta,

Básicamente, un microcontrolador y un ASIC tienen hardware (a menudo denominado silicio) que está escrito en piedra y no se puede cambiar. Un FPGA se puede configurar para representar diferentes tipos de hardware (esto puede incluir microcontroladores).

Puede pensar que se puede hacer un microcontrolador para hacer muchas cosas diferentes, pero todo esto se hace ejecutando diferentes programas (técnicamente software pero a veces denominados firmware) el hardware en sí no cambia esencialmente, realiza las mismas operaciones pero en un orden diferente con diferentes entradas.

Los FPGA se utilizan generalmente para generar los diseños comprometidos con los ASIC. La diferencia entre ellos es que si desea actualizar el funcionamiento interno de un FPGA o agregar / eliminar bloques funcionales, todo lo que debe hacer es actualizar su firmware. No se puede hacer en ASICs, ya que los trabajos internos se han comprometido con el silicio, no es reconfigurable.

En resumen, con un microprocesador usas el mismo hardware para ejecutar diferentes programas, con un FPGA estás reconfigurando el hardware para realizar diferentes funciones y los ASIC son como un microcontrolador porque el hardware no se puede cambiar, pero generalmente son diseñado para realizar una sola función de manera extremadamente eficiente.

Tanto los ASIC como los FPGA pueden contener microcontroladores y si lo hacen, puede escribir programas para ellos como lo haría con un microcontrolador independiente, un ejemplo de esto es el procesador integrado NIOS II de Altera.

Si esto todavía es confuso, hazme saber qué es lo que no está claro y haré todo lo posible para aclarar mi respuesta.

Gipsy

    
respondido por el Gipsy Danger
3

bueno, no hay un FPGA programado por señales eléctricas si se comporta como una colección específica de puertas, algunos FPGA incluyen memoria flash para almacenar esta configuración, otros no y deben reprogramarse después de cada reinicio de energía.

Un ASIC sale de la línea de producción ya configurado.

Los errores de FPGA se pueden corregir con una actualización de firmware, los errores de ASIC no se pueden reparar económicamente.

    
respondido por el Jasen
2
  

A pesar de su nombre, un FGPA se siente muy "específico de la aplicación", ya que se debe volver a cablear para realizar una tarea nueva y diferente.

Eso es lo contrario de lo que significa "específico de la aplicación". Puede utilizar un FPGA para más de una aplicación volviendo a cablearlo. No puede cambiar un ASIC, por lo que solo se puede aplicar a una tarea (esa tarea puede estar implementando un microcontrolador).

  

Aunque, en el caso de volver a cablear un FPGA, todo el hardware necesario debería estar presente.

No estoy seguro de lo que esto significa. Por lo general, hay una interfaz de software para reprogramar un FPGA. Es un ASIC que requiere millones de [unidades monetarias] de hardware.

  

Los FPGA están diseñados para ser programables, pero ¿no es eso para lo que está diseñado un Microcontrolador?

Un microcontrolador le permite programar software secuencial para un hardware fijo. Al igual que una computadora normal, pero muy pequeña y con recursos limitados. Un FPGA le permite programar cualquier hardware que desee utilizando un HDL.

    
respondido por el OrangeDog

Lea otras preguntas en las etiquetas

Comentarios Recientes

Con respecto a los FPGA, los circuitos de microcontroladores generales (GMI) generalmente se describen en una pestaña separada, como las secciones de FPGA basadas en ASIC o MIT anteriores. Aunque no necesariamente coinciden directamente, los nuevos modelos, un software y otras arquitecturas y núcleos sin duda se juegan con ellos. (Nota: ASIC son fundamentales cuando se habla de Linux) Un microcontrolador general sin una placa base también se conoce como una simple unidad FPGA. "Simple" es uno de los muchos términos... Lees verder