Laboratorio de Diseño digital: Verilog, VHDL y yosys en una VM Ubuntu privada

Este laboratorio da a cada alumno las herramientas de quien diseña circuitos digitales, en una sola VM Ubuntu. Icarus Verilog y GHDL simulan circuitos escritos en Verilog y en VHDL, y yosys convierte un diseño en puertas lógicas. El alumno describe un circuito, lo simula con un banco de pruebas, lee una tabla de verdad o una forma de onda, y termina diseños que califican bancos de pruebas ocultos.

No se instala nada en el ordenador del alumno y no hace falta ninguna placa. Las herramientas son las de verdad, iverilog, vvp, ghdl y yosys, instaladas desde el archivo de Ubuntu. Una forma de onda se lee como texto con vcd2txt, o se dibuja con vcd2svg y se abre en el puerto 8000 del laboratorio, porque no hay un visor de escritorio.

Qué aprenden los alumnos

Cómo se describe y se prueba un circuito. Se da un semisumador y se escribe un sumador completo, en Verilog y otra vez en VHDL, para ver el mismo circuito en los dos lenguajes. Un contador muestra lo que hace un reloj: sus señales se guardan en un archivo VCD y se leen como filas de texto. Después el alumno termina un contador de 4 bits con habilitación y reinicio síncrono, y cuenta las puertas que yosys saca de él, lo que muestra que un biestable recuerda un bit y que un latch es un error.

Las cinco partes

Primero un circuito combinacional en Verilog: leer la tabla de verdad de un semisumador y escribir un sumador completo. Segundo un reloj y una forma de onda: un contador dado, su archivo VCD, vcd2txt y vcd2svg. Tercero el mismo sumador completo en VHDL con los tres pasos de GHDL, analizar, elaborar y ejecutar. Cuarto un contador con habilitación y reinicio, que termina el alumno. Quinto yosys, con hdl gates, para ver cuántas celdas necesita un diseño. Todo lo que el alumno edita está en la carpeta hdl, y README.md en la carpeta personal dice qué hacer y no da ninguna respuesta.

Ejecútalo en tu navegador

Los laboratorios VM se ponen como tarea de laboratorio en un módulo, y el ejemplo está en la página del laboratorio. La máquina es pequeña: una CPU, 1 GB de memoria y 10 GB de disco. Los simuladores usan unos pocos megabytes.

  1. Añadir el laboratorio. En un módulo que enseñes, añade una tarea y elige la tarjeta de laboratorio VM Ubuntu. La página muestra una breve descripción de la máquina en lugar de un archivo compose.
  2. Empezar desde el ejemplo. La página ofrece laboratorios ya hechos para empezar. Elige Digital design. Usar un ejemplo reemplaza el texto, y Deshacer recupera el tuyo.
  3. Publicar e iniciar tu propia copia. Publica y luego pulsa Iniciar. El script setup del laboratorio instala Icarus Verilog, GHDL y yosys desde el archivo de Ubuntu y escribe los comandos de ayuda, los archivos de trabajo y el README, la primera vez que arranca la VM, en unos minutos.
  4. Abrir el terminal. Abre su terminal y lee README.md en la carpeta personal. El puerto 8000 del laboratorio muestra la carpeta de imágenes que dibuja el alumno.

Una lección básica en este laboratorio

Digital Design Basics es una lección pequeña que se da en este laboratorio, una VM Ubuntu. Tiene un gancho, un objetivo «Puedo», palabras clave, una pregunta de partida, una comprobación después de cada idea, un error común y una comprobación final, y cada paso tiene un botón Ejecutar que escribe su comando en el terminal de la máquina. El alumno lee un semisumador, lo simula y lee su tabla de verdad, ejecuta un contador y lee su forma de onda como texto, y simula el mismo semisumador en VHDL con GHDL.

La lección echa un vistazo y deja al alumno la tarea propia del laboratorio, el sumador completo y el contador: por eso no da ninguna respuesta.

Cómo se califica

El laboratorio tiene una comprobación. Se ejecuta sobre una copia de la máquina guardada y compila tres archivos del alumno, full_adder.v, full_adder.vhd y counter4.v, con bancos de pruebas que el alumno nunca ve. Cada banco de pruebas contiene un modelo de referencia y lo compara con el diseño, el del contador antes y después de cada flanco de reloj, así que se detecta un reinicio que no sea síncrono. El banco de pruebas imprime una línea de resultado con un número que la comprobación saca de nuevo cada vez, de modo que un diseño no puede imprimir por sí mismo la línea correcta, y se rechaza un diseño que llame a finish o a system. Después yosys debe leer el diseño sin ningún latch, y el contador necesita biestables y no más celdas que un diseño sencillo. La primera línea de lo que imprimió la comprobación dice por qué.

  1. Entregarlo. Asigna el laboratorio como cualquier tarea, con fecha límite si quieres. Cada alumno recibe una VM propia, que se conserva entre sesiones.
  2. Ejecutar la comprobación. En la fila de un alumno en la lista de la clase, pulsa Ejecutar la comprobación. Inicia una copia de su máquina guardada que no se vuelve a guardar, ejecuta el script de comprobación del laboratorio como root y muestra si pasó, qué imprimió y cuándo. Al alumno no se le comunica el resultado.
  3. Calificarlo. Lee la primera línea de lo que imprimió la comprobación: dice qué no está bien, por ejemplo comprobaciones ocultas con una salida incorrecta o un diseño que crea un latch. Devuelve el trabajo con un motivo si necesita más.

La definición en GitHub

El archivo es toda la definición del laboratorio, el mismo texto que ejecuta la plataforma: tamaño, puerto, script setup, comandos de ayuda, archivos de trabajo, README y comprobación. Cópialo y cambia los circuitos o los bancos de pruebas para hacer un laboratorio más largo.

Prueba este laboratorio, y lo que cuesta

Con una cuenta personal gratuita puedes seguir las lecciones básicas de este laboratorio, con crédito gratuito suficiente cada mes para seguir la mayoría de las lecciones y sin tarjeta. Para una clase, un centro tiene gratis sus primeros 365 días, hasta 50 alumnos, y después paga por alumno y año, con todos los laboratorios incluidos y el profesorado gratis.

Preguntas frecuentes

¿El laboratorio necesita licencia o una placa?
No. Icarus Verilog, GHDL y yosys son de código abierto y están en el archivo de Ubuntu. Se instalan cuando arranca la VM del alumno, así que no distribuimos ninguno. No hace falta ninguna placa, porque no se coloca ni se enruta nada.
¿Por qué se leen las formas de onda como texto?
Un visor gráfico necesita un escritorio, que una VM de terminal no tiene. El laboratorio lee un archivo VCD como filas de texto con vcd2txt y dibuja una imagen con vcd2svg. Ubuntu 26.04 trae GHDL con el motor GCC, que compila el banco de pruebas a un programa: por eso ghdl -e escribe un ejecutable junto a los archivos.
¿Pueden los alumnos romper algo?
Solo su propia copia. La máquina de un visitante sin cuenta llega al archivo de Ubuntu y a nada más, y si un alumno estropea un archivo, hdl reset lo deja como se entregó.
¿Se probó el laboratorio en una VM real de alumno?
El script setup, los comandos de la lección y la comprobación, con cada manera de engañarla, se ejecutaron en un contenedor Ubuntu 26.04 real que hace de VM, en una máquina arm64. Una VM de alumno ya arrancada, que sirve las imágenes desde una unidad systemd en el puerto 8000, y los paquetes amd64 de las máquinas de los alumnos merecen una prueba antes de una clase.