Los FPGAs se han vuelto mÔs y mÔs populares en los últimos tiempos. Incluso para aplicaciones profesionales se suelen usar estos chips, pero también para DIY y makers que quieren implementar un circuito discreto dentro de un chips con todas las ventajas que esto implica. No es barato ni fÔcil encontrar una fabrica para enviar tus layouts o patrones y que te fabriquen un chip a medida.
Es cierto que algunas foundries permiten fabricar wafers u obleas multiproyecto para fabricar chips de particulares o universidades para realizar pruebas con ellos. Este tipo de fĆ”bricas son, como digo, difĆciles de encontrar, suelen estar en el extranjero y no resultan baratas. Tras un tiempo se te envĆa a la dirección acordada unas muestras o samples de tus chips, pero ellos no se hacen cargo de testar estos o comprobar que funcionen. Todo depende de tu diseƱoā¦
Una solución alternativa a eso es adquirir un FPGA y programar lo que quiera que sea lo que necesites implementar dentro del chipā¦
¿Qué es un FPGA?
FPGA son las siglas de Field Programmable Gate Array. Son dispositivos digitales o chips que son capaces de configurarse para permitir implementar prÔcticamente cualquier cosa. Es decir, dicho con otras palabras, es un chip en blanco donde tú puedes «escribir». Eso significa que podrÔs implementar una CPU, una memoria, un controlador, cualquier lógica, etc., consiguiendo un funcionamiento muy rÔpido y con todas las ventajas de tenerlo integrado en un chip y no con elementos electrónicos.
Ross Freeman y Bernard Vonderschmitt, cofundadores de Xilinx, fueron los que inventaron el FPGA en 1984. Lo hicieron como evolución a los chips CPLD de aquella Ć©poca. Los chips programables CPLD tenĆan unas carencias que resolvieron los nuevos diseƱos FPGA y desde entonces han venido evolucionando hasta la fecha.
El mercado de FPGAs es tan fructĆfero que compaƱĆas como Intel, Xilinx, Altera, Quick Logic, Lattice, etc., han invertido mucho para desarrollar mejores FPGAs y tambiĆ©n entornos de programación integrados o IDEs para ellos. Aportando asĆ plataformas muy buenas para facilitar la tarea de los desarrolladores o makers.
Actualmente esos fabricantes no solo aportan un chip programable, sino que tambiƩn incluyen numerosos elementos auxiliares para aportar mƔs posibilidades a los desarrolladores. Por ejemplo, incluyen celdas de memoria flash, celdas de memoria SDRAM, etc.
¿Para qué se utilizan?
Por tanto, un FPGA puede ser similar a un ASIC pero que nosotros podemos elegir lo que va a ser. Por ejemplo, podrĆamos crear un código para programarlo y convertirlo en una CPU, en una GPU, en un sumador, un controlador de memoria, o cualquier otro circuito lógico implementado en un solo chip.
Las posibilidades son bastante infinitas. De hecho, te recomiendo visitar la pÔgina web opencores.org, un sitio dedicado a ofrecer multitud de proyectos de hardware libre. EncontrarÔs códigos en VHDL, Verligo, etc., para RAM, CPU, GPU, controladores, ALUs, FPUs, decodificadores, y un largo etc.
¿Cómo se programa?
Para programar un FPGA lo podemos hacer desde nuestro sistema operativo favorito, como GNU/Linux, Windows y MacOS, aunque ciertamente existen mĆ”s entornos de desarollo para Windows. Por lo general, las mismas compaƱĆas que fabrican el FPGA ofrecen un IDE muy completo con el que trabajar y donde encontrar todas las herramientas que necesitas en una misma suit de software.
También necesitarÔs el chip o placa FPGA y el cable o programador necesario con el que podrÔs conectar el FPGA a tu PC para pasar el código escrito al FPGA y asà que quede programado. Eso es algo similar a lo que haces con la placa Arduino, grabando el programa de Arduino IDE en la memoria programable del microcontrolador.
Solo que en el caso del FPGA lo que tenemos es una matriz o array de componentes elementales como celdas de memoria, compuertas AND, OR, NOT, Flip-flops, y otros elementos o bloques bÔsicos de electrónica digital que podemos usar. Con el programa escrito lo que vamos a hacer es imponer la forma en que esos bloques esenciales se van a agrupar para formar el cirucito que queremos, como por ejemplo una ALU.
Es decir, si programamos un sumador en nuestro IDE, los bloques necesarios para implementar este sumador se van a enlazar de la forma correcta dentro del FPGA para que el chip funcione como un sumador. Sencillo Āæverdad? Por lo general se usan varios mĆ©todos para esta programación a nivel fĆsico, como suelen ser memorias o fusibles para hacer un enlazado permanente en ese caso.
La velocidad a la que operan va a depender de la frecuencia de reloj a la que trabaje el FPGA que hemos comprado. Por ejempo, los mĆ”s bĆ”sicos suelen funcionar a 50 Mhz, otros lo harĆ”n a frecuencias mucho superiores. En el caso del FPGA a 50 Mhz, eso quiere decir que operarĆ” a un ritmo de 50.000.000 veces por segundos. Si seguimos con el sumador que he puesto como ejemplo, podrĆ” hacer esa cantidad de sumas en un segundoā¦
Siguiendo con el tema de la programación, una vez que sabemos que se puede escribir código como lo harĆamos en Arduino IDE o para desarrollar cualquier otro programa, y de ver cómo se hace a nivel de hardware, dirĆ© que realmente no se trata de una programación como tal. MĆ”s bien es una descripción de hardware. De hecho se usan lenguajes de descripción de hardware como es VHDL, Verilog, etc.
Con ese programa se describe a nivel lógico lo que hace el cirucito que queremos implementar. Y luego se pasa al FPGA. Aunque es verdad que algunas plataformas permiten programación en lenguajes de programación como C para poder implementar una CPU en el FPGA y luego generar programas para cargar en una memoria y ser procesadas por dicho procesador.
Integración con Arduino
Los FPGAs suelen usarse por separado, pero es cierto que existen multitud de herramientas y kits en el mercado que te facilitarƔn la vida para poder integrar tu FPGA con la plataforma Arduino. Un ejemplo de placa para llevar FPGA a tus proyectos con Arduino es MKR Vidor 4000, aunque hay otras.
MKR Vidor 4000 es una placa con tres chips. Uno de ellos es un FPGA, concretamente un Intel Cyclone 10. TambiƩn hay otros chips para conectividad Bluetooth LE o de bajo consumo y tambiƩn compatibilidad WiFi. Un buen complemento para dotar a tu Arduino de funcionalidades de conectividad y poder implementar lo que necesites en el FPGA.
Con ello tienes un hardware personalizable, configurado por ti mismo para el propósito que quieras. Eso ofrece infinitas posibilidades.