Datos del producto
Nombre del producto:Papilio Pro y nuestros primeros pasos en el fascinante mundo de las FPGAs
Fabricante:Gadgetfactory.net (China)
URL-Producto:papilio.cc
Precio:64 EUR el Papilio Pro LX9, 9 EUR el Analog Grove Wing y 4,5 EUR el Papilio Digital Grove Wing
Venta:En Seeedstudio ¿como no?
Comentarios:En el FORO
Soporte:FAQ o a través de sus múltiples Foros,
Datos de la revisión
Revisado por:Pedro Hernández (Pharizna)
Fecha revisión:2 de septiembre de 2014

Lo primero de todo es recordaros lo comentado hace unos días aquí sobre nuestro reciente interés por las FGPA. No es que Arduino y todas sus “shields” se nos hayan quedado cortas o nos hayamos aburrido ya con la RPi, BananaPi pcDuino3, etc, etc. La “culpa” de esta revisión la tiene el Director muy friki que tenemos que pensaba que las FPGA podrían ayudarnos en nuestros proyectos en los que la paralelización es necesaria y en lugar de contratar miles de CPUs en el Centro de Supercomputación de Barcelona (BSC para los amigos…o “Marenostrum” para colegios y visitantes) con una de estos dispositivos tendríamos todo resuelto.

Aunque no hemos coincidido desde hace un par de meses, sí conozco que se compró una placa de desarrollo Xilinx que le costó varios miles de euros y que según las “malas lenguas” ni siquiera había conseguido ejecutar ni un programa de ejemplo. Supongo que en este mes de vacaciones habrá seguido peleándose con VHDL y VERILOG y seguro que nos traerá algo… ¿similar a lo que hemos conseguido nosotros con una placa “open source” y de menos de 70 EUR de precio? Ya lo veremos… mientras tanto aquí tenéis nuestra primera revisión de lo que hemos conseguido hasta la fecha en este interesante y lleno de posibilidades mundo de la electrónica digital y los circuitos programables… que, como todo, requiere de su tiempo (en este caso, mucho) para primero entenderlo, luego utilizarlo …y finalmente empezar a “diseñar” cosas interesantes.

Si sabes mucho (algo) de FPGA probablemente en esta revisión no encuentres muchas novedades aparte del precio de una “placa” para recordar lo que sabes y si acabas de llegar aquí intentando hacerte todo un experto tras la revisión estás muy, muy equivocado. Como nos comentaba Alberto (un catedrático de la UPV que nos está ayudando en nuestra tarea “evangelizadora” de dar a conocer la estadística) … un profesor (conferenciante, “revisor PcDeMaNeRo”) no tiene que saberlo todo bastando con que sepa un “poco” más que el alumno! Así que ya estáis avisados aunque en cualquier caso os sugerimos que empecéis leyendo este interesante artículo introductorio titulado “Programmable logic: A practical introduction for beginners”🙂

ENVIO

Aunque la gente de Xilinx sigue aumentando la potencia (y el precio) de sus “procesadores” y placas con FPGA nosotros hemos querido empezar nuestra serie de reportajes sobre este mundo con la Papilio Pro por ser “open source” y tener un amplio foro de seguidores muy activos desarrollando y ayudando a los recién llegados … como nosotros mismos. Por otra parte, el hecho de que dicha tarjeta sea comercializada por nuestros amigos chinos de Seeedstudio ha facilitado en gran medida la obtención de una para revisar que nos llegó en este caso vía DHL y no en el típico “sobre amarillo chino” 🙂

Hasta nuestro diablillo se mostró expectante ante lo que llegaba ya que hace poco más de un mes ni siquiera sabíamos de qué iba todo esto…

Hemos de confesar que al ser nuestro primer contacto con este desconocido mundo para nosotros pedimos no solo el Papilio Pro (el más grande, con más puertas lógicas) sino un par de “Papilio wings” que vienen a ser algo así como los “shields” en Arduinos.

PAPILIO PRO

