¿Por qué los FPGA no son omnipresentes?

63

Leyendo sobre FPGAs, si entiendo correctamente, son básicamente circuitos de compuerta lógica completamente 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, lograr los mismos fines de una manera mucho más eficiente 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 impresionantes, ¿qué les impide ser mucho más frecuentes que los microcontroladores? Desde este punto de vista, a mí me parece que los FPGA deberían haber eliminado a los microcontroladores hace mucho tiempo. Entonces, ¿por qué este no es el caso? ¿Es el costo, la dificultad de programar un FPGA o algo completamente distinto?

    
pregunta Utku

8 respuestas

93

Estás ignorando muchos factores que intervienen en la elección de diseño:

  1. Coste . Los FPGA son más caros que los micros para la misma complejidad de la lógica.

  2. Complejidad lógica . El código ejecutable puede implementar una lógica mucho más complicada que la misma cantidad de compuertas en el micro utilizado directamente.

  3. Facilidad de desarrollo . Es más fácil escribir código ejecutable que definir la lógica para todos los problemas, excepto los pequeños. Incluso los proyectos modestos de microcontroladores tienen miles de líneas de código. Desarrollar las definiciones lógicas equivalentes llevaría mucho más tiempo y sería mucho más difícil de depurar y verificar.

  4. Consumo de energía . Dado que los FPGA están diseñados para operaciones de alta velocidad que los micros no pueden manejar (de lo contrario, usarían un micro), no están optimizados para baja potencia. Esto los hace inadecuados para algunas aplicaciones de bajo consumo. Algunos micros tienen corrientes de sueño por debajo de 1 µA, y pueden funcionar con solo unos pocos µA a velocidades de reloj lentas. Intenta encontrar un FPGA que pueda hacer esto.

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, prefieres usar un micro. Por lo tanto, en el proceso de diseño, generalmente comienza con un micro, y luego va a regañadientes a un FPGA cuando realmente necesita la velocidad y / o la operación simultánea de alta velocidad. Incluso entonces, implementas solo las partes de velocidad crítica en un FPGA, y dejas las funciones de control de velocidad más bajas y similares en el micro.

    
respondido por el Olin Lathrop
45

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.

    
respondido por el stanri
20

Como dice Olin, algo así como un micro es más eficiente para muchas tareas, y casi siempre encontrarás un micro usado donde aparezca un FPGA. La superficie 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 infrecuente implementar un MCU 'suave' en un FPGA, pero el costo y el rendimiento de tal micro es insoportable.

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 hacer que la memoria salga de las puertas. Un micro núcleo de 32 bits ocupa un poco 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 tan libremente como para micros y soluciones SOC dedicadas, por ejemplo, controladores LCD, interfaces PCI, Ethernet MAC. La razón es en parte que al divulgar las descripciones lógicas de HDL están transfiriendo el diseño, no solo la creación de instancias del diseño. Otra razón es que el rendimiento depende del diseño de la lógica en el FPGA, que requiere mucho esfuerzo durante el desarrollo.

Una complicación adicional es que la mayoría de los FPGA complejos están basados en RAM para la configuración y los costos del proceso son tales que se requiere una memoria externa no volátil para almacenar la configuración y la memoria del programa para cualquier MCU a bordo. Esta memoria debe cargarse en la RAM en el encendido.

Los FPGA son herramientas extremadamente útiles en la caja de herramientas, pero no van a reemplazar las MCU o ASIC universalmente en ningún momento.

    
respondido por el Spehro Pefhany
9

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 tan eficientemente.

Cualquier función que se pueda implementar en un FPGA se puede hacer de manera más eficiente, más barata, con menor consumo de energía, menor espacio en el tablero, etc. en un ASIC dedicado. Esto se supone que los volúmenes son lo suficientemente grandes como para compensar la NRE.

    
respondido por el Kevin White
9

El mejor uso del silicio para un trabajo es un ASIC, no se desperdicia nada, pero tienen una gran curva de aprendizaje, NRE e inflexibilidad.

Hay dos formas de crear flexibilidad en un chip. a) Tenga una ALU optimizada para el espacio y úsela una y otra vez en los datos almacenados. Esto se denomina MCU y requiere una amplia área de silicio que "no hace nada", la memoria del programa, los buses anchos que se ejecutan de una unidad a otra y los interruptores de acceso al bus. b) Tenga una lógica detallada, con algunas partes opcionales optimizadas para el espacio, como multiplicadores, pequeñas RAM y CPU simples. Esto se denomina FPGA y requiere una amplia área de silicio que "no hace nada", interruptores programables y líneas de conexión.

