Sesión 5: Más sobre Icestudio - Obijuan/CTIF-Madrid-2018-FPGAs-Libres GitHub Wiki

Introducción

Icestudio 0.3.3-beta

Circuitos combinacionales con tablas de verdad

Usando Buses

  • Ejemplo 1: Número de 4 bits (15) conectado a 4 LEDs. Colección makespace
  • Ejemplo 2: Número paramétrico, de 4 bits
  • Ejemplo 3: Número paramétrico de 8 bits, conectado a los 8 LEDs
  • Enviar diferentes valores en hexadecimal, binacio, decimal...
  • Ejemplo 4: Sacando números constantes en Verilog: Crear bloque código con el número a sacar
assign k = 8'hFF;

Manejando colecciones

  • Ir a la carpeta de las colecciones: .icestudio/collections
  • Echar un vistazo a la estructura. Hay dos carpetas principales
    • Blocks: Contiene los bloques de icestudio
    • examples: Contiene los ejemplos
  • Creamos un Enlace para acceso rápido a la carpeta de las colecciones
  • Copiar carpeta Academia-Jedi-HW-19 a otra nueva, y renombrar: mis_pruebas
  • Ir a Herramientas/colecciones/Reload
  • Seleccionar la nueva colección: Seleccionar/Colección/mis_pruebas
  • Ejemplo 1: Modificación rápida de la puerta AND
    • Abrimos la puerta AND desde: Archivo/Bloques/Comb/puertas/and
    • Modificamos la puerta AND: Añadimos comentarios en Verilog, o bloques de texto
    • Guardamos. ¡Importante! Ir al directorio collection/blocks/Comb/puertas. Guardarlo como mi_and.ice
    • Recargar la coleccion: herramietas/colecciones/Reload
    • Crear documento nuevo: Cargar la nueva AND!!!
  • Ejemplo 2: Crear una AND nueva
    • Editamos la and que tenemos abierta y la guardamos con otro nombre: mi_and2.ice
    • Recargamos la colección
  • Ejemplo 3: Creando un menú nuevo: Nos vamos a la carpeta blocks de mis_pruebas y creamos una carpeta nueva: Mi_Menu
    • Dentro de Mi_Menú guardamos mi_and3.ice (por ejemplo)
    • Recargamos colecciones
    • Nos aparece el nuevo menú con el nuevo componente
  • Ejemplo 4: Modificando las propiedades de la AND
    • Nos vamos a la ventana con la AND que estamos editando
    • Vamos a la opcion: Editar/Información del proyecto
    • Cambiamos la información que hay: nombre del componente, información, etc...
    • Guardamos como mi_and3.ice y recargamos la colección
  • Ejemplo 5: Modificando la imagen SVG
    • Bajamos un fichero .SVG cualquiera de internet
    • (En el repositorio icestudio-block-icon de FPGAwars vamos colocando los .SVG de los iconos de los bloques que usamos)
    • Desde Editar/Información cambiamos el SVG
    • Guardamos: MI_and4.ice y recargamos coleccion
  • Ejemplo 6: Creando nuestro propio SVG
    • Arrancamos el Inkscape
    • Creamos un icono nuevo: por ejemplo con líneas
    • Ajustamos la hoja: File/Document Properties/Resize page to content
    • Guardamos como mi_icono.svg
    • Cargamos la imagen en las propiedades del proyecto de mi puerta AND
    • Guardamos como MI_and5.ice y recargamos
  • Ejemplo 7: Creando un componente nuevo desde cero: Sticker: Bloque sin entradas ni salidas
    • Paso 1: Creamos nuestro icono con Inkscape (o nos bajamos uno de internet y lo editamos)
    • Paso 2: Creamos un documento nuevo en Icestudio
    • paso 3: En las propiedades ponenos los datos: nombre, descripción, fichero SVG
    • Paso 4: Opcionalmente ponemos bloques de texto dentro del componente
    • Paso 5: Guardamos el bloque en la coleccion (en la carpeta que queramos)
    • Paso 6: Recargamos colección
  • Ejemplo 8: Creando un ejemplo
    • Abrimos documento nuevo en Icestudio
    • Creamos un circuito de ejemplo, o simplemente colocamos bloques
    • Lo grabamos en la colección dentro de la carpeta examples
    • Recargamos
  • Ejemplo 9: Creando un componente: Puerta AND de 3 entradas
  • Ejemplo 10: Creando una sirena luminosa de 2 LEDs, como bloque formado por otros bloques

Ejercicios

