Vídeo 31: Despedida de la temporada I - Obijuan/digital-electronics-with-open-FPGAs-tutorial GitHub Wiki

Vídeo

Click to see the youtube video

Haz click en la imagen para ver el vídeo en Youtube

Descripción

Último vídeo de la Temporada I. Haremos un repaso de lo que ha avanzado el ecosistema de las FPGAs libres durante este año. Han aparecido muchas placas, y las herramientas siguen evolucionando para soportar más modelos de FPGAs. Como ejemplo de la colección Jedi, veremos cómo usar el conversor analógico-digital

Contenido

Evolución de las FPGAs libres

La temporada I de los tutoriales empezó el 13 de Octubre de 2017. Ahora estamos a 20 de Diciembre de 2018. Han sucedido muchas cosas desde ese primer tutorial. La comunidad ha crecido, y ha avanzado tanto que muchas de las cosas comentadas al comienzo del curso han quedado obsoletas. Y eso es muy bueno, significa que avanzamos a un gran ritmo :-)

Placas incorporadas en Icestudio

En la comunidad han aparecido más placas, que no existían cuando se hizo el Tutorial 3: La icezum Alhambra y otras placas con FPGAs libres

Alhambra II

Ficha
Nombre Alhambra
Autor Eladio Delgado
Fabricante Mareldem Technologies, Pinos del valle, Granada, España
Donde conseguirla Alhambrabits
Precio 50€ + IVA
FPGA ICE40Hx4K
Frecuencia 12Mhz
Periféricos 8 LEDs, 2 pulsadores, 4 canales A/D
Observaciones Hardware libre. Compatible Arduino

Es la evolución de la Icezum Alhambra. Los cambios más importantes de la Alhambra II con respecto a la anterior son (Más información en este hilo de FPGAwars):

  • FPGA ice40HX4K, que es equivalente a una 8K. Podemos meter circuitos 8 veces mayores. En ella se pueden sintetizar fácilmente microprocesadores como el Latuino o el picorisv32
  • GPIOs a 3.3V tolerante a 5V (como entrada acepta niveles entre 3.3 y 5V, como salida genera 3.3V)
  • Alimentación por USB (dos conectores), hasta 4.8A, para alimentarla con power bank y tener más corriente para los servos
  • Los pines de selección de bitstream para cold boot están accesibles en el GPIO
  • Reguladores conmutados de 1A para las alimentaciones de 1.2 y 3.3V, lo que permitirá activar los PLLs y trabajar a velocidades mucho mayores.
  • Pines analógicos integrados en los pines D0 a D3 (sólo 4 de los 6 pines del header son analógicos) para mayor compatibilidad con Arduino
  • Pulsadores de usuario más cómodos de accionar (3 veces menos fuerza por unidad de superficie que los anteriores)

TinyFPGA-Bx

Ficha
Nombre TinyFPGA
Autor Luke Valenty
Donde conseguirla Crowdsupply
Precio $38
FPGA ICE40LP8K
Frecuencia 16 MHz
Periféricos 1 LED
Observaciones Hardware libre

La TinyFPGA es del tamaño de un Arduino nano. Se puede insertar en una protoboard para hacer nuestros prototipos. Se conecta por el USB para la descarga de diseños, pero en vez de llevar un chip externo para ello (un FTDI), tiene un bootloader hardware. La FPGA por defecto está configurada como un controlador USB y al cargar nuestro diseño se re-configura. Al apretar el botón de reset se re-configura otra vez al estado inicial

IceBreaker

Ficha
Nombre Icebreaker
Autor Piotr Esden-Tempski
Donde conseguirla Crowdsupply
Precio $69
FPGA iCE40 UltraPlus 5K
Frecuencia 48 MHz
Periféricos 2 LEDs, 1 pulsador
Observaciones Hardware libre

Placa con la FPGA iCE40 UltraPlus 5K, que incluye DSP y dos cores hardware de SPI e I2C. Está pensada con fines educativos. Dispoine de 4 PMODs para conectar fácilmente diferentes periféricos: switches, pulsadores, 7-segmentos, VGA...

BlackIce II

Ficha
Nombre BlackIce-II
Autor Folknology
Donde conseguirla Tindie
Precio $55
FPGA ICE40Hx4K
Frecuencia 100Mhz
Periféricos Dip Switches, Pulsadores, 4 LEDs,
Observaciones Hardware libre

Upduino V2.0

Ficha
Nombre UPDuino V2.0
Autor gtjennings1
Donde conseguirla gnarlygrey.com
Precio $14
FPGA iCE40 UltraPlus 5K
Frecuencia 12Mhz
Periféricos 1 LED RBG
Observaciones Hardware libre

