Subido por marcos tellez

Qué es una FPGA

Anuncio
¿QUÉ ES UNA FPGA? MOTIVOS DE SU AUGE EN LA COMUNIDAD MAKER
Recientemente ha empezado a crearse un interés creciente por los dispositivos denominados FPGA, como
alternativa a la electrónica de microprocesadores.
En este estudio veremos qué es un FPGA, cuales son los motivos de su auge y popularidad en el mundo
geek/maker.
¿QUÉ ES UN 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 Ross Freeman y Bernard Vonderschmitt, co-fundadores de
Xilinx. Algunos de los principales fabricantes son Xilinx, Altera (comprado por Intel en 2015), MicroSem, Lattice
Semiconductor o Atmel, entre otros.
Los FPGA son más lentos que un ASIC (Application-Specific Integrated Circuit), procesadores específicos
desarrollados para desarrollar una determinada tarea. Sin embargo, la gran flexibilidad de poder cambiar su
configuración hace que su coste sea menor tanto para pequeños lotes de fabricación como para prototipado,
debido al enorme gasto requerido para desarrollar y fabricar un ASIC.
Los FPGA son empleados en la industria dedicadas al desarrollo de circuitos integrados digitales y centros de
investigación para crear circuitos digitales para la elaboración de prototipos y pequeñas series de ASIC.
¿EN QUÉ SE DIFERENCIA DE UN PROCESADOR?
Aunque en primer momento parece que un procesador y un FPGA son dispositivos similares, porque ambos son
capaces de realizar ciertas tareas, lo cierto es que al profundizar es casi más fácil encontrar diferencias que
similaridades.
Para entrar en el tema, recordemos de forma muy resumida la forma de trabajar de un procesador. Un procesador
contiene una serie de instrucciones (funciones) que realizan operaciones sobre operadores binarios (sumar,
incrementar, leer y escribir de la memoria). Algunos procesadores tienen más instrucciones que otras (asociados
a circuitería interna del procesador) y es uno de los factores que determinan su rendimiento.
Por otro lado, contiene una serie de registros, que contienen los datos de entrada y salida en las operaciones del
procesador. Además, disponemos de memoria para almacenar información.
Finalmente, un procesador contiene una pila de instrucciones, que contienen el programa que va a ejecutarse en
código máquina, y un reloj.
En cada ciclo de reloj, el procesador lee de la pila de instrucciones los valores necesarios, llama a la instrucción
oportuna, y ejecuta el cálculo.
Cuando programamos el procesador empleamos uno de los muchos lenguajes disponibles, en un formato
entendible y cómodo para los usuarios. En el proceso de enlazado y compilación, el código se traduce a código
máquina, que se graba en la memoria del procesador. A partir de ahí, el procesador ejecuta las instrucciones, y
por tanto nuestro programa.
Sin embargo, al programar un FPGA lo que estamos haciendo es modificar una matriz de conexiones. Los bloques
individuales están constituidos por elementos que les permiten adoptar distintas funciones de transferencia.
Juntos, los distintos bloques, unidos por las conexiones que programamos, 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 vemos, la diferencia sustancial. Un procesador (en sus muchas variantes) 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.
¿CÓMO SE PROGRAMA UNA FPGA?
Los FPGA no se «programan» en el sentido al que estamos acostumbrados, con un lenguaje como C, C++, o
Python. De hecho, los FPGA usan un tipo diferente de lenguaje denominado lenguaje descriptivo, en lugar de un
lenguaje de programación.
Estos lenguajes descriptivos se denominan HDL o Hardware Description Language. Ejemplos de lenguajes HDL
son Verilog, HDL o ABEL. Verilog es Open Source, por lo que será uno de los que oiremos hablar con mayor
frecuencia.
Los lenguajes descriptivos no son algo exclusivo de los FPGA. Por el contrario, son una herramienta
extremadamente útil en el diseño de chips y SoC.
Posteriormente el integrador (a grandes rasgos, el equivalente al «compilador» en lenguajes de programación)
traduce la descripción que hemos realizado del dispositivo en un dispositivo sintetizable (realizable) con los
bloques del FPGA, y determina las conexiones que tiene que realizar.
Las conexiones al FPGA se traducen en una determinada trama de comunicación específica del FPGA
(bitstream), que es transmitida al FPGA durante la programación. El FPGA interpreta el bitstream y configura las
conexiones. A partir de ese momento, el FPGA está configurado con el circuito que hemos definido/descrito.
Los lenguajes HDL tienen una curva de aprendizaje difícil. La mayor dificultad es que tiene un grado de
abstracción muy bajo, ya que describen circuitos electrónicos. Esto hace que los proyectos crezcan enormemente
a medida que aumenta el código.
Los fabricantes proporcionan herramientas comerciales para programar sus propios FPGA. En la actualidad,
configuran entornos completos con una gran cantidad de herramientas y funcionalidades. Lamentablemente, la
mayoría no son gratuitos, o lo son sólo para algunos modelos de FPGA del fabricante. Lamentablemente, no son
gratuitos, y están unidos a la arquitectura de un único fabricante.
Con el desarrollo de los FPGA han aparecido otros lenguajes que permiten un mayor nivel de abstracción, similar
a C, Java, Matlab. Ejemplo son System-C, Handel-C, Impulse-C, Forge, entre otros.
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.
Finalmente, algunas iniciativas han intentado realizar la conversión desde un lenguaje de programación a HDL
(normalmente Verilog), que luego puede ser cargado en el FPGA con las herramientas del mismo. Ejemplos son
el proyecto Panda, el proyecto Cythi, o MyPython, entre otros.
¿POR QUÉ HAY QUE SIMULAR UN FPGA?
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 un FPGA estamos configurando físicamente un sistema y, en caso de error, podríamos
provocar un corto circuito y dañar parte o todo el 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.
Las suites comerciales, normalmente integran la herramienta de simulación dentro del propio entorno de
programación.
¿Qué precio tiene un FPGA?
Lógicamente existe un gran rango de precios, pero, en general, no son dispositivos baratos. Hablando del sector
doméstico (las que vamos a comprarnos nosotros) están en el rango de 20 a 80€ euros aproximadamente.
Por ponerlo en contexto, es mucho más caro que un Arduino Nano (16Mhz) o un STM32 (160Mhz) que podemos
comprar por 1.5€, un Node Mcu ESP8266 (160Mhz + WiFi) que podemos comprar por 3.5€. Incluso, son mucho
más caros que una Orange Pi (Quad 800 Mhz + WiFi), que podemos encontrar por unos 20€.
¿QUÉ POTENCIA TIENE UN FPGA?
Es difícil definir la potencia de cálculo de un FPGA, dado que es algo totalmente distinto a un procesador como
el que podemos encontrar en un Arduino, un STM32, un ESP8266, o incluso un ordenador como Raspberry PI.
Las FPGA destacan en la realización de tareas en paralelo, y por un control extremadamente fino del tiempo y el
sincronismo de las tareas.
En realidad, es mejor pensar en términos de un circuito integrado. Una vez programado, el FPGA constituye
físicamente un circuito. En general, como hemos comentado, un FPGA es más lento que el ASIC equivalente.
La potencia de un FPGA viene dada por la cantidad de bloques disponibles y la velocidad de su electrónica.
Además, intervienen otros factores como la constitución de cada uno de los bloques, y otros elementos como los
bloques de RAM o PLLs.
Por seguir con la comparación, la velocidad de un procesador viene determinada por su velocidad de
funcionamiento. Además, hay que tener en cuenta que un procesador frecuentemente requiere entre 2 a 4
instrucciones para realizar una operación.
Por otro lado, aunque los FPGA normalmente incorporan un reloj para la elaboración de tareas síncronas, en
algunas de las tareas la velocidad es independiente del reloj, y están determinado por la velocidad de los
componentes electrónicos que lo forman.
A modo de ejemplo, en el bien conocido FPGA Lattice ICE40, una tarea simple como un contador puede
ejecutarse a una frecuencia de 220Mhz (según el datasheet). En un único FPGA podemos hacer cientos de
bloques de estos.
¿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.
Afortunadamente, el campo científico y técnico no es como un partido de futbol o la política… no tenemos que
elegir un bando. 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.
¿Puedo hacer un procesador con un FPGA?
Por supuesto que sí. Un FPGA puede adoptar cualquier circuito lógico electrónico, y los procesadores son
circuitos electrónicos. La única limitación es que el FPGA tiene que ser lo suficientemente grande para alojar la
electrónica del procesador (y los procesadores no son precisamente pequeños)
Hay proyectos de pequeños procesadores que pueden ser configurados en un FPGA. Ejemplos son MicroBlaze
y PicoBlaze de Xlinx, Nios y Nios II de Altera, y los procesadores de código abierto LatticeMicro32 y LatticeMicro8.
Incluso existen proyectos para emular procesadores históricos en FPGA, como el procesador del Apollo 11
Guidance Computer.
Emular un procesador FPGA es un ejercicio interesante tanto por la complejidad, como por el aprendizaje.
Además, es interesante si queremos probar nuestro propio procesador o nuestras ideas.
Sin embargo, en la mayoría de los casos, resulta más sencillo y económico combinar el FPGA con un procesador
existente. Existen muy buenos procesadores (AVR, ESP8266, STM32).
¿Por qué están en auge los FPGA?
En primer lugar, porque con el tiempo las tecnologías bajan de precio. Hace no muchos años un autómata con
una capacidad similar a un Arduino podía costar cientos e incluso miles de euros, y ahora podemos encontrarlo
por pocos euros.
De forma similar, los FPGA han ido alcanzando popularidad en la industria. A medida que aumenta la producción
han aparecido con mayores capacidades y funcionalidades. Incluso existen gamas destinadas a dispositivos
embebidos o aplicaciones móviles. Todo esto propicia la bajada de precio de ciertos modelos de FPGA.
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.
El trabajo de Clifford se realizó un IceStick, una placa de desarrollo con un FPGA iCE40, por su bajo coste y
pequeñas características técnicas, que permitían el trabajo de ingeniería inversa.
Fue la primera vez que se podría programar un FPGA con herramientas Open Source. Esto permitió la generación
de una creciente comunidad de colaboradores que han dado como frutos maravillas como IceStudio o Apio.
Tener en cuenta que el resto de FPGA requieren inversiones de cientos de euros para comprar el FPGA y hasta
miles de euros en el software.
Digamos que, salvando distancias, el proyecto IceStorm y el Lattice ICE fue el inicio de una revolución en el
campo de las FPGA similar a la que empezó Arduino con los procesadores AVR de Atmel, y que ha permitido
poner al alcance de los usuarios domésticos.
¿TIENEN FUTURO LOS FPGA O SON UNA MODA PASAJERA?
Pues aún sin tener una bola de cristal, lo más probable es que los FPGA sean dispositivos que tendrán utilidad,
al menos, a medio y corto plazo. Como hemos dicho, se usan frecuentemente para facilitar el diseño y prototipo
de ASIC. Además, están ampliando su ámbito de aplicación, desde aplicaciones con cálculos pesados (sistemas
de visión, IA, conducción autónoma) a versiones ligeras para dispositivos móviles.
Como ejemplo de su viabilidad, considerar que Intel ha invertido 16.700 millones de dólares en la compra de
Altera. Estimaciones del mercado apuntan a una estimación de 9000-10000 millones de dólares para el 2020,
frente a los 6000-7000 millones de dólares de 2014, y un crecimiento anual del 6-7% (muy por encima del 1-2%
del crecimiento medio para el sector de los semiconductores).
Hablando del futuro (años) en el que los FPGA se abaraten y popularicen, podemos incluso imaginar sistemas
híbridos FPGA y procesador (o incluso totalmente FPGA) donde el software puede reconfigurar el hardware,
creando o deshaciendo procesadores, o memoria, en función de las necesidades.
La auténtica pregunta es ¿tienen futuro los FPGA Open Source y en el campo «doméstico» o son una moda
pasajera?
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.
EL FLUJO DE TRABAJO CON LOS FPGA
Etapas del diseño para una FPGA (Fuente: FPGA wars)
A la hora de configurar una FPGA, el primer paso es el diseño del circuito, para lo que se necesitan conocimientos
de electrónica digital. A diferencia de la programación software, es mucho más complicado empezar a picar código
si no se tiene clara la arquitectura de la aplicación. Lo recomendable en este punto es hacer un diagrama del
circuito completo para ser conscientes de las múltiples señales que van a coexistir y variar simultáneamente y de
las consecuencias de cada una ellas.
Una vez claro lo que se pretende implementar, se procede a describir el circuito usando uno de los lenguajes ya
citados: Verilog o VHDL. Otro hecho que nos da pistas sobre el cambio de paradigma es que no se llaman
lenguajes de programación, sino lenguajes de descripción.
Debido a la complejidad de probar los circuitos digitales, lo habitual en este punto es usar bancos de prueba que
simulan el comportamiento del hardware. Este tipo de herramientas permiten ver el estado de la señal en cada
instante y verificar que las transiciones son las esperadas y los resultados los deseados.
La tercera etapa es la conocida como síntesis del circuito y es una de las claves del proceso. En ella se van a
escoger los elementos a usar y su interconexión en función de los archivos de descripción. Por supuesto, para
esta fase contamos con herramientas para facilitar y automatizar la tarea en la mayoría de las situaciones.
Todos los pasos anteriores son iguales para todas las FPGAs, independientemente del fabricante o la familia. Sin
embargo, la última etapa, conocida como emplazado y enrutado, es específica para cada familia. En esta fase se
genera el bitstream, que describe la configuración interna de la FPGA necesaria para originar lo que haya sido
previamente descrito y sintetizado. Lo único que queda es cargarlo en la placa y validar el diseño.
CONCLUSIONES
A nuestro parecer, estos dispositivos a medio camino entre el software y el hardware, resultan cuanto menos
desafiantes para todo apasionado por la tecnología. Bien es cierto que la curva de aprendizaje es lenta, pero las
recompensas son muy valiosas.
Además de aprender electrónica digital de una forma interactiva y barata (podemos crear infinitos circuitos sobre
la misma FPGA), nos formaremos en un campo con mucha proyección de futuro. Como hemos contado más
arriba, su flexibilidad y elevada potencia de cálculo las está convirtiendo en una pieza muy importante en el campo
de la inteligencia artificial y el procesado de grandes cantidades de datos. También son una herramienta muy
apropiada para aquellas aplicaciones que requieran controlar al máximo los consumos, ya que el hecho de diseñar
circuitos específicos, nos permite optimizar al máximo la eficiencia.
Para los que estéis interesados en introduciros en este mundillo, la comunidad de FPGA wars es vuestra mejor
opción ahora mismo. Un placa Lattice iCEstick es seguramente la opción más barata ya que ronda unos 20€,
aunque también están naciendo poco a poco placas libres como la ICEZUM Alhambra. Con respecto a las
herramientas, si queréis comenzar con algo más intuitivo os recomendamos usar icestudio, un editor gráfico libre
que es una maravilla. Si os queréis tirar a la piscina y usar archivos de texto, podéis usar Apio, que dispone
incluso de un plugin para Atom.
Descargar