Como veréis en este revisión aparte de ser muy, muy “light” tampoco os aburriremos con palabrotas técnicas ni siquiera os daremos características técnicas de los “cacharros” utilizados siguiendo nuestra costumbre. Quedaríamos muy contentos si al menos os sirve para que quitéis el miedo a estas FPGA que seguro sabréis utilizar mejor que nosotros y que seguro que los jóvenes ingenieros eléctricos o similares ya habréis tenido ocasión de investigar durante vuestros estudios. Para nosotros lo que diferencia a primera vista un Arduino de Papilio… es el color … muy PcDeMaNeRo, por cierto 🙂

Otra segunda diferencia importante son los conectores para las “wings” muy alejados del “paralelismo” del Arduino.

Según se ve fácilmente en la fotografía la tarjeta realmente es muy sencilla ya que no hay muchas cosas más aparte del procesador Spartan 6 LX9 y la memoria MT48LC4M16 disponiendo tan solo de un LED “controlable” por el usuario así como de la electrónica necesaria para programarlo vía USB…otra de las grandes ventajas respecto a las “caras” placas de desarrollo profesionales que necesitan además de un cable de programación de Xilinx.

Por la parte inferior de la placa se observa la “simplicidad” del conexionado en línea con la principal características de estas FPGAs que es su potencia obtenida del uso de cientos de miles de puertas lógicas.

Si bien después de haber trasteado abundantemente durante este último mes con FPGA y contactado con gente muy conocedora del tema nos ha quedado muy claro que si bien la potencia de las FPGA es inmensa para el tratamiento de señales digitales a una frecuencias impensables con otros sistemas (incluso Arduinos) el tratamiento de valores en como flotante… medidas analógicas no es nada sencillo lo que no significa que, por ejemplo, con trabajo se pueda preparar un programa en VHDL para calcular la raíz cuadrada de un número, multiplicar matrices … e incluso proponer la resolución de ecuaciones diferenciales de orden superior

Para los que, aunque nos gustaría intentar estos temas, no tenemos tiempo al menos por ahora un gran ventaja de Papilio sobre su competencia es la posibilidad de usar un “soft processor” pudiéndose utilizar como si se tratase de un Arduino y de ahí nuestro interés por el Analog Wing (y el Digital) que pedimos y que veis montado en la foto …

junto con los cables necesarios para conectarlos a muchos de los “sensores” GROVE inventados por nuestros amigos de Seeedstudio y a los que tenemos previsto dedicar una revisión completa ya que también se pueden usar en una RPi, por ejemplo 🙂

Una vez descrito muy por encima Papilio Pro simplemente indicar que a finales de este mismo año saldrá a la venta el nuevo Papilio Duo que por un lado será totalmente compatible con el actual Papilio Pro… y por otro con Arduino Uno aparte de disponer de un increíble soft para montar tus propios circuitos de forma gráfica y poder programarlos desde ahí. Aunque tenemos la promesa por parte de su creador de una revisión para esas fechas, pensamos que lo mejor es que os vayáis haciendo una idea de la potencia de estos “inventos”.

PROGRAMANDO EN VHDL

Aunque en revisiones posteriores de nuevas tarjetas FPGA de otro suministrador (indio en este caso) utilizaremos VERILOG como lenguaje la verdad es que excepto la diferente “codificación” final el resto de pasos, que no son pocos, son iguales que en el caso de usar VHDL que es el que vamos a utilizar en nuestro ejemplo que por cierto está sacado de aquí.

Lo primero de todo es bajarse las ISE Design Tools 14.7 (no las Vivado) de la página de Xilinx que son gratuitas (al menos la parte que necesitamos) aunque es necesario registrarse previamente.

No sé como la hacéis vosotros pero yo cuando me enfrente a algo nuevo empiezo dando al “copy / paste” de ejemplos sencillos para poco a poco ir entendiendo de qué va … y al final, casi milagrosamente, se establecen las conexiones neuronales adecuadas… y en muchos casos acabo entendiendo el significado de lo hecho … o sea se me enciende la bombilla y me empiezo a atrever a hacer mis propias cosas.

Hablando de “bombillas” y aprovechando que tenemos el Digital Wing vamos a utilizar como ejemplo un pequeñísimo “programa” en VHDL capaz de encender a diferentes frecuencias varios LED conectados al Papilio… y todo ello directamente desde VHDL.

En un alarde de imaginación el nombre del primer proyecto que vamos a realizar sobre FPGA (utilizando Papilio como “plataforma”) se va a llamar PCDM_PAPILIO. ¿Lógico, no?

