FPGA: todo sobre estos chips y su programación

Chip FPGA

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?

Celdas programables

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?

IDE para programar FPGA

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?

Programador para FPGA

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

FPGA 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.


Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.