Leyendo sobre FPGA, si entiendo correctamente, son básicamente circuitos de puerta lógica totalmente configurables. Siendo esto, uno puede diseñar cualquier cosa con ellos. Uno puede diseñar todo de la manera más personalizada posible y, por lo tanto, cumplir los mismos fines de una manera mucho más eficiente que la que se puede obtener con un microcontrolador. Teniendo esto, parece que un FPGA le gana a un microcontrolador en cualquier momento, cualquier día. Así que mi pregunta es, si los FPGA son realmente tan asombrosos, ¿qué les impide ser mucho más frecuentes que los microcontroladores? Desde este punto de vista, me parece que los FPGA deberían haber eliminado a los microcontroladores hace mucho tiempo. Entonces, ¿por qué no es este el caso? ¿Es el costo, la dificultad de programar un FPGA o algo completamente diferente?
Está ignorando muchos factores que intervienen en la toma de decisiones de diseño:
Las principales ventajas de los FPGA frente a los micros es que son más rápidos y pueden hacer más cosas en paralelo. Aparte de eso, preferirías usar un micro. Por lo tanto, en el proceso de diseño, generalmente comienza con un micro y luego, de mala gana, pasa a un FPGA cuando realmente necesita la velocidad y/o la operación simultánea de alta velocidad. Incluso entonces, implementa solo las partes críticas para la velocidad en un FPGA y deja las funciones de control de velocidad más bajas y similares en el micro.
Una distinción que no he visto detallada 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 enrutar paquetes Ethernet. O simulando el flujo de fluidos. Cualquier situación en la que tenga una gran cantidad de datos del mismo tipo que se le arrojan muy rápido y desea tratar con todo de la misma manera. O desea ejecutar el mismo algoritmo repetidamente. El FPGA realmente no tiene 'tareas' que comiencen y se detengan [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, están constantemente cambiando y cambiando funciones.
La FPGA y la CPU son completamente opuestos. El producto 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.
El producto de la 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 el tamaño que la velocidad[2].
Es posible hacer que una 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, como resultado, ambos tienen su propio lugar.
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 diseñado previamente.
2) La velocidad también es una especificación de diseño de FPGA. Es realmente una compensación entre la velocidad y el tamaño.
3) Poner una CPU en un FPGA se hace con relativa frecuencia, sin embargo, se hace caso por caso, dependiendo de las aplicaciones específicas. Por ejemplo, si necesita un microcontrolador realmente pequeño y tiene espacio adicional para FPGA.
Y finalmente: esta respuesta es una gran simplificación: los FPGA se usan de formas enormemente variadas y complejas y esta es una descripción muy breve de la forma en que se usan en general.
Como dice Olin, algo como un micro es más eficiente para muchas tareas, y casi siempre encontrarás un micro usado dondequiera que aparezca un FPGA. La superficie cultivada de silicio utilizada (que se traduce en costo de manera no lineal) y el consumo de energía son mucho menores. Por esa razón, no es raro implementar una MCU 'suave' en un FPGA, pero el costo y el rendimiento de tal micro son decepcionantes.
Algunos FPGA modernos contienen uno o más núcleos "duros", como la omnipresente serie ARM. Además, pueden contener bloques de memoria dedicados, ya que es realmente ineficiente crear memoria fuera de las puertas. Un micronúcleo de 32 bits ocupa una pequeña parte del área de silicio en un FPGA típico, lo que le da una idea de los costos relativos.
El desarrollo es significativamente más difícil, y la IP tiende a no estar disponible de forma tan gratuita como para micros y soluciones SOC dedicadas, por ejemplo, controladores LCD, interfaces PCI, MAC Ethernet. La razón es en parte que al revelar las descripciones lógicas HDL están transfiriendo el diseño, no solo la instanciación del diseño. Otra razón es que el rendimiento depende del diseño de la lógica en el FPGA, lo que requiere mucho esfuerzo durante el desarrollo.
Una complicación adicional es que los FPGA más complejos están basados en RAM para la configuración y los costos del proceso son tales que se requiere una memoria no volátil externa para almacenar la configuración y la memoria del programa para cualquier MCU a bordo. Esta memoria debe cargarse en la RAM durante el encendido.
Los FPGA son herramientas extremadamente útiles en la caja de herramientas, pero no reemplazarán universalmente a los MCU o ASIC en el corto plazo.
El mejor uso del silicio para un trabajo es un ASIC, nada desperdiciado, pero tienen una gran curva de aprendizaje, NRE e inflexibilidad.
Hay dos formas de construir flexibilidad en un chip. a) Tener una ALU optimizada para el espacio y usarla una y otra vez en los datos almacenados. Esto se denomina MCU y requiere una gran área de silicio que "no hace nada", la memoria del programa, buses anchos que van de una unidad a otra y conmutadores de acceso al bus. b) Tener una lógica detallada, con algunas piezas opcionales optimizadas para el espacio, como multiplicadores, RAM pequeñas y CPU simples. Esto se llama FPGA y requiere una gran área de silicio que "no hace nada", interruptores programables y líneas de conexión.
Obviamente, con esas estructuras, los MCU funcionan mejor para tareas que se pueden dividir en fragmentos en serie, y los FPGA funcionan mejor para tareas que necesitan una operación paralela de alta velocidad. Cuando la aplicación es pesada y el costo está dominado por el costo del silicio, así es como se usarán naturalmente los dos tipos.
Cuando la aplicación es liviana pero de gran volumen, el costo está dominado por el empaque en lugar del silicio, y cualquiera de los dos tipos es viable. Altera tiene algunos FPGA muy pequeños y de muy baja potencia para competir con MCU de un dólar el puñado.
Para aplicaciones de bajo volumen, el costo de desarrollo tiende a dominar, y las MCU ganan, suponiendo que tengan la velocidad
En términos de consumo de energía y utilización de silicio, un FPGA es muy pobre en comparación con un microprocesador.
Un FPGA consume gran parte de su área de silicio en el circuito de configuración lógica, algo que no se aplica a un micro. Tiene que haber muchas más interconexiones disponibles de las que se necesitarían en una implementación dedicada de un microprocesador.
El FPGA consume más energía que un ASIC dedicado, como un microprocesador, ya que la lógica no se implementa de manera tan eficiente.
Cualquier función que se pueda implementar en un FPGA se puede realizar de manera más eficiente, más económica, con menor consumo de energía, menor espacio en la placa, etc. en un ASIC dedicado. Esto supone que los volúmenes son lo suficientemente grandes como para compensar el NRE.
Los sistemas basados en microprocesadores y, más tarde, los microcontroladores, han sido capaces de lograr un enorme grado de funcionalidad gracias a su capacidad para utilizar muchas de las piezas individuales de los circuitos para realizar muchas tareas diferentes en momentos diferentes. Creo que es instructivo comparar la máquina recreativa Tank, diseñada en 1976, con el juego Combat que se ejecuta en la segunda máquina de juego controlada por microprocesador del mundo, la Atari 2600. Si bien existen algunas diferencias en el juego, el hardware de la Atari 2600 se diseñó esencialmente implementar juegos como Tank a un costo mínimo; el hecho de que se pudiera hacer para jugar diferentes juegos insertando diferentes cartuchos ROM fue una buena ventaja.
El juego Tank permite a dos jugadores conducir tanques por la pantalla y dispararse entre sí. Tiene contadores de "deslizamiento" para la posición X e Y de cada tanque, la posición X e Y de los disparos de cada jugador, contador arriba/abajo para el ángulo de cada jugador y el ángulo de disparo de cada jugador, un contador para la puntuación de cada jugador, haz de trama X e Y -Contadores de posición y muchos circuitos de control encima de esas cosas. Tiene hardware para obtener datos del campo de juego de la ROM y mostrarlos, así como hardware para obtener formas para los tanques de dos jugadores y puntajes de la ROM y mostrarlos.
El Atari 2600 tiene un contador de deslizamiento para las posiciones horizontales de cada uno de los dos objetos del jugador, cada uno de los dos objetos de misiles y un objeto adicional llamado "bola" que no se usa en Combat pero se usa en algunos otros juegos. Para cada uno de los objetos del jugador, tiene hardware para generar un patrón almacenado en un latch de 8 bits, así como un latch de ocho bits "retrasado" para cada jugador que se copia en el latch principal de 8 bits cada vez que el otro jugador. se actualiza la forma. También tiene un contador de posición de haz horizontal y un pestillo con forma de campo de juego de 20 bits que se envía a la pantalla dos veces por línea de escaneo, y la copia del lado derecho aparece como una repetición o un reflejo de la izquierda. Tiene hardware para detectar colisiones, pero no para hacer nada como consecuencia de las mismas. no lo haceno tiene ningún hardware para las posiciones verticales de ningún objeto, ni la posición vertical del haz de trama (!), ni tiene ningún hardware asociado con el mantenimiento de la puntuación, la visualización de la puntuación, la duración del juego, etc.
Todas las funciones para las que el 2600 omite el hardware son manejadas por software en el cartucho. Solo es necesario verificar la posición vertical de cada objeto contra la posición del haz de trama una vez por línea de exploración, solo es necesario actualizar la puntuación del jugador y el tiempo de juego restante como máximo uno por cuadro, las puntuaciones de los jugadores se almacenan en líneas de exploración sobre el campo de juego y por lo tanto pueden compartir el mismo hardware que se usa para el campo de juego, etc.
El enfoque normal para implementar un juego como "Tank" en un FPGA sería usar circuitos separados para diferentes funciones de la misma manera que lo hizo la máquina recreativa de 1976. Tal enfoque funcionaría, pero usaría una cantidad sustancial de hardware. Un enfoque basado en microprocesador podría eliminar más de la mitad de ese hardware a cambio de agregar un microprocesador, que probablemente contendría menos circuitos que el hardware que reemplazó (el 2600 podría implementar juegos mucho más sofisticados que Tank, lo que requeriría mucho más hardware si no usaran un microprocesador).
Los FPGA son excelentes en los casos en que se necesita un dispositivo que pueda realizar muchas tareas simples simultáneamente . Sin embargo, los sistemas basados en microprocesadores (o basados en microcontroladores) generalmente son mejores en los casos en que hay muchas tareas que deben realizarse, pero no es necesario procesarlas simultáneamente, porque facilitan el uso de una pequeña cantidad. de circuitos para lograr un gran número de propósitos distintos.
Solo para agregar a las otras muy buenas respuestas, creo que la adopción de FPGA también es una cuestión de dominio: por ejemplo, para dispositivos neuromórficos, las placas FPGA se están volviendo bastante omnipresentes porque existe una gran necesidad de paralelismo, que es un punto fuerte de FPGA.
Si extrapolas la tendencia que vemos para los dispositivos neuromórficos, uno puede imaginar que otros campos que se basan, o que requieren críticamente, el paralelismo probablemente adoptarán mucho más los FPGA. Entonces, tal vez FPGA no se vuelva omnipresente para los productos de consumo, pero puede serlo para dominios específicos, como parece que está sucediendo actualmente para los dispositivos neuromórficos.
Es totalmente el costo. Cuando un micro puede costar tan solo 30 centavos, un FPGA barato está en el territorio de los $5. El costo puede no parecer tan alto, pero cuando haces un millón de un juguete novedoso que se tira pedos para venderlo a $ 10, entonces el precio del FPGA mata tu resultado final.
PedroJ
tom l
olin lathrop
R.. GitHub DEJAR DE AYUDAR A ICE
Dan toca el violín a la luz del fuego