Lo siguiente es definir las características del “hardware” cosa sumamente importante con estos sistemas por cuanto realmente más que “programas” vamos a “definir / mostrar” las conexiones a mínimo nivel entre entradas y salidas que es justo el responsable de las elevadas velocidades que se consiguen en estos… y por otro lado la “dificultad” de programar cálculos por ejemplo que se podrían hacer de forma muy sencilla (para el usuario) pero que requieren de mucho trabajo para el procesador… ralentizándolo 🙁

Una vez definido el “hardware” pasaremos a empezar a añadir nuevas “fuentes”

que en nuestro caso será un fichero (que llamaremos Quickstart) que seguirá la sintaxis VHDL. A continuación pulsa NEXT y FINISH sin nada más que hacer por ahora… ya que volveremos dentro de un rato a “rellenarlo” con nuestro código de ejemplo.

Tras bajar el fichero UCF para Papilio Pro que no es más que un fichero con la definición “particularizada” de entradas salidas del micro Spartan … mapeadas a las de la placa se añade una nueva fuente con “Add source” desde la ventana lateral de DESIGN

Se copia el fichero UCF anterior añadiéndose al proyecto …

que poco a poco va creciendo … aunque hasta el momento no hayamos introducido código alguno específico de nuestro proyecto. ¿Os habéis perdido? Espero que no.

Ha llegado el momento de ver las “interioridades” del fichero UCF … aunque antes de tocarlo vamos a terminar con el tema de nuestro código…

Sin más que hacer doble click sobre la “ventanilla” de nuestro fichero proyecto (Quickstart.vhd) se borra todo su contenido y se sustituye por el de éste y que debe quedar como el indicado en la imagen.

Me he permitido marcar la zona de “comentarios” de VHDL que se escriben como dos guiones ya que me hizo perder mucho tiempo al copiar / pegar desde otro sitio cambiándose los mismos por un carácter extraño que luego daba errores .

Antes de ¿compilar? el código tendremos que retocar el fichero UDF por cuantos no todas las I/O salidas del mismo las usamos en nuestro programa y a estos “cacharros” no les gusta que sobren cosas. Por eso hay que “permitir” que acepte restricciones LOC sin utilizar en el programa…

y luego manualmente comentar la filas que contengan PULLUP y que si no me equivoco son únicamente dos …una muy al principio del fichero …

y la otra al final.

En este momento ya estamos en condiciones del generar el fichero de programación (que no “compilación” que aquí no existe dicho concepto)

y si todo funciona bien deberíamos haber recibido un mensaje de EXITO en la ventana / consola de la parte inferior.

Para asegurarnos de que todo ha acabado correctamente basta con abrir la carpeta del proyecto con el explorador de ficheros de Windows y buscar nuestro fichero QUITSTART con extensión BIT generado en el momento.

El siguiente paso es “subirlo” al Papilio para lo cual previamente debemos haber instalado en el PC el Papilio loader que no es más que una aplicación Java y por tanto multiplataforma que instala aparte del JRE Java Runtime Environment los drivers con los puertos virtuales para poder acceder vía USB al mismo.

Sin más que elegir el correspondiente fichero y alimentado eléctricamente el Papilo al conectarse vía USB al PC basta con RUN para subir el contenido del fichero…

y las lucecitas empezarán a parpadear a distintas frecuencias.

Aunque viendo el código de nuestro proyecto se ve que realmente son tres LEDs los que deberían parpadear únicamente hemos conectado dos para usar tan solo un Grove aunque se podrían conectar hasta 8 en un Digital Wing y teniendo en cuenta que Papilio Pro admite hasta 6 Wing se podrían controlar de esta forma hasta 48 LEDs.

Aunque los ejemplos están pensados para realizarse sobre una Logistart MegaWing os recomendamos que, si os interesa profundizar en el tema de VHDL, os bajéis el PDF del ebook Intro to Spartan FPGA así como el Hamster’s Wiki … o el Curso del hamster sobre FPGAs.

USO DEL PAPILIO EMULANDO UN ‘ARDUINO’