Obviamente, con esas estructuras, las MCU funcionan mejor para tareas que se pueden dividir en trozos en serie, y las FPGA funcionan mejor para tareas que requieren operación en paralelo 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 alto 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 de muy bajo poder para competir con MCU de un dólar por puñado.

Para aplicaciones de bajo volumen, el costo de desarrollo tiende a dominar, y las MCU ganan, asumiendo que tienen la velocidad

    
respondido por el Neil_UK
7

Los sistemas basados en microprocesadores, y luego los microcontroladores, han sido capaces de lograr un enorme grado de funcionalidad gracias a su capacidad para usar muchos de los circuitos individuales en ellos para realizar muchas tareas diferentes en diferentes momentos. Creo que es instructivo comparar la máquina arcade 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 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 alrededor de la pantalla y disparar disparos entre sí. Tiene contadores de "deslizamiento" para la posición X e Y de cada tanque, la posición X e Y de cada tiro de los jugadores, el contador arriba / abajo para el ángulo de cada jugador y el ángulo de tiro de cada jugador, un contador para la puntuación de cada jugador, el ráster de X e Y -contadores de posición, y un montón de circuitos de control por encima de esas cosas. Cuenta con hardware para obtener datos del campo de juego de la ROM y mostrarlos, así como hardware para obtener formas para los dos tanques de los jugadores y puntuaciones de la ROM y mostrarlos.

El Atari 2600 tiene un contador de deslizamiento para las posiciones horizontales de cada uno de los dos objetos de jugador, cada uno de dos objetos de misiles, y un objeto adicional llamado "bola" que no se usa en Combate pero se usa en otros juegos. . Para cada uno de los objetos del jugador, tiene un hardware para generar un patrón almacenado en un pestillo de 8 bits, así como un pestillo de ocho bits "retrasado" para cada jugador que se copia al pestillo de 8 bits primario cuando el otro jugador la forma se actualiza. También tiene un contador de posición de haz horizontal y un seguro de forma de campo de juego de 20 bits que se envía a la pantalla dos veces por línea de escaneo, con la copia del lado derecho como una repetición o un reflejo de la izquierda. Tiene hardware para detectar colisiones, pero no para hacer nada como consecuencia de ellas. No no tiene ningún hardware para las posiciones verticales de ningún objeto, ni la posición vertical del ráster (!), 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 hardware son manejadas por el software en el cartucho. Solo es necesario verificar la posición vertical de cada objeto con respecto a la posición del ráster una vez por línea de escaneo, solo es necesario actualizar el puntaje del jugador y el tiempo restante del juego a lo más uno por cuadro, los puntajes de los jugadores se almacenan en líneas de escaneo sobre el campo de juego. y, por lo tanto, puede 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 utilizar circuitos separados para diferentes funciones de la misma manera que lo hizo la máquina de arcade de 1976. Tal enfoque funcionaría, pero usa 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 utilizaron un microprocesador).

Los

FPGA son excelentes en los casos en que se necesita un dispositivo que pueda realizar muchas tareas simples simultáneamente . Los sistemas basados en microprocesadores (o basados en microcontroladores) son generalmente mejores, sin embargo, en los casos en los que hay muchas tareas que deben realizarse, pero no es necesario que se procesen simultáneamente, ya que facilitan el uso de una pequeña cantidad de circuitos para lograr un gran número de propósitos distintos.

    
respondido por el supercat
5

Es totalmente el costo. Cuando un micro puede ser tan bajo como 30 centavos, un FPGA barato está en el territorio de $ 5. Puede que el costo no parezca tan alto, pero cuando usted hace un millón de juguetes novedosos para venderlos a $ 10, el precio del FPGA mata su balance final.

    
respondido por el vini_i
5

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 los dispositivos neuromorfos, las placas FPGA se están volviendo bastante ubicuas porque hay una gran necesidad de paralelismo, que es un punto fuerte de FPGA.

Si extrapola la tendencia que vemos para los dispositivos neuromórficos, uno puede imaginar que otros campos que se basan, o requieren críticamente, el paralelismo probablemente adoptarán los FPGA mucho más. Quizás el FPGA no se convierta en algo omnipresente para los productos de grado de consumo, pero puede ser para dominios específicos, ya que parece que está sucediendo con los dispositivos neuromórficos.

    
respondido por el gaborous

Lea otras preguntas en las etiquetas