Programando el Hardware (I): El mundo de las FPGA

A día de hoy la mayoría de la gente sabe que un programa se crea a partir de código, que no es más que un fichero escrito con miles de instrucciones a hacer (operaciones matemáticas, movimientos de datos, y conexiones con periféricos), pero ¿y el hardware? ¿Sigue existiendo la filosofía de 4 personas rodeadas de chips soldando como locos como en los sesenta?

Actualmente al igual que el software y los programas han evolucionado también lo ha hecho la manera de diseñar el hardware, la parte física, y ésta evolución ha sido cambiando los soldadores por código. En otras palabras, actualmente el hardware se programa. Por extraño que parezca ya no se comenten los riesgos de actuar “in situ” (imaginad una mala unión en una placa que costase millones) así que para ello lo que se utiliza son las llamadas FPGA, entre otras herramientas. Éstas son capaces de emular un periférico hardware, normalmente a menor velocidad o potencia, pero con una actuación semejante a un chip real.

Durante los próximos artículos del tema trataré distintas de estas herramientas, unas más enfocadas al propio diseño hardware y otras a la robótica o ejemplos más directos al usuario final.

FPGA

FPGA (Field Programmable Gate Array, o Matriz de puertas programables) es un chip formado por millones de transistores que es capaz de emular cualquier diseño real.  Suele venir acompañado (o más bien conectado) a una placa con distintos sistemas de entrada y salida, como pueden ser leds, salida VGA o conexión a teclado y ratón. Existen de distintas gamas y potencias además de diferentes modelos dependiendo del diseño. (Si por ejemplo se va a trabajar en la edición de vídeo interesará una placa con conexión posiblemente HDMI o DVI, mientras que si el fin es para redes e internet será mucho más importante contar con una entrada ethernet o antenas wifi/3G).

¿Como funciona?

Para poder convertir un código (diseño de un dispositivo hardware) en un chip la FPGA simula todas las posibilidades y todas las salidas, por lo que se podría decir que no es más que una gran memoria que para cualquier conjunto de entrada devuelve una salida. Incorpora zona de cálculos intensivos (como pueden ser los multiplicadores) pero en esencia su capacidad radica en guardar todos los posibles recorridos que puede tener dicho código o diseño.

Su nombre, ‘Matriz de puertas programables’ nos indica que no se trata de nada más, una gran cantidad de transistores capaces de conservar un estado durante la “instalación” (guardan qué devolver dependiendo de qué entrada) y que luego actúan en consecuencia.

El entorno de programación de las FPGA convierte el código “humano” a un binario que indica a cada celda del chip qué labor ha de desempeñar, o en otras palabras, qué ha de tener en su memoria. Inicialmente esa memoria no ha de cambiar durante la ejecución del ejemplo, puesto que la programación de una celda está en el orden de los microsegundos y en cambio el ejemplo de ejecución trabaja sobre nanosegundos, pudiendo generar errores e inconsistencias.

Como programarla

Ejemplo de Codigo VHDL

Las FPGA se programan en el lenguaje del fabricante, como por ejemplo en VHDL (para Xilinx) o Verilog. Éste tipo de lenguajes, a diferencia de uno de programación estándar, se caracteriza en definir las conexiones eléctricas (o la unión de cables) y operaciones básicas entre registros (o cada espacio de memoria). Se podría decir que se trata de un lenguaje de “bajo nivel” (sin confundir con ensamblador, porque eso va por otra vertiente) al tratarse de la definición de las conexiones de registros y pines.

Como es evidente hacer funcionar algo “interesante” en una placa con una FPGA puede llevar horas o días, ya que hay que plantearlo de manera puramente hardware. También existe la posibilidad de inserta un pequeño simulador de procesador (picoblaze o Power PC) y así programar directamente en un lenguaje de software, aunque en tal caso pierde toda la gracia de ser una pieza para desarrollar nuevos dispositivos físicos.

Uso actual

Las FPGAs se utilizan sobre todo en el ámbito de la investigación (nuevos procesadores, equipos de redes o diseños de tarjetas PCI, gráficas y de sonido). Cuando un diseño está completamente acabado y cumple en las simulaciones con lo esperado las compañías de venta de FPGAs te dan un sistema para pasar tu diseño a un ASIC.

Los ASIC son chips creados directamente para llevar a cabo la funcionalidad definida en el diseño (en otras palabras, soldar exactamente las patillas y las puertas necesarias). Tienen la pega, a diferencia de una FPGA, de que un error obliga a destruir el ASIC, pero en cambio funcionan a pleno rendimiento. De hecho los procesadores, tarjetas gráficas y otros PCI (incluidos los microprocesadores que tienen periféricos como Kinect o Move) son en esencia ASICs.

Por lo tanto a día de hoy las FPGAs son el sistema de testeo de diseños hardware que en el futuro se convertirán en las nuevas piezas de nuestros equipos.

Futuros felices

Con el nacimiento de las FPGAs y la posibilidad de la programación del hardware muchos investigadores “soñaron” con chips con la capacidad de autoreprogramarse físicamente, en otras palabras, cambiar su forma (su diseño hardware) en tiempo de ejecución. Esto traería la feliz posibilidad de una “inteligencia artificial” que fuese aprendiendo y modificándose. Pero por desgracía a día de hoy hay varios inconvenientes.

Por una parte, como ya hemos indicado, el tiempo de reprogramación es mucho mayor que el de ejecución, por lo que al menos a día de hoy un sistema que fuese modificándose a si mismo estaría casi todo el tiempo reprogramandose exclusivamente y no volviendo a calcular (o a “pensar”). No obstante se sigue investigando dicha área.

Por otra parte siempre ha existido la leyenda de que la máquina razonaría por si misma, pero no se ha encontrado siquiera el diseño hardware que sea capaz de hacer que mediante reprogramaciones aprenda de si mismo.

Precios

FPGA Spartan 3 Estándar

Actualmente existen dos compañías esencialmente que crean y distribuyen FPGAs, Altera y Xilinx. Ambas disponen de un IDE (entorno de desarrollo) propio y un lenguaje de programación semejante. No existe gran diferencia entre los productos de las dos, ni siquiera en el precio.

Las FPGAs son herramientas de diseño profesional en la mayoría de los casos, por lo que su precio puede rondar (en las versiones más básicas) los 100 o 200 euros (FPGA + placa).  Si se quiere una más específica y potente el precio asciende de manera exponencial.

Conclusiones

Aunque las FPGA son herramientas de diseño profesional siempre está interesante probar a crear hardware e incluso periféricos que actúen con el PC normal. Como puede ser una tarjeta externa por USB con un diseño propio que agilice cálculos específicos como por ejemplo la renderización de vídeo o el muestreo de sonido.

Próximamente publicaré una segunda parte hablando de Arduino, un sistema hardware más sencillo y quizás interesante al ser más fácil de programar y más enfocado a “algo útil en poco tiempo” (vease la robótica). No obstante cabe destacar que las FPGAs pueden emular cualquier diseño hardware mientras que lo que explicaré próximamente está más enfocado a un software utilizable.

4 thoughts on “Programando el Hardware (I): El mundo de las FPGA

  1. FPGAs, micros, digital, etc… pero cuando toca tratar sonido anlogico y tensiones altas, las lamparas son las reinas indiscutibles.

Leave a Reply

Your email address will not be published. Required fields are marked *