¿Qué es un FPGA?

36

He visto a muchas personas hablar de FPGA antes y sé que significa una matriz de compuerta programable en campo, pero ¿cómo funciona y cuál es el propósito de usar un FPGA?

    
pregunta zklapow

5 respuestas

30

Son componentes electrónicos que agregan lógica a sus circuitos (por lo que son similares a los microcontroladores). Pero el enfoque de diseño es completamente diferente al de la UC (microcontrolador). En un uC, no puede cambiar el diseño interno de uC; Sólo puedes ejecutar programas "clásicos" en él. Programar FPGAs es más como crear nuevo hardware. Crea nuevas conexiones entre puertas lógicas y crea un nuevo procesador especializado. Y puede hacerlo todo en su hogar, en su escritorio y en su PC.

¿Suena genial? Sí, pero hay algunas desventajas. Por ejemplo, el precio (pero creo que es difícil compararlo), un mayor consumo de energía y velocidades de reloj más bajas (pero puede diseñar su aplicación de forma inteligente y realizar más operaciones en un ciclo de reloj).

Enlaces útiles:

Ejemplo de uso: enlace

    
respondido por el Maciek Sawicki
23

Un FPGA es literalmente un conjunto de puertas lógicas que se pueden programar en el campo. Flip flops, multiplexores, tablas de búsqueda de 4 bits, etc. que se pueden conectar de la forma que desee, utilizando un lenguaje similar a C (Verilog).

Un uC, como un AVR, también está hecho de puertas lógicas similares, pero se configuran cuando se crea el dispositivo. Claro, tiene RAM y Flash para que pueda escribir software para leer entradas y controlar salidas, pero no puede cambiar los arreglos reales de las puertas. Las puertas siempre se organizarán en una ALU, un controlador de memoria, un puerto serie, etc.

El beneficio de la uC es que puede programarlo en el campo (en su escritorio), con un lenguaje familiar y de alto nivel fácil de usar, como C. El problema es que el software es "lento". Para que una entrada controle una salida, en el caso más simple, puede escribir:

bucle de vacío () {    buttonState = digitalRead (buttonPin);    if (buttonState == HIGH) {
     digitalWrite (ledPin, HIGH);
   }    else {      digitalWrite (ledPin, LOW);    }  }

Eso se convertiría en una docena de instrucciones de ensamblaje, por lo que el bucle tomaría un microsegundo para controlar esa salida desde una entrada. Y se necesita todo el chip de uC para hacerlo tan rápido. Claro, puedes hacer mucho más, pero luego tu capacidad de controlar esa salida se ralentizará a medida que la unidad uC se ocupe de hacer otras cosas.

En un FPGA, podría configurar las puertas para que una entrada controle una salida en 1 reloj. Así que la salida seguiría la entrada con un retraso de quizás 25 nanosegundos. Eso es 40 veces más rápido, usando el mismo período de reloj. Y el resto de las puertas en el FPGA están disponibles para hacer muchas otras cosas, lo que no afectará la velocidad de esta pequeña función.

El código para el FPGA sería un simple flip flop:

siempre @ (reloj de posición)     ledPin < = buttonPin;

Esto tomaría solo 1 celda FPGA, aproximadamente 40 compuertas, de decenas de miles en un FPGA.

Puedo reprogramar mi FPGA para hacer otra cosa, por ejemplo, controlar el led en base a una combinación de cuatro entradas, aún en un reloj, aún usando esa celda de 1 FPGA. O controle el led basándose en un flujo en serie desde la entrada, en unas pocas celdas FPGA, que serían cientos de puertas. Así que pude controlar el LED según los datos en serie, digamos "ON" u "OFF", con el flujo en serie a una velocidad muy alta (fácilmente 20MHz), y aún así solo uso una pequeña fracción de la capacidad del FPGA.

Así que la ventaja de un FPGA es claramente la velocidad. Puede hacer cualquier cosa que un uC pueda hacer, y puede hacerlo mucho más rápido, con todo lo que se hace en paralelo. Las cosas complejas a las que tomaría milisegundos un uC, un FPGA podrían hacerlo en microsegundos o menos. Siempre que queden puertas en el FPGA, puedo agregarle más funciones sin afectar la velocidad ni el funcionamiento de las funciones anteriores en el FPGA. Por cierto, un FPGA puede ejecutar muy fácilmente una velocidad de reloj de 20MHz.

El costo no es un diferenciador. Puedo comprar un FPGA que podría implementar casi cualquier diseño de Arduino que haya visto por alrededor de $ 5, casi igual que un chip AVR de Arduino. También hay cadenas de herramientas gratuitas (IDE, compilador, depurador) para FPGA.

El poder no es un diferenciador. Ya que puedo ejecutar el FPGA a una velocidad de reloj mucho menor para obtener la misma función que una unidad uC, y usar una pequeña parte de sus puertas (las puertas no utilizadas solo usan energía de fuga), una FPGA puede superar la potencia de casi cualquier fuente basada en uC diseño.

El mayor inconveniente de un FPGA es que es mucho más complejo y lento definir, escribir el código y depurar un diseño FPGA no trivial que un programa de uC. Un proyecto típico de los Estados Unidos que podría hacer en una noche podría tomar días en un FPGA.

Otros problemas potencialmente solucionables son que la mayoría de las personas están capacitadas en programación de software, pero pocas entienden la programación de hardware. Puedes aprender Verilog con bastante facilidad. Pero también tendría que pensar en términos de diseño de hardware en lugar de diseño de software. Los patrones de diseño son muy diferentes.

Otro problema es que los FPGA no vienen en pequeños paquetes DIP de 8 a 20 pines. Tienden a venir en paquetes de montaje en superficie de 100 pines o más grandes, por lo que construir las tablas es más difícil.

Y un problema final es que se pueden implementar muchos proyectos interesantes en esos uC fáciles de usar, así que, ¿por qué molestarse con un FPGA?

    
respondido por el SiliconFarmer
9

Si está familiarizado con las puertas lógicas básicas, debe saber que son prácticamente instantáneas. La operación A y B O C cambia instantáneamente cuando A, B o C cambian.

Un FPGA es (una especie de) una matriz de compuertas lógicas programables. Puede definir las entradas y salidas (como una combinación de las entradas).

En un uC, A + B / C * sqrt (D) llevaría varios ciclos de reloj y algo de memoria. En un FPGA, el resultado es casi inmediato.

Son excelentes para video, DSP, criptografía ...

Esa es la principal ventaja. Los FPGA modernos se adaptan ahora a la memoria y hay híbridos uC / FPGA.

    
respondido por el ppvi
5

Se utilizan para descifrar claves de cifrado mucho más rápido de lo que lo haría una computadora de propósito general. : D

    
respondido por el endolith
2

Para ahorrar dinero y riesgo frente a un ASIC. A menos que usted

  1. Profundamente preocupado por el poder o
  2. Están construyendo un montón de ellos (por ejemplo, > 10k unidades)

los costos fijos (NRE) de hacer un ASIC hacen que su costo sea prohibitivo.

Ya que puedes cambiar un FPGA fácilmente, puedes simular menos el diseño y entrar al laboratorio más rápido. También puedes hacer un diseño parcial y construir sobre él, como en el software.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas