Lattuino es compatible con el Arduino UNO y está basado en la FPGA Lattice iCE40HX4K-TQ144.
¿Qué es Lattuino?:
Lattuino es una implementación similar al Arduino UNO, pero en una placa con FPGA. Es decir que Lattuino no usa una CPU de hardware fijo, sino lo que se denomina un soft-core. Su nombre proviene de la contracción de Lattice y Arduino, por lo que Lattuino es un Arduino implementado en una FPGA de Lattice y originario de Latinoamérica. Su implementación inicial es parte del proyecto Kéfir. La placa Kéfir I fue especialmente diseñada teniendo en cuenta la posibilidad de implementar un Arduino, por estas razones la misma posee conectores compatibles con Arduino y un conversor analógico digital. De esta manera una placa Kéfir I puede usarse para desarrollos basados en FPGA y/o Arduino, lo que le brinda una gran versatilidad como kit educativo. En la siguiente imagen se observa un shield Adafruit 1651 (pantalla TFT y touchscreen) conectado a una placa Kéfir I. El software que corre el Arduino de la foto corresponde a uno de los demos provistos por Adafruit que permite dibujar con el touchscreen.
Características técnicas:
La FPGA usada en Kéfir I es una Lattice iCE40HX4K-TQ144 (3520 LUT4s, FFs y carry; 2 PLLs; 80 kib SRAM; 107 GPIOs). Este tipo de FPGAs son muy económicas, pero poseen varias restricciones. Una de los problemas es su escasa cantidad de memoria embebida, esto limita la cantidad de memoria disponible para el Arduino.
- Memoria de programa: 7536 bytes (8192 total menos 656 para el bootloader, comparable
a placas Arduino basadas en ATmega8)
- Memoria de datos: 512 bytes
- Frecuencia de reloj: 24 MHz (performance similar a un Arduino de 16 MHz)
- Entradas/salidas digitales: 15 (14 generales + 1 LED)
- Entradas analógicas: 8 (2 más que el UNO)
- Salidas analógicas (PWMs): 6
- UARTs: 1
- SPIs: 1 (hasta 24 MHz SCK)
- Timers independientes para generar tonos: 1
- Entradas de interrupción: 2
- Ocupación de la FPGA: 56 a 66%
- Tensión de I/O: 3,3 V
¿Cómo se programa?:
Lattuino funciona como cualquier Arduino por lo que se programa utilizando sketch desde la IDE de Arduino. Basta con agregar el soporte de Lattuino. El mismo fue verificado usando la versión 1.8.1. Para agregar dicho soporte es necesario indicarle a la IDE donde se encuestra la descripción de Lattuino. En el menú Archivo la opción Preferencias nos abre un diálogo donde es posible indicar el Gestor de URLs Adicionales de Tarjetas. En esta opción debemos ingresar http://fpgalibre.sf.net/Lattuino/package_lattuino_index.json. Luego de esto en la opción del menú Herramientas elegimos Placas y luego Gestor de tarjetas. Esto nos mostrará un listado de placas soportadas por la IDE. En este lista buscamos Lattuino (al final) y elegimos el enlace More info. Esto hará que aparezca el botón Instalar. Luego de instalado podremos seleccionar a Lattuino desde el listado de Placas. Toda la API estándar de Arduino se encuentra soportada. Adicionalmente las bibliotecas SPI y SoftwareSerial también están disponibles. El resto de la dinámica es similar a lo que haríamos con un Arduino UNO.
¿Qué herramientas son necesarias para sintetizarlo?:
La implementación actual de Lattuino se encuentra en VHDL. La herramienta de síntesis para estas FPGAs es iCEcube2. Adicionalmente necesitaremos algunas herramientas comunes de sistemas UNIX, como el comando make. El core puede configurarse manualmente, editando un archivo VHDL, o utilizando un menú amistoso, al estilo del kernel de Linux. Para correr la aplicación de configuración es necesario tener instalado el intérprete de TCL/Tk y el de Perl. En caso de desearse realizar cambios en el código necesitaremos disponer de algunas herramientas adicionales. El compilador gcc puede ser necesario para recompilar algunas de las utilidades incluidas. Adicionalmente se recomienda instalar las herramientas del proyecto FPGA Libre. En sistemas compatibles con Debian GNU/Linux bastará con instalar el paquete lattuino-tools de nuestro repositorio. Ejemplo para Debian GNU/Linux:
root@debian# curl -sSL http://fpgalibre.sf.net/debian/go | sh
root@debian# apt-get install lattuino-tools |
Ejemplo para Ubuntu:
usuario@ubuntu$ curl -sSL http://fpgalibre.sf.net/debian/go | sudo sh
usuario@ubuntu$ sudo apt-get install lattuino-tools |
¿Cómo se sintetiza?:
Para obtener el código fuente de Lattuino se recomienda clonar el repositorio GitHub de FPGA Libre:
git clone https://github.com/FPGALibre/fpgacores.git |
Luego editamos el archivo fpgacores/synth_lattuino_1.sh y ajustamos la variable
XIL_TOOLS_ICE_DIR para que apunte a nuestra instalación de iCEcube2. Luego corremos
dicho script.
Niveles de tensión soportados:
Es muy importante tener en cuenta que los pines de entrada salida de la placa funcionan con 3,3 V y no toleran 5 V. Se decidió dejar la protección de estos pines fuera de la placa principal, ya que el tipo y grado de protección dependen del uso que se le de. En caso de utilizar la placa en un ambiente educativo hostil se recomienda utilizar shields de Arduino que incluyan protecciones adecuadas. El diseño de los mismos es muy simple.
Licenciamiento:
Lattuino es un proyecto de hardware abierto. El código VHDL se ecuentra bajo la licencia GPL v2.0 o posterior y la API de Arduino bajo licencia LGPL v2.1 o posterior.
Documentación relacionada:
Estos son algunos trabajos relacionados con Lattuino:
Contacto:
Para preguntas específicas puede contactar a Salvador E. Tropea o por teléfono al +54-11-4724-6300 interno 6919.
|