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

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

Las instrucciones de instalación está aquí:

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

Licencia

Créditos

TODO

  • Carlos Venegas (Charli)
  • Jesus Arroyo
  • Claire Wolf

Enlaces