iCE40 UltraPlus Breakout Board

Ficha
Nombre iCE40 UltraPlus Breakout Board
Autor Lattice
Donde conseguirla Lattice
Precio $49
FPGA iCE40UP5K
Frecuencia 12 MHz
Periféricos LED RGB, Dip Switches
Observaciones Placa de Lattice. No libre

Otras placas

Las siguientes son placas con FPGA de gama media, en las que se pueden sintetizar sistemas más complejos, como un procesador capaz de correr Linux, usando sólo herramientas libres

TinyFPGA EX

Ficha
Nombre TinyFPGA-EX
Autor Luke Valenty
Donde conseguirla Crowdsupply
Precio No disponible todavía
FPGA ECP5 FPGA
Frecuencia 200Mhz
Periféricos Tarjeta MicroSD
Observaciones Hardware libre

Placa en diseño

ULX3S

Ficha
Nombre ULX3S
Autor emard
Donde conseguirla radiona.org
Precio
FPGA Lattice ECP5 LFE5U-85F-6BG381C (85K LUT)
Frecuencia 25 MHz
Periféricos Tarjeta microSD, 8 leds, 4 pulsadores, jack para audio, 8 canales ADC,
Observaciones Hardware Libre

En el proyecto Trellis se está haciendo ingeniería inversa de estas FPGAs para tener disponibles herramientas libres. En la placa ULX3S ya se ha conseguido sinteizar un OpenRisc que corre Linux

Nuevas herramientas

La comunidad ha estado muy activa durante este año, y el avance las herramientas es imparable. Cada vez se están documentando más FPGAs, mejorando las herramientas existentes y creando nuevas aplicaciones. El ecosistema de las FPGAs libres sigue creciendo

Proyecto Icestorm

El proyecto icestorm ya tiene documentadas 30 FPGAs de la familia Ice40 de Lattice, de gama baja. Las últimas han sido las UltraPlus (UP5K), que incluyen DSPs. Ya hay tres placas de esta familia soportadas en Icestudio

SymbiFlow

El ecosistema de las FPGAs libres nació con el proyecto icestorm creado por Clifford Wolf, para las FPGAs de la familia ICE40 de Lattice. Fue todo un logro. Durante el 2018 este ecosistema ha evolucionado al proyecto Symbiflow: Herramientas libres para completar el ciclo de diseño desde el Verilog hasta la generación del Bitstream para FPGAs de diferentes fabricantes

Se ha creado una arquitectura más general, para integrar FPGAs de diferentes fabricantes. ¡¡Y esto es algo importantísimo!!. Los fabricantes, actualmente, tiene cada uno sus propias herramientas, que sólo valen para sus FPGAs. Esto dificulta enormemente el hacer diseños hardware reutilizables en FPGAs de otros fabricantes. Esto mismo ya ocurrió en el pasado con los microprocesadores: cada fabricante tenía su propio compilador. Hasta que llegó el primer compilador libre: el GCC, que permitía reutilizar el código en diferentes procesadores. Pues bien, gracias a Symbiflow, ¡tenemos el primer sintetizador libre multi-FPGA!. Y esto va a cambiar el panorama de las FPGAs muchísimo, a largo plazo

Más información sobre Symbiflow, en las transparencias que se presentaron en el congreso ORCONF-2018

El proyecto tiene 2 partes fundamentales: las herramientas software y la documentación de las FPGAs

Herramientas software

  • Yosys. Es el sintetizador. Pasa del verilog al netlist
  • Nextpnr. Herramienta de rutado y emplazado
  • VTR. otra herramienta de rutado y emplazado

Documentación de las FPGAs

La parte más importante del proyecto es la documentación de las diferentes FPGAs. Esta información NO la proporciona el fabricante, por lo que se está obteniendo mediante ingeniería inversa, y es un proceso largo y tedioso, pero está dando sus frutos

Nombre Descripción
Proyecto Icestorm Documentación de la Familia ICE40 de Lattice
Proyecto Trellis Documentación de la Familia ECP5 de Lattice
Proyecto X-ray Documentación de la Serie-7 de Xilinx
Proyecto Chibi Documentación de las FPGA MAX-V de Intel
Proyecto 2064 Documentación de la familia xc20xx de Xilinx (Las primeras FPGAs que hubo)

Colección JEDI

La temporada I se termina, pero la acción continúa en la Colección Jedi. Iré añadiendo nuevos bloques y ejemplos

