L15: FPGAs Libres. Icestudio - myTeachingURJC/Mecatronica GitHub Wiki
Sesión Laboratorio 15
- Tiempo: 2h
- Objetivos de la sesión:
- Entregar las placas de las FPGAs
- Comprobación de los cables USB-microusb
- Instalación de las toolchains en el laboratorio
- Instalación de Icestudio + Toolchains en los portátiles
- Instalación de colecciones en Icestudio
- Puesta en marcha del circuito ¡Hola mundo!
Contenido
- Introducción
- La placa Alhambra II, con FPGA
- Icestudio
- Colecciones de componentes y ejemplos
- Instala Icestudio en tu portátil
- Resumen de tareas a realizar
- Conclusiones
- Autores
- Licencia
- Enlaces
Introducción
El objetivo de esta sesión es tener nuestro entorno de trabajo listo para trabajar con las FPGAs. Primero haremos que todo funcione en los ordenadores del Laboratorio. Después, una vez que sepas cómo funciona, lo deberás instalar en tu portátil, y comprobar que funciona correctamente con la placa Alhambra II proporcionada
La placa Alhambra II, con FPGA
Los experimentos de electrónica digital los vamos a hacer con la placa Alhambra II, que tiene una FPGA modelo ICE40HX4K de Lattice, y se permite realizar el ciclo completo de diseño digital usando sólo herramientas libres (Lo que nos da independencia del fabricante, entre otras ventajas)
El tamaño es el mismo que el de la placa Arduino UNO, y es pin-compatible con ella. Esto nos permite reutilizar las shields disponibles en la comunidad. Con Arduino los periféricos se controlan mediante programación del microprocesador. En la Alhambra II se diseñan circuitos digitales para acceder a ellos
Ficha técnica
Alhambra II | Descripción |
---|---|
Nombre | Alhambra II |
Autor | Eladio Delgado |
Fabricante | Mareldem Technologies, Pinos del valle, Granada, España |
FPGA | ICE40Hx4K (Que en realidad es un HX8K) |
Frecuencia | 12Mhz |
Periféricos | 8 LEDs, 2 pulsadores, 4 canales A/D. Interruptor ON/OFF para conectar/desconectar periféricos externos |
Pinout | Compatible con Arduino UNO |
Pins E/S | 20, de 3.3v, tolerantes a 5v. Todos los pines de E/S incluyen resistencia serie de 200 ohm para conexión directa de LEDs |
Interfaz PC | USB vía el Chip FTDI 2232H: Programación FPGA e interfaz serie |
Memoria flash | 32 Mb (Megabits) |
Proteccion | Pines de alimentación y de E/S protegidos contra cortocircuitos permanentes |
Alimentación | Dos conectores USB (hasta 4.8A) |
Observaciones | Hardware libre. Compatible Arduino |
Repositorio | https://github.com/FPGAwars/Alhambra-II-FPGA |
Elementos de la placa
La placa se alimenta mediante un conector micro-USB B, como el que tienen muchos móviles. Tiene dos, uno principal para la conexión al PC y la descarga de circuitos. El segundo es para dar potencia adicional a los periféricos que conectemos
Aquí se puede ver la conexión al PC y la situación de los LEDs y pulsadores
Reparto de las placas
Se dará una placa a cada grupo de trabajo, que se devolverá al finalizar el cuatrimestre (el último día de clase). La placa viene sin cable. Necesitarás un cable USB - microUSB B de datos. ¡¡Ojo!! Algunos cables de este tipo no tienen cables de datos, sólo los de alimentación (para cargar móviles y power banks). Asegúrate que el que uses es de datos
Test de comprobación 1
Objetivo: Comprobar que la Alhambra II funciona correctamente: Que recibe la alimentación bien, que todos los LEDs están ok (no hay ninguno fundido) y que los pulsadores funcionan también bien
La placa Alhambra II viene con un circuito de prueba ya cargado, para comprobar los LEDs, los pulsadores y las comunicaciones serie. Para realizr el test 1 sigue estos pasos:
- Prueba 1: Conecta la placa al PC usando el cable USB-microusb. Los 8 LEDs se deberán encenderán de forma pulsante
- Prueba 2: Aprieta el pulsador SW1: La animación en los LEDs cambia, mostrándose el efecto Cylon (los leds se mueven de un lado hacia otro alternativamente)
-
Prueba 3: Deja pulsado el botón SW2: Al apretarlo la animación se hará más rápidamente, y volverá a su velocidad inicial al soltarlo
-
Prueba 4: Pulsa SW1 dos veces para volver al modo inicial (pulsante). Cada vez que se pulsa SW1 se cambia el modo. En total hay 4 modos: Pulsante, Cylon, Hola y Eco. En este TEST1 sólo probamos los dos primero
Icestudio
Para aprender sobre circuitos digitales vamos a utilizar la herramienta libre Icestudio, que nos permite dibujar nuestros circuitos y Sintetizarlos en la FPGA de una forma rápida e intuitiva
Icestudio está formado por dos partes: por un lado está la interfaz gráfica que es la que usaremos, y por detrás (backend) están las herramientas libres para la síntesis en la FPGA (Lo que llamamos las Toolchains). Cuando se instala Icestudio, sólo se dipone de la interfaz gráfica. La Toolchain hay que instalarlas de forma independiente desde el propio Icestudio, en una segunda fase
Arrancando Icestudio en el Laboratorio por primera vez
Icestudio ya está instalado en todos los Laboratorios Linux de la ETSIT de la URJC, pero sólo la parte gráfica. Las Toolchain se deben instalar en una segunda fase
Para arrancar icestudio desde los PCs del laboratorio entra en tu cuenta de Linux y busca Icestudio desde el menú de Actividades
También puedes cargarlo desde el terminal, ejecutando este comando:
/opt/appimage/icestudio/IceStudio.AppImage
Si es la primera vez que lo ejecutamos nos aparecerá esta pantalla:
Marcamos la casilla no mostrar (para que esta pantalla no aparezca) y pinchamos en Cerrar
En la siguiente pantalla elegimos la placa a usar por defecto. En nuestro caso es la Alhambra II. La seleccionamos y pinchamos en OK
Nos aparecerá la siguiente notificación en la parte de la derecha:
Nos indica que NO tenemos instalada la Toolchain. De momento NO INSTALES LA TOOLCHAIN. Ignora este mensaje
Test de comprobación 2
- Objetivos: Comprobar si el cable es de datos, y que las comunicaciones serie entre la placa y el PC del laboratorio funcionan correctamente
En Icestudio hay un terminal serie integrado, que nos será muy útil para comunicarnos con nuestros circuitos. Vamos a usarlos para realizar las pruebas. Si movemos el cursor a la parte izquierda veremos que hay un panel oculto, que se despliega al acercarnos
Pinchamos donde pone Terminal Serie
Se nos abre otra ventana. Conectamos la placa Alhambra II y pinchamos en Reload serial device
Buscamos la Alhambra-II disponible en el dispositivo: /dev/ttyUSB1
¡OJO! La Alhambra II también aparecerá asociada al dispositivo /dev/ttyUSB0. Pero ESTE NO. Debe ser el disponible en /dev/ttyUSB1
Lo marcamos y pinchamos en la parte inferior en el botón de Connect
Nos aparece el terminal serial. ¡Ya estamos listos para comunicarnos!
Pulsando el botón SW1 pasamos al modo Hola, que es el que está a continuación del modo Cylon. Todos los LEDs estarán apagados. Si en este modo pulsamos SW2, deberemos ver la cadena "Hola! Soy tu Alhambra II" en el terminal
Si nos ha funciona correctamente, pasamos al modo de ECO apretando el botón SW1 otra vez. Desmarcamos las opciones Local echo y Flush on enter. Ahora todo lo que escribamos en el terminal se envía a la placa y ésta lo saca por los LEDs y nos lo devuelve (eco), viéndose en el terminal
¡¡Hemos pasado el TEST 2!!
Instalando la Toolchain
Para poder sintetizar los diseños y cargarlos en la placa necesitamos un último paso: Instalar la Toolchain. Para ello pinchamos en la notificación de La toolchain no está instalada. Haz click aquí para instalarlo, o bien lo hacemos desde el menú
Nos indica que se va a instalar la versión ESTABLE de la toolchain. Pinchamos en OK
Comienza la descarga de la toolchain
Al cabo de un tiempo nos aparecerá una notificación indicando que ya se ha instalado, y otra para instalar los drivers
Los drivers en el laboratorio ya están instalado. Así que ignoramos esta notificación
Test de comprobación 3
Ya sólo nos queda por probar a sintetizar y cargar en la placa un circuito "hola mundo" para comprobar que está todo OK. Nos vamos a la opción del menú Arhivo/Ejemplos/1.Básico/01.Un LED
Se nos carga el circuito. Nos aparece una notificación verde indicando que el circuito se ha abierto
Este es nuestro circuito hola mundo: Un bit constante a 1 que está conectado al pin de salida del LED0 a través de un cable. Más adelante veremos qué es todo esto. Ahora de momento vamos a asegurarnos que está funcionando todo correctamente
Para Cargar el circuito en nuestra FPGA pinchamos en el icono de la esquina inferior derecha: UPLOAD (También lo podemos hacer desde la opción del menú Herramienas/Cargar
En esta animación vemos el procesos. En unos segundos se habrá sintetizado y cargado el ejemplo en la placa
Veremos cómo el LED0 está encendido (Este circuito ha sustituido al anterior)
Colecciones de componentes y ejemplos
En icestudio los componentes están agrupados en Colecciones, que son pequeñas bibliotecas que incluyen bloques y circuitos de ejemplo. Al instalar Icestudio viene una única colección instalada: la colección por defecto
Vamos a instalar más colecciones. En la wiki de Icestudio están en el panel derecho los enlaces a las colecciones estándares:
Algunas colecciones son ya estables. Significa que los bloques no van a cambiar su interfaz, y están documentados. Pero hay muchas más colecciones en desarrollo
Instalando la colección iceK
Como ejemplo, vamos a instalar la colección iceK, que contiene constantes. Desde la wiki de Icestudio, pinchamos en iceK. Esto nos lleva a la wiki de la colección iceK, donde está su documentación (en Inglés):
Pinchamos en el nombre (en la parte superior izquierda) para ir a la parte donde está el código. Aquí, pinchamos en el botón verde que pone Code y luego en Download ZIP
Se nos descargará el fichero iceK-main.zip, que contiene la última versión
Ahora desde Icestudio nos vamos a Herramientas/Colecciones/Añadir
Seleccionamos el archivo iceK-main.zip y pinchamos en Abrir
Nos aparece una ventana donde podemos cambiar el nombre con el que aparecerá la colección. Pinchamos directamente en OK
¡Y ya está! Nos aparece una notificación indicando que ya está la colección instalada
Comprobando la colección iceK
Una vez instalada, debido a un bug en la versión de icestudio 0.10-rc1, hay que arrancar otra vez Icestudio, o bien abrir una ventana nueva para poder ver los componentes de la colección recién instalada
Una vez hecho esto, nos vamos al panel izquierdo y pinchamos en el icono del Bloque de Lego
Nos aparece un panel en la derecha. Vemos que aparece la colección iceK-main
Ahora podemos pinchar en ella y acceder a todos los componentes de sus diferentes carpetas
En este ejemplo se han colocado los bloques de 1-bit y una constante de 4-bits
Instalando más colecciones
Instala las siguientes colecciones. En próximas versiones de icestudio la instalación se podrá hacer automáticamente desde Icestudio, pero de momento hay que instalar manualmente cada una de las colecciones:
- iceWires: Cables y buses
- iceIO: Pines de entrada/salida
- iceGates: Puertas lógicas
- iceMux: Multiplexores y demultiplexores
- iceCoders: Codificadores y decodificaciones binarios
- iceFF: Biestables
- iceRegs: Registros
- Jedi: Todo lo que necesita un buen Jedi del hardware 😎️
Una vez re-arrancado Icestudio, verás todas las nuevas colecciones:
Instalando colecciones con la herramienta icm
Para facilitar la instalación de colección (Mientras se integra en Icestudio), se puede utilizar la herramienta ICM: Icestudio Collection Manager. Es una herramienta creada en python para la consola, que permite instalar colecciones fácil y rápidamente
Asegúrate que al menos has instalado 1 colección previamente, para asegurarte de que se han creado todos los directorios necesarios en tu sistema
Para instalar icm en tu ordenador (tuyo o del laboratorio) lo mejor es crear un entorno virtual para no romper ninguna dependencia. Abre un terminal y ejecuta estos comandos de tu HOME
python3 -m venv icm
. icm/bin/activate
Se crea el directorio icm y te mete en el entorno virtual icm
. Dentro del entorno virtual ejecuta este comando para instalar icm:
pip install icm
Y ahora lo vamos a probar:
icm info
Si todo ha ido bien te saldrá algo parecido a esto:
Segúrate que te aparecen los 3 Checks verdes!! ✅ ✅ ✅
Instala las colecciones que necesitamos con este comando:
icm install iceWires iceIO iceGates iceMux iceCoders iceFF iceRegs Collection-Jedi
Puedes ver todas las colecciones disponibles para instalar con este comando:
icm lsgit
Instala Icestudio en tu portátil
- Descarga la última versión disponible, para tu plataforma (Linux/Mac/Windows)
Las instrucciones de instalación está aquí:
- Instalación en Linux
- Instalación MAC y Windows. Estas instrucciones son para versiones anteriores de Icestudio. Todavía sirven, pero asegúrate de instalar las últimas versiones (python 3.6 o superior)
Resumen de tareas a realizar
- Recibir placa Alhambra II (una por grupo de trabajo)
- Comprobar que pasa el test 1
- Comprobar que pasa el test 2
- Comprobar que pasa el test 3
- Instala las colecciones iceK, iceWires, iceIO, iceGates, iceMux, iceCoders, iceFF, iceRegs y Jedi en Icestudio del Laboratorio
- Instala Icestudio en tu portátil (programa + toolchains + colecciones)
- Comprueba que el "hola mundo" funciona
Conclusiones
¡Ya lo tenemos todo listo para hacer circuitos digitales para nuestros robots!
Autores
- Juan González-Gómez (Obijuan)
Licencia
Créditos
TODO
- Carlos Venegas (Charli)
- Jesus Arroyo
- Claire Wolf