Después de haber leído (y reproducido) el complicado procedimiento para hacer algo tan sencillo como conseguir el “blink” de varios LEDs seguro que os preguntaréis qué ventajas tiene este Papilio Pro frente un Arduino Mega, por ejemplo. La mayor ventaja es a la vez su principal defecto: Una FPGA es como un “microprocesador” virgen… tonto que únicamente es capaz de gestionar entradas salidas simples y encima con muchas restricciones. Esto obliga a disponer de un fichero UCF ajustado a tu “placa de desarrollo” (Papilio Pro en nuestro caso) y encima “optimizarlo” a tu problema concreto para que no haya I/O no utilizadas.

Eso sí al ser un sistema limpio y trabajar a bajo nivel dispones de todos los ciclos de reloj para dedicarlos a las tareas importantes sin sobrar nada por lo que puedes conseguir fantásticas velocidades no alcanzables de otra forma. Ahora bien el tener que programar a muy bajo nivel (¿alguno programó en Assembler en el ZX Spectrum, por ejemplo? Yo sí… y se podían conseguir cosas muy interesantes aunque a costa de programas muy difíciles de depurar, por ejemplo. Pues bien me parece que esto de las FPGAs es incluso peor aunque afortunadamente hay sistemas de depuración / simulación de tus diseños antes de subirlos a la placa… aunque de eso hablaremos en una revisión posterior.

Lo que sigo echando de menos y no me parece sencillo de resolver es el manejo de variables reales (punto flotante) para acceder por ejemplo a señales analógicas. Como mucho en Papilio usando la Analog Wing se puede digitalizar la señal continua de voltaje y convertirla en 8 bits que se pueden leer y ¿luego qué?. Para eso y para otras muchas cosas más los que saben de estos han diseñado “soft processors” y si unos incluso han conseguido “programar” una FPGA como un Z80 (¿Verdad Hark0?) otros han dedicado su tiempo y esfuerzo para dotar a la FPGA de la “inteligencia” de un Arduino y de esa forma poder utilizar los programas / sketches de aquél y así aprovechar aparte de todo lo desarrollado para esa plataforma la posibilidad de usar estas FPGA para proyectos más alejados de las señales digitales / eléctricas para las que inicialmente se pensaron.

Cuando salga a fin de año, según comentamos, la nueva versión de Papilio Duo veremos trabajando de forma conjunta la parte digital de las FPGA y la analógica del Arduino… lo que abre un campo alucinante de posibilidades.

Mientras tanto podemos aprovechar ZAP (ZPUino Arduino Papilio) que no es más que la IDE de Arduino debidamente mejorada y ampliada para poder lanzar cualquier sketch “contra” uno de estos Papilio sin necesidad de aprender “nada” nuevo respecto al procedimiento conocido por todos para programar Arduinos.

Una vez instalado el programa y ejecutado se accede al IDE con una interfaz gráfica muy, muy similar a la clásica de Arduino que todos conocemos tan bien ¿o no?

Como siempre, lo primero es localizar el puerto vía serie a través del cual se comunica tu PC con la placa siendo en este caso el segundo puerto COM generado si te conectas vías USB ya que el primero es el reservado para la conexión vía cable (caro) de Xilinx.

Lógicamente en este caso el “programador” elegido debe corresponder al Papilio Programmer

y la tarjeta (board) la ZPUino 1.0 (32 bits) Boards o la AVR8 Papilio Boards (Papilio Pro LX9). tal y como indicábamos de pasada anteriormente tanto AVR8 como ZPUino son dos “soft processor” que se han programado para el Papilio pudiéndose utilizar “casi” de forma indiferente, al menos en las primeras etapas de introducción a este complicado mundo de las FPGAs. Luego cuando se te vaya quedando pequeño uno u otro procesador puedes cambiar al otro y probar hasta quedarte con el que más te guste.

En mi caso, por ejemplo para esta revisión hemos utilizado más ZPUino para poder utilizar los ejemplos de las “wings”

Así para probar el Analog Wing … que difícilmente podría haber probado de otra forma, se selecciona el correspondiente sketch (WING_Analog) y “seguir” los pasos indicados en el mismo siendo el primero “ejecutar” el correspondiente papilio_pro.bit que, como os podéis imaginar, no es más que el “ejecutable” similar al “famoso” QUICKSTART.BIT que habíamos terminado de crear en la parte anterior de nuestra revisión. Es decir, este “papilio_pro.bit” no es ni más ni menos que el soft processor que programa al Papilio para recibir el resto de código del nuevo ejemplo.

En el resto del fichero /sketch se incluye las instrucciones “en forma Arduino” para leer, por ejemplo en este caso, ocho entradas analógicas aunque en nuestro caso hemos conectado únicamente las tres primeras utilizando diferentes sensores de Grove (un potenciómetro, una sonda analógica de luminosidad y otra de humedad)

Un primer problema que tuvimos para hacer funcionar la lectura de estas señales analógicas fue ¿adivinar? donde teníamos que conectar el WING y nosotros descuidadamente lo conectamos en la posición contigua a la de la Digital que habíamos conseguido hacer funcionar a la primera. En este caso no hemos tenido la misma suerte o quizás sí ya que con el fallo hemos aprendido la importancia vital que tiene en estas FPGAs la “asignación” de entradas salidas lógicas a físicas… o sea el fichero .XISE generador del BIT.

Revisando el “esquema de conexionado” se observa que la conexión de Analog Wind está hecha sobre el conector CH que corresponde a los canales más altos del conector WING2… justo enfrente de donde lo habíamos conectado. Una solución habría sido modificar el correspondiente .XISE para generar posteriormente el BIT, etc… pero no hemos querido tentar a la suerte y hemos preferido simplemente cambiar de sitio el Analog Wing y más sabiendo todo el sitio que aun nos queda libre.

Por último también hemos querido probar suerte con el ejemplo trivial del BLINK de Arduino pero atacando nuestro Papilio Pro a través del WING_Digital de Grove. En este caso hemos preferido “quemar” el arranque para “convertirlo” temporalmente en un Arduino en toda regla hasta que se cargue con otro soft processor u otro fichero BIT.

Una vez “quemado” el Bootloader se compila y envía el sketch. Aunque inicialmente habíamos utilizado el clásico BLINK de Arduino hemos tenido que cambiar la numeración de los LED ya que el 13 usado en Arduino por defecto lo hemos sustituido por el 0 habiendo declarado también un segundo LED en el ¿puerto / salida? 1 y lo hemos puesto a parpadear al contrario que el anterior. ¡No os quejaréis de la imaginación que echamos a nuestras revisiones! ¿No?

Conclusión Si se te empieza a quedar corto el Arduino, necesitas más velocidad y aprender cosas nuevas… las FPGAs no te defraudarán ya que te darán muchas horas de entretenimiento y alegrías aunque sólo veas un LED que se enciende de forma acompasada 🙂

Lo bueno
– Potencia, posibilidades
– Precio respecto a las “clásicas” placas de desarrollo de Xilinx.
– Aunque hay diferentes modelos de Papilio en función de tus necesidades y el 250K se queda un poco pequeño, los otros dos modelos y más el PRO seguro que te resultan más que suficientes para todos tus proyectos por muy complicados que sean.
– La existencia de bastantes WING le convierten en una plataforma ampliable.
– Dispone de un Foro muy activo y con ganas de ayudar… además de disponer de herramientas, ejemplos, etc…para intentar ir aprendiendo poco a poco.

Lo malo
– Su “programación” no es trivial… aunque evidentemente no es problema del producto (Papilio Pro).
– No es nada sencillo para utilizarse en proyectos “numéricos”, resolución de ecuaciones diferenciales, por ejemplo.
– Aunque el tratamiento de señales digitales es increíblemente rápido… para el manejo de señales analógicas necesitas digitalizarlas previamente… mediante un Analog Wing, por ejemplo.

PUNTUACIÓN: 9.5

Nota: Muchas gracias a Dhia Khaladi de GadgetFactory por el Papilio Duo que nos ha prometido enviar para diciembre…y, como no, a Wells Tu de Seeedstudio por habernos enviados los productos que hemos revisado hoy… y por los que nos enviará próximamente 🙂

Pharizna que cada vez está más enganchado en este fascinante mundo de la “electrónica digital” y al que le falta tiempo para afianzar sus conocimientos y ver acabados sus proyectos 🙁

Responder

avatar
  Suscribirse  
Notificación