Esta colección se ha creado a partir de la colección de la Academia Jedi de tutorial anterior, y en ella se irán añadiendo nuevos bloques. Para este tutorial de despedida, he añadido una primera versión del conversor Analógico-Digital (A/D) que nos permite leer una entrada analógica. La explicación detallada la dejamos para la temporada II, pero aquí os muestro un par de ejemplos para que juguéis :-)

Bloque para lecturas analógicas

Las placas Icezum Alhambra y Alhambra II incorporan el conversor analógico-digital ADS7924 de texas instrument. Tiene 4 canales de 12 bits

La lectura se hace a través del bus I2C, por los pines ADC-SDA (datos) y ADC-SCL (reloj) de la FPGA

Un primer bloque para leer uno de los canales analógicos se encuentra en la colección Jedi, en el menú Varios/ADC/adc

Por los puertos adc-sda y adc-scl se conectan directamente los pines del mismo nombre en Icetudio. Si tenemos una tarjeta diferente, este bloque se puede usar también conectando en ese caso a los pines SDA y SCL del I2C donde está conectado el conversor

Por la entrada ch[1:0] indicamos el canal a leer (0-3) e introducimos un tic por start para que comience la conversión. La lectura digital es de 8 bits (Se toman los 8 bits más significativos del valor interno de 12 bits), y se devuelve por el bus de salida. Se emite un tic de dato listo por done, para indicar que la muestra ya está disponible

Ejemplo 1: Lectura de un potenciómetro

Vamos a conectar un potenciómetro lineal de 10K al canal 0 del conversor A/D y leeremos su valor digital, de 8 bits, que mostraremos en los LEDs de la Icezum Alhambra. El escenario es el siguiente:

En el circuito colocamos el bloque conversor A/D. Mediante una constante de 2 bits indicamos que queremos leer el canal 0, y colocamos un corazón de tics de 20Hz para realizar 20 lecturas por segundos. La salida la conectamos directamente a los LEDs. Este ejemplo se encuentra en la colección Jedi en el menú Archivo/Ejemplos/ADC/01-Potentiometer-LEDs

Lo cargamos y lo probamos. En los LEDs veremos el valor digital de la tensión proporcionada por el potenciómetro, en binario. En un extremo su valor será 0 (0v), y en el otro 255 (5v)

Click to see the youtube video

Ejemplo 2: Envío de muestras al PC por el puerto serie

Usando el mismo escenario que en el ejemplo 1, añadimos el bloque transmisor serie para enviar las lecturas del potenciómetro al PC, por el puerto serie. Para que se realice la transmisión sólo hay que conectar la señal done del conversor a la txmit del bloque serie. La frecuencia de muestreo la cambiamos a 100, para que se envíen más datos por segundo. El circuito es el siguiente:

Lo cargamos y lo probamos. En el PC ejecutamos el ScriptCommuniator y mostramos la pestaña con los datos en decimal. Veremos cómo en un extremo se recibe el 000 y en el otro el 255

Click to see the youtube video

Ejemplo 3: Movimiento de un servo con el potenciómetro

Como último ejemplo de la temporada I de tutoriales, vamos a mover un servo a cualquier posición, usando el potenciómetro. El escenario es el mismo de antes pero añadiendo un servo Futaba 3003

En el circuito colocamos el controlador de servos igual que el transmisor serie del ejemplo 2: por su entrada write conectamos la salida done, para que mueva el servo a la posición recibida del conversor

Lo cargamos y lo probamos. Ahora podemos llevar el servo a cualquier posición fácilmente moviendo el potenciómetro. ¡Es muy adictivo! :-)

Click to see the youtube video

Rango de Caballero Jedi

Si has participado en la Academia Jedi, el curso estará oficialmente terminado cuando alcances el rango de Caballero Jedi. Para ello necesitarás tener al menos... ¡600 Bitpoints!. Los bitpoints que te faltan los podrás conseguir haciendo tus propios proyectos que podrás entregar en la carpeta del tutorial 31 en el github de las entregas. Es obligatorio que la entrega sea por github

Una vez que consigas los 600 Bitpoints, se emitirá un Certificado Jedi que acredite tus logros

Los 3 primeros Certificados emitidos

Los tres primeros estudiantes de la Academia Jedi en alcanzar el rango máximo de Caballero Jedi son:

Ximo Catala

  • Usuario Github: ximocat

  • Bitpoints totales: 600 (+465)

  • Certificado:

Josep Montoliu

  • Usuario Github: klarojms

  • Bitpoints totales: 600 (+20)

  • Certificado:

Federico Coca

  • Usuario Github: fgcoca

  • Bitpoints totales: 600 (+5)

  • Certificado:

Soluciones a los ejercicios del tutorial 30: Puerto Serie

Las soluciones a los ejercicios planteados en el tutorial 30: Puerto serie se muestran a continuación:

