¿Qué es un FPGA?

38

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

zklapow
fuente

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 que en el uC (microcontrolador). En una uC, no puede cambiar el diseño interno de la uC; solo puede 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 su PC.

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

Enlaces útiles:

Ejemplo de uso: http://nsa.unaligned.org/

Maciek Sawicki
fuente
3
Notaré que muchos FPGA son lo suficientemente grandes como para contener múltiples núcleos de CPU, lo que permite que el FPGA sea una computadora completa en sí misma.
Craig Trader
3
Como nota, creo que velocidades de reloj más bajas pueden ser engañosas. en comparación con una PC, sí. En comparación con un pic16, pueden ser más rápidos, pero depende del costo. La mayoría de los más baratos que he tenido en mis manos funcionan a 40MHz, pero de nuevo, variación de producto a producto.
Kortuk
23

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

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

El beneficio de uC es que puede programarlo en el campo (en su escritorio), con un lenguaje fácil de usar, familiar y de alto nivel 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 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 más o menos para controlar esa salida de una entrada. Y se necesita todo el chip uC para hacerlo tan rápido. Claro, puede hacer mucho más, pero su capacidad para controlar esa salida se ralentizará a medida que el uC esté ocupado haciendo otras cosas.

En un FPGA, podría configurar las puertas para que una entrada controle una salida en 1 reloj. Entonces 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 posedge) ledPin <= buttonPin;

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

Puedo reprogramar mi FPGA para hacer otra cosa, por ejemplo controlar el led basado en una combinación de cuatro entradas, todavía en un reloj, todavía usando esa 1 celda FPGA. O controle el led en función de una transmisión en serie desde la entrada, en unas pocas celdas FPGA, que serían cientos de puertas. Por lo tanto, podría controlar el LED en función de los datos en serie, decir "ON" u "OFF", con la transmisión en serie a una velocidad muy alta (fácilmente 20MHz), y aún así usar solo una pequeña fracción de la capacidad del FPGA.

Entonces, 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 hecho en paralelo. Cosas complejas que un uC tardaría en milisegundos, un FPGA podría hacer en microsegundos o menos. Mientras haya puertas restantes en el FPGA, puedo agregarle más funciones sin afectar la velocidad o el funcionamiento de las funciones anteriores en el FPGA. Por cierto, un FPGA puede ejecutar muy fácilmente una frecuencia 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 lo mismo que un chip Arduino AVR. También hay cadenas de herramientas gratuitas (IDE, compilador, depurador) para FPGA.

El poder no es un diferenciador. Como puedo ejecutar el FPGA a una frecuencia de reloj mucho más baja para obtener la misma función que un uC, y usar una pequeña porción de sus compuertas (las compuertas no utilizadas solo usan potencia de fuga), un FPGA puede vencer el poder de casi cualquier unidad 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 uC. Un proyecto típico de uC que podría hacer en una noche podría llevar días en un FPGA.

Otros problemas potencialmente reparables 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 necesitaría 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 los uC fáciles de usar, entonces, ¿por qué molestarse con un FPGA?

SiliconFarmer
fuente
2
"Puedo comprar un FPGA que podría implementar casi cualquier diseño de Arduino que haya visto por alrededor de $ 5" Lo siento, pero ¿qué pasa? ¿Dónde?
Medivh
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 OR C cambia instantáneamente cuando A, B o C cambian.

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

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

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

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

ppvi
fuente
Conozco muchos EE practicantes con muchos años de experiencia que a menudo solo pasarán por un FPGA en el diseño en lugar de un uC donde solía ver uC. Realmente creo que son excelentes para el manejo de la interfaz.
Kortuk
Sí, creo que este es un buen ejemplo: armadeus.com/english/index.html . Especialmente interesante para mí es el ejemplo del servocontrol: marwww.in2p3.fr/~duval/wiki_html_dump/articles/m/o/t/…
Maciek Sawicki
2
También es de notar que hay más y más convertidores "C a VHDL" o "C a Verilog". Todavía no son las cosas más eficientes, pero puede convertir el código ya escrito en hardware que pueda utilizarse para mejorar la velocidad. Bastante genial si me preguntas (y si tienes la masa para ello).
Chris Gammell
5

Se utilizan para descifrar claves de cifrado mucho más rápido que una computadora de uso general. :RE

endolito
fuente
1
Jaja, disfruté de tu descripción muy funcional. Son absolutamente sorprendentes en el procesamiento paralelo.
Kortuk
Un proyecto de descifrador de códigos: copacobana.org
hhh
2

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

  1. Se preocupa profundamente por el poder o
  2. Están construyendo un montón de ellos (digamos> 10k unidades)

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

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

Brian Carlton
fuente