Páginas

domingo, 2 de diciembre de 2018

FPGAs libres

¿Qué son las FPGA?

FPGA (field-programmable gate array) son un tipo de chips que contienen una matriz de puertas lógicas donde que podemos configurar:
  • La E/S
  • Las interconexiones entre las puertas lógicas de la matriz
  • La operación de cada una de las puertas lógicas, AND, OR, NOT, XOR y Biestables. No es que en cada elemento de la matriz exista N puertas lógicas combiandas de una manera ingeniosa, lo que se almacena en cada elemento de la matriz es una micromemoria que asocia a cada dirección de entrada una salida. Así si en un elemento de la matriz queremos guardar una puerta AND tendríamos una memoria en la que en la dirección 00 hay almacenado un cero, en la dirección 01 hay almacenado un 0, en la dirección 10 hay almacenado un 0 y en la dirección 11 hay almacenado un 1. La tabla booleana sería:
   DIR. ENTRADA | DATO SALIDA
   00                      | 0
   01                      | 0
   10                      | 0
   11                      | 1

Actualmente estos dispositivos están experimentando un gran auge desde que Clifford Woolf en 2014 liberó sus herramientas open source (Verilog) para reprogramar las FPGA ICE40 de Lattice, lo que ha dado un gran impulso a esta tecnología (hasta la fecha ultra protegida), se están empezando a liberar estos chips, y se está desarrollando una cultura de hardware libre similar a la que GNU supuso en el mundo del software libre de los años 80.

Las ventajas de poder programar internamente un chip son muchas:
  • Cualquier dispositivo con estos chips pasan a ser multipropósito, reconfigurables y actualizable. Se minimiza la obsolescencia y la necesidad de contar con N dispositivos. Un dispositivo puede reprogramarse en milisegundos para ser otra cosa.
  • Se abre un ecosistema de hardware libre (https://opencores.org/) donde cualquiera puede desarrollar o vender 'librerías' de circuitos que permitan configurar un dispositivo para cualquier finalidad: contadores, codificadores, decodificadores, encriptador, desencriptador, procesamiento de imágenes, procesamiento de sonido, etc.
  • Ya existen 'traductores' que permiten pasar desde lenguajes de alto nivel (C/C++) al lenguaje HDL (Hardware Description Languaje) para programar esos circuitos desde un lenguaje conocido. Existen también proyectos como IceStorm que permiten generar HDL mediante una interfac gráfica. El código HDL se traduce a un chorro de bits (bitestream) que es lo que se usa para grabar las FPGA.
  • La liberación de las FPGA pueden suponer una revolución en automatización industrial, IoT, Smart Cities, redes neuronales, procesamiento de lenguaje natural, algoritmos genéticos, robótica, reconocimiento de patrones en el big data, etc.
¿Qué ventajas tienen las FPGA frente a los microcontroladores?

Desde hace unos años tenemos una revolución en marcha con microcontroladores como Arduino o Raspberry Pi (10 euros) que permiten desarrollar pequeños programas asociados a sensores/actuadores en el mundo de IoT y la robótica. Estos dispositivos ha supuesto una auténtica revolución tanto a nivel comercial como a nivel educativo.

Las FPGA ofrecen varias ventajas importantes frente a los microprocesadores:
  • Velocidad. Las FPGAs procesan la información muchísimo mas rápido que los micros actuales, trabajan en velocidades similares a procesadores de niveles superiores. Cualquier micro sigue las instrucciones de un programa escrito en algún tipo de lenguaje ensamblador que es traducido a instrucciones máquina por el microcódigo y ejecutado en el procesador por lo que cualquier instrucción por sencilla que sea implica varios pasos que se ejecutan en varios ciclos de reloj. Una FPGA está 'cableada' para ejecutar ese mismo código sin instrucciones, por lo que es mucho mas rápida. Hoy en día las velocidades de reloj de los procesadores y micros actuales son mas altas que las velocidades de los FPGA pero la inercia del mercado será la de igualar estas velocidades.
  • Tiempo real. Al no depender el funcionamiento del chip de la ejecución de un programa la respuesta a eventos es instantánea. Con un micro debemos recurrir a interrupciones que avisan al procesador que está ejecutando una instrucción de muchos ciclos, que debe atender a otro evento, estas interrupciones son siempre 'escuchadas' al final de una ejecución.
  • Paralelismo. Una FPGA puede programarse para N funcionalidades a la vez. Si la FPGA tiene 64 entradas nada impide que usemos 32 entradas para un procesador de video y 32 entradas para un compresor de audio.
  • Volatilidad. Las FPGA son volátiles, por lo que al desconectar se pierde el circuito por lo que deberemos almacenar el bitstream en algún dispositivo externo que lo cargue de nuevo al arrancar el dispositivo.
  • Diseño de hardware accesible.Con la llegada de las FPGA libres el diseño de hardware se va a universalizar. Los chips actuales son cajas negras, pero desde ahora cualquiera podrá programar compartir y mejorar circuitos con lenguajes como Verilog y HDL.El hardware se genera vía software.
Hoy en día hay muchas empresas realizando inversiones millonarias en el mundo de las FPGA, por ejemplo: Intel, Microsoft y AWS. AWS por ejemplo ofrece FPGAS en la nube donde podemos programar nuestros 'circuitos' y abre el camino a que esos circuitos puedan ser revendidos como librerías a otros interesados.

Referencias:

https://es.wikipedia.org/wiki/Field-programmable_gate_array
https://www.youtube.com/watch?v=K8bM14-R9Ts
https://www.youtube.com/watch?v=GA1lN5dsgao
https://www.youtube.com/watch?v=By8x3gL88T0
https://alhambrabits.com/alhambra/
https://www.arduino.cc/en/Guide/MKRVidor4000
https://alhambrabits.com/software/