Ejercicio 30.1: Transmisión de dos cadenas

Ejercicio 30.2: Contador de pasadas del spiner

Ejercicio 30.3: Control de Franky por puerto serie

Estadísticas del tutorial

  • Primer vídeo: 13-Octubre-2017
  • Último vídeo: 21-Dic-2018
  • Tiempo desarrollo Total: 1 año y 2 meses
  • Ejemplos de circuitos: 220. Todos sintetizados y comprobados en hardware real
  • Ejercicios propuestos: 90. Con sus soluciones
  • Imágenes: 1357. Entre figuras, pantallazos y animaciones. Con sus ficheros fuentes en SVG en el propio repositorio del tutorial
  • Tutoriales:: 31, con vídeos e información en wiki
  • Vídeos:
    • 48 con explicaciones
    • 159 de apoyo (sin voz): ejemplos, ejercicios propuestos, aclaraciones...
  • Número de ediciones de la wiki: 7340
  • Commits de desarrollo: 1563
  • Número de entregas de ejercicios recibidas: 1160
  • Numero total de apuntados: 193
    • Curso Completado: 3
      • Caballeros Jedi: 3
    • Tercer curso: 8
      • Jedis Nivel 3: 2
      • Jedis Nivel 2: 0
      • Jedis Nivel 1: 6
      • Jedis: 0
    • Segundo curso: 18
      • Aspirantes a Jedi Nivel 3: 1
      • Aspirantes a Jedi Nivel 2: 1
      • Aspirantes a Jedi Nivel 1: 1
      • Aspirantes a Jedi: 2
      • Padawans Nivel 3: 3
      • Padawans Nivel 2: 1
      • Padawans Nivel 1: 2
      • Padawans: 7
    • Primer curso: 123
      • Aspirantes a Padawans Nivel 3: 12
      • Aspirantes a Padawans Nivel 2: 2
      • Aspirantes a Padawans Nivel 1: 16
      • Aspirantes a Padawans: 9
      • Cadetes Nivel 3: 23
      • Cadetes Nivel 2: 20
      • Cadetes Nivel 1: 13
      • Cadetes: 28
    • Pre-academia: 41
      • Aspirantes a Cadete: 39
      • Observadores: 2

Autor

Licencia

Créditos y agradecimientos

Enlaces

Preguntas frecuentes

  • ¿Dónde puedo conseguir la placa Icezum Alhambra?

Pueden conseguir una desde Alhambrabits

  • ¿Dónde puedo comprar material electrónico?. Hay muchos sitios. Uno muy bueno es Bricogeek

  • ¿Cómo aprendo a manejar github?

Hay mucha información en internet. En su momento hice este Tutorial: Github y FreeCAD para enseñar a manejarlo. Los ejemplos están hechos con ficheros de FreeCAD, sin embargo, lo que se enseña es genérico. También vale para las entregas de los ejercicios del tutorial de Electrónica digital para makers

  • Los pulsadores de la Icezum Alhambra no me funcionan

Eso es debido a que se han metido restos de flux y no hacen buen contacto. En el apartado ¡No me funcionan los pulsadores! del Tutorial 9 se indica cómo solucionarlo fácilmente

  • ¿Dónde puedo encontrar más información sobre las señales PWM?

Echa un vistazo a este post de Rincón Ingenieril sobre el tema

  • He conectado un pulsador externo pero no me funciona. He hecho un circuito para conectar el botón con un led, y al apretar se enciende el LED, pero luego no se apaga. NO funciona bien

Los pulsadores externos que se conecten a los pines de 5v de la Alhambra (D0 - D13) tiene que llevar una resistencia de pull-up o pull-down con valores entre 460 ohm y 2K. Típicamente usamos 1K. Esto hace que los conversores de nivel se configuren como entradas y que el pulsador funcione correctamente. Puedes encontrar más información En este enlace

Es un servo muy usado y muy estándar. Si buscar por internet encontrarás muchos sitios donde los vendes, a diferentes precios. Aquí en España se puede conseguir muy fácilmente a través de BricoGeek: Servo SM-4303R Bricogeek y también en Iberobotics: Servo SM-4303R Iberobotics

  • Parece ser que los servos Futaba 3003 se pueden trucar para convertirlos en rotación continua. ¿Conoces algún tutorial sobre como hacerlo?

El Futaba 3003 es uno de los servos que típicamente se han trucado para construir robots móviles con ellos. Robots como Tritt, El Skybot o el Miniskybot los utilizan. Existen muchísimos tutoriales para hacerlo. En esta página puedes encontrar todas las formas de trucarlos. El que recomendamos es el caso 2