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


25

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

Pienso en un microcontrolador como algo que tiene algo de memoria, registros y puede procesar un conjunto de instrucciones como LOAD, STORE y ADD. Contiene puertas lógicas y demás para desempeñar 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.

Pienso en un dispositivo ASIC como un circuito que se ha construido específicamente utilizando componentes lógicos y eléctricos para realizar una sola tarea, sin 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 no utilizadas sobrantes, utilizadas para implementar una tabla de verdad particular.

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

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


1
No está muy claro cuál es tu pregunta. ¿Has leído preguntas relacionadas sobre FPGA vs ASIC? De hecho, HDL se usa para diseñar implementaciones de ASIC y FPGA, y puede diseñar un microcontrolador en HDL.
pjc50

3
Altera ofrece un libro electrónico gratuito llamado FPGA para Dummies , que explica bien la diferencia entre FPGA, ASIC y microcontroladores.
kkrambo

@kkrambo usted callin un maniquí? :) Lo siento, no pude resistir ... Lo comprobaré.
usuario58446

Agregué la palabra 'similitudes' al título de la pregunta, porque parece que hay detalles técnicos minuciosos de jerga que pueden confundir cómo se relacionan los tres dispositivos diferentes: por ejemplo, un dispositivo puede contener uno de los otros dos dispositivos, o puede contener muchos componentes similares pero difieren en algún aspecto importante. Esto ya ha sido tocado por algunas de las respuestas existentes. Gracias.
usuario58446

Respuestas:


28

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: ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

FPGA vs Microcontroladores, en este mismo foro


14

Los FPGA se pueden "volver a cablear" reprogramando. Un FPGA carga su configuración en sus celdas lógicas configurables cuando está encendido . Esto significa que se puede reprogramar sin cambios en el hardware.

Los ASIC solo se pueden volver a cablear 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 alterar el conjunto de instrucciones o hacer algo similar, debe modificar el diseño real de IC de silicio.


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

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

Un microcontrolador es una implementación de una determinada configuración lógica. 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 puede optimizarse considerablemente, y se pueden hacer ciertas optimizaciones de rendimiento que prohíben 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 que es 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 ALU separadas al mismo tiempo , por lo que puede realizar la misma operación en un cuarto del tiempo (suponiendo que los dos dispositivos estén sincronizados a la misma velocidad).

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

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


No creo que la distinción FPGA / ASIC sea difusa; En un FPGA, los circuitos cuyo "cableado" se puede cambiar funcionan simultáneamente e independientemente. Una MCU tiene una gran cantidad de circuitos cuyo cableado no se puede cambiar, cuyo comportamiento se controla a través de información a la que se accede poco a poco desde una matriz de memoria programable. En cualquier momento, una CPU generalmente solo podrá realizar una operación de una lista de miles a miles de millones de opciones, pero la MCU se diseñará de manera que juntar tales operaciones en secuencia hará posible realizar trabajo útil.
supercat

Gracias. MUY cerca de convertirse en la respuesta ... aunque 10 meses después. +1 para hacer enmiendas.
user58446

6

Esta es una buena pregunta,

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

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

Los FPGA generalmente se utilizan para generar los diseños que están 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 necesita hacer es actualizar su firmware, esto no puede se debe hacer en ASIC ya que el funcionamiento interno se ha comprometido con el silicio, no es reconfigurable.

En resumen, con un microprocesador, usa el mismo hardware para ejecutar diferentes programas, con un FPGA está reconfigurando el hardware para realizar diferentes funciones y los ASIC son como un microcontrolador en el sentido de que el hardware no se puede cambiar, pero generalmente están diseñados para funcionar Una sola función 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 sigue siendo confuso, hágame saber qué no está claro y haré todo lo posible para aclarar mi respuesta.

gitano


3

bueno, no hay un FPGA programado por señales eléctricas si se comporta como una colección específica de compuertas, 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 configurada.

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


2

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

Eso es lo contrario de lo que significa "específico de la aplicación". Puede usar un FPGA para más de una aplicación al volver 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 debe estar presente.

No estoy seguro que significa esto. 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 destinados a ser programables, pero ¿no es eso para lo que está destinado 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 usando un HDL.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.