Tutorial 14 (14 Bitpoints)

  • Ejercicio 1 (Total 3 Bitpoints): Limpiaparabrisas a dos velocidades. Usar un servo para simular un limpiaparabrisas de un coche, que se mueva a dos velocidades: lenta y rápida, determinadas por un interruptor externo. En el modo lento el servo permanecerá 2 segundos en cada posición, y en el modo rápido medio segundo (Freq. de 1Hz)

  • Ejercicio 2 (Total 3 Bitpoints): Sirena configurable. Sirena que funciona en dos modos, según la posición de un interruptor externo, usando un único zumbador. Además, tiene un pulsador externo, que al apretarlo debe sonar la sirena, y al soltarlo se apaga. En el modo 1 se emiten alternativamente tonos de 1Khz y 2Khz, cada uno durante medio segundo. En el modo 2 se emiten alternativamente las notas DO y Mi, con duraciones de 250ms cada una.

  • Ejercicio 3 (Total 5 Bitpoints): Franky en modo automático y manual. Este es un ejercicio de COMPLEJIDAD MEDIA. Hay que entender bien los detalles del enunciado para implementarlo, que se encuentran en los ejercicios de esta colección. Aquí se puede ver un vídeo de Franky funcionando en los dos modos, automático y manual:

Click to see the youtube video

  • Ejercicio 4 (3 Bitpoints). Ejercicio Libre. Premiar la creatividad

Tutorial 15 (23 Bitpoints)

  • Ejercicio 1 (Total 3 Bitpoints): Motor en 4 estados

Hacer que un servo de rotación continua realice la siguiente secuencia de movimientos, que se repiten cícliclamente:

Parado - Giro en sentido horario - Parado - Giro en sentido Antihorario

Cada estado debe durar 2 segundos. Así, estará 2 segundos parado, dos segundos girando en sentido horario, 2 segundos parado, 2 en sentido antihorario... (y se vuelve a comenzar)

Usar sólo los componentes que hemos aprendido hasta ahora, y que son los que están en esta colección

Consejo: Fijarse en los valores que deben tomar los dos bits de control del servo en los diferentes estados y usar corazones y tortugas para reproducir la secuencia

  • Ejercicio 2 (Total 5 Bitpoints): Dos Motores en 4 estados, alternativamente

Modificar el ejercicio 15.1 para que la misma secencia se reproduzca en dos servos, alternativamente. Primero el servo 1 debe realizar la secuencia: parado, giro horario, parado, giro antihorario y después el servo 2. Esta secuencia se repite indefinidamente

Consejo: Usar un multplexor 2:1 para cada entrada on de los controladores de los servos.

  • Ejercicio 3 (Total 10 Bitpoints): Icebot: Adelante - Giro derecha

Construir el icebot 0.1. Hacer que avance durante 2 segundos, y gira
hacia la derecha durante 2 segundos (con movimiento en arco). Esto se
repite indefinidamente

Consejo: En esta secuencia, el motor izquiero siempre está activado y girando en el mismo sentido

Video de cómo se mueve el robot con la solución de este ejercicio:

Click to see the youtube video

  • Ejercicio 4 (5 Bitpoints). Ejercicio Libre. Premiar la creatividad

Tutorial 16

  • Ejercicio 1 (Total 5 Bitpoints): Alarma activada por sensor IR

Diseñar un circuito digital que haga sonar una alarma mientras el sensor de infrarrojos esté detectando un objeto. La alarma sonará por un zumbador, y estará
compuesta por dos tonos de 1Khz y 2Khz, alternados a la frecuencia de 2Hz

Cuando el sensor no detecta objetos, la alarma estará callada

  • Ejercicio 2 (Total 5 Bitpoints): Barrera automática

Diseñar un circuito digital que suba una barrera cuando el sensor de IR detecta la
presencia de un coche. Se cierra cuando no se detecta nada. El circuito todavía no temporiza nada, ni almacena información. Simplemente sube o baja la barrera en función del estado del sensor IR

  • Ejercicio 3 (Total 10 Bitpoints): Icebot Policia

Hacer un circuito digital para que el robot icebot siga a un objeto. Utilizará dos
sensores IR
colocados en su parte delantera. Siempre que el icebot esté en movimiento
se activará una sirena acústina y otra luminosa. La sirena es la misma que la del ejercicio 1. La luminosa está formada por dos LEDs que parpadean anternativamente a
la misma frecuecia que la acústica (2Hz)

  • Ejercicio 4 (5 Bitpoints). Ejercicio Libre. Premiar la creatividad