Respuestas:
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/
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?
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.
Se utilizan para descifrar claves de cifrado mucho más rápido que una computadora de uso general. :RE
Para ahorrar dinero y riesgo frente a un ASIC. A menos que usted
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.