04 May ¿Qué es una FPGA? ¿Por qué está en auge en la comunidad Maker?
Los grandes avances de la electrónica y con ello la bajada de precios están haciendo posible que las FPGAs estén adquiriendo gran popularidad en el mundo geek/maker. Pero ¿Qué es una FPGA?
La FPGA es un tipo dispositivo electrónico formado por bloques funcionales unidos a través de un array de conexiones programables. Las FPGAs fueron inventadas en el año 1984 por la empresa Xilinx y hoy en día ya son varios fabricantes como Altera (comprado por Intel en 2015), MicroSem, Lattice Semiconductor o Atmel, entre otros.
Las diferencias de funcionamiento con un microprocesador son importantes, ya que mientras en un microprocesador realizas un programa escrito en uno de los muchos lenguajes existente, para que una vez compilado y convertido a instrucciones que pueda ejecutar el microprocesador, es almacenado en una memoria. Luego el microprocesador las irá ejecutando secuencialmente y almacenando los resultandos en otra zona de memoria. En cambio, cuando se programa una FPGA lo que estamos haciendo es modificar una matriz de conexiones, que consiguen que los bloques individuales que la constituyen, hacen que físicamente se constituya un circuito electrónico, de forma similar a como haríamos en una placa de entrenamiento o al fabricar un chip propio.
Como ves, la diferencia sustancial es que un procesador tiene una estructura fija y modificamos su comportamiento a través del programa que realizamos, traducido en código máquina, y ejecutado de forma secuencial. Sin embargo, en un FPGA variamos la estructura interna, sintetizando uno o varios circuitos electrónicos en su interior. Al «programar» el FPGA definimos los circuitos electrónicos que queremos que se configuren en su interior.
¿Pero con qué lenguaje se programan las FPGAs?
En realidad no se «programan» en el sentido al que estamos acostumbrados, empleando un lenguaje como C o Python. De hecho, los FPGA usan un tipo diferente de lenguaje denominado lenguaje descriptivo de hardware, en lugar de un lenguaje de programación. Estos lenguajes descriptivos se denominan HDL o Hardware Description Language y como ejemplo son Verilog (que es Open Source) , HDL o ABEL.
Los fabricantes proporcionan herramientas comerciales para programar sus propios FPGA y lamentablemente, la mayoría no son gratuitos, o lo son sólo para algunos modelos de FPGA del fabricante. Con la evolución en el desarrollo de las FPGA también han aparecido herramientas centradas en la programación gráfica de las FPGA como LabVIEW FPGA, o el proyecto Open Source IceStudio desarrollado por Jesús Arroyo Torrens. Por otro lado, el principal motivo del auge de la popularización de los FPGA en el ámbito doméstico/maker es el trabajo de ingeniería inversa realizado por Clifford Wolf en el FPGA Lattice iCE40 LP/HX 1K/4K/8K, que dio lugar al proyecto IceStorm.
El proyecto IceStorm es un toolkit (formado por IceStorm Tools + Archne-pnr + Yosys) que permite la creación del bitstream necesario para programar un FPGA iCE40 con herramientas open Source. Es importante tener en cuenta que antes de programar una FPGA, es necesario simular dicha programación. ¿Y por qué te preguntarás?

Software IceStudio para programar FPGA iCE40
Cuando programamos un procesador, si cometemos algún error no suele haber problemas graves. Habitualmente incluso tendremos un entorno donde poder hacer Debug y poder tracear el programa, definir puntos de interrupción, y ver el flujo del programa. Sin embargo, al programar una FPGA estamos configurando físicamente un sistema y, en caso de error, podríamos provocar un cortocircuito y dañar parte o todo la FPGA. Por ese motivo, y como norma general, siempre simularemos el diseño a probar en antes de cargarlo en el FPGA real. Para la simulación se emplean, así mismo, lenguajes descriptivos, en combinación con algún software que permita simular y graficar la respuesta del FPGA. Un ejemplo de GTKWave.
Tal vez te estés preguntando ¿Qué es mejor Arduino, FPGA o Raspbery? Pues… ¿Qué es mejor, una cuchara, un cuchillo o un tenedor? Son herramientas distintas, que destacan en cosas distintas. Ciertas tareas pueden realizarse con ambas, pero en algunas resulta mucho más adecuado y eficiente emplear una de ellas. De hecho, podemos usarlas todas incluso simultáneamente. Así, existen dispositivos que combinan un procesador junto con un FPGA para proporcionarnos lo mejor de ambos mundos. En cualquier caso, las FPGA son una herramienta muy potente y lo suficiente diferentes del resto para ser interesantes por sí mismos.
¿Tienen futuro los FPGA Open Source y en el campo «doméstico» o son una moda pasajera?

Tarjeta Alambra que contiene una FPGA iCE40 (Hardware Open Source)
La respuesta corta es, esperemos que sí. La larga es que, a día de hoy, únicamente tenemos un FPGA (el iCe40) disponible compatible con herramientas Open Source, y en realidad es FPGA bastante pequeño y poco potente. Si la técnica sigue avanzando y la comunidad no es lo suficiente fuerte para generar un ecosistema que empuje de las FPGA hacia el Open Source, hay un cierto riesgo en que quede una burbuja pasajera. La mejor forma es fomentar a la extensión de este tipo de dispositivos, y que se genere una comunidad fuerte que propicie la popularización de esta tecnología. Y si es posible, creando y mejorando las herramientas Open Source disponibles para las FPGAs.
Sin comentarios