En este momento estás viendo Una primera práctica de FPGA remota en Verilog: del requisito a la tabla de verdad

Una primera práctica de FPGA remota en Verilog: del requisito a la tabla de verdad

Diseño digital · Guía docente

Una primera práctica de FPGA remota en Verilog: del requisito a la tabla de verdad

Una buena primera práctica de FPGA debería terminar con algo más que un LED encendido. Pide al alumnado que convierta un requisito escrito en un circuito, pruebe todas las combinaciones de entrada y explique cómo sus observaciones respaldan su diseño.

Esta guía utiliza una regla de acceso de tres entradas en una FPGA DE1-SoC real y remota. Es lo bastante pequeña como para revisarla por completo e incluye una respuesta errónea plausible que supera una comprobación superficial del tipo «la luz se enciende». Puedes usar directamente la ficha del estudiante y reservar la solución de referencia para la retroalimentación.

De un vistazo. Diseño digital introductorio de nivel universitario; requiere conocer AND, OR y las tablas de verdad binarias. Calcula unos 60 minutos de trabajo en clase, más el tiempo de acceso y síntesis. El alumnado necesita un navegador y acceso al laboratorio Verilog de la DE1-SoC.

Prepara el perfil Verilog de la DE1-SoC

El laboratorio DE1-SoC ofrece herramientas de diseño en el navegador, controles de entrada virtuales y una vista por cámara de la placa física. Para esta práctica, utiliza el perfil Verilog de la DE1-SoC descrito en la lección de Teach sobre las primeras puertas: el archivo y el módulo de nivel superior son leds_mirror.v y leds_mirror, con entradas SW y salidas LEDR.

Placa Terasic DE1-SoC, con la FPGA en el centro e interruptores, pulsadores, LEDs y displays de siete segmentos a lo largo del borde inferior.
La placa Terasic DE1-SoC utilizada en el laboratorio de LabsLand.

Antes de clase, abre el laboratorio como lo hará tu alumnado y comprueba los controles de los interruptores, la vista de la cámara y dónde se entregará el trabajo. Entrega la ficha y los criterios de evaluación antes de empezar. Si el grupo está aprendiendo VHDL, el mismo requisito y la misma tabla de verdad sirven con la lección de primeras puertas en VHDL; el código completo que se proporciona aquí es la versión en Verilog.

1. Empieza con un requisito que el alumnado pueda cuestionar

Un circuito didáctico tiene una entrada de habilitación, E, y dos entradas de permiso, A y B. Su indicador Y debe encenderse solo cuando E está activa y al menos un permiso está activo. Si E está desactivada, Y debe permanecer apagado, independientemente de A y B.

Asigna E a SW[2], A a SW[1], B a SW[0] e Y a LEDR[0]. No hay estado almacenado ni reloj: la salida depende de las entradas actuales.

Da al alumnado diez minutos para completar la tabla de verdad de ocho filas antes de mostrar código. Pídele que explique por qué E = 0 hace que cuatro filas distintas compartan la misma salida. Después, pregunta qué filas muestran que un permiso por sí solo no basta.

Diagrama lógico ilustrativo: el permiso A o el permiso B alimenta una operación AND con la habilitación E. El resultado es Y. E, A y B también aparecen en los LEDs de diagnóstico 3, 2 y 1.
Diagrama lógico ilustrativo. Los LEDs 3, 2 y 1 reflejan E, A y B en el mismo orden que los interruptores.

Clave para el docente: la expresión es Y = E AND (A OR B). Solo las filas 101, 110 y 111 deben encender Y cuando el orden de las entradas es E, A, B.

E · SW2A · SW1B · SW0Y esperada · LEDR0
0000
0010
0100
0110
1000
1011
1101
1111

2. Implementa la regla y haz visibles las entradas

Pide al alumnado que complete la expresión de salida en el archivo inicial del estudiante (PDF). Ese archivo mantiene Y apagado a propósito, de modo que compilar sin errores no basta para completar la práctica.

La referencia siguiente usa asignaciones continuas. & y | son AND y OR bit a bit; aquí cada operando es de un bit. Los otros tres LEDs asignados reflejan E, A y B. Son salidas de diagnóstico, no reglas de permiso adicionales. Todos los LEDs no utilizados se apagan explícitamente.

// Solución de referencia: E = SW[2], A = SW[1], B = SW[0].
// Perfil Verilog de DE1-SoC en Teach: mantén el nombre de archivo/módulo leds_mirror.
module leds_mirror(input [9:0] SW, output [9:0] LEDR);
  assign LEDR[0] = SW[2] & (SW[1] | SW[0]);
  assign LEDR[3:1] = SW[2:0]; // E, A, B en el orden de los interruptores
  assign LEDR[9:4] = 6'b000000;
endmodule

La solución de referencia es pública, así que una implementación correcta, por sí sola, no demuestra trabajo independiente. Pide al alumnado que justifique las asignaciones, registre sus propias observaciones y explique una prueba que ponga en evidencia la regla defectuosa.

3. Sintetiza, carga y registra las ocho filas

Usa Synthesize, resuelve los errores de compilación y después selecciona Upload to FPGA. La síntesis por sí sola no programa la placa. Después de cada modificación, vuelve a sintetizar y cargar antes de registrar nuevas observaciones.

  1. Pon todos los interruptores en apagado. Confirma que los LEDs de diagnóstico coinciden con E = A = B = 0.
  2. Configura explícitamente los tres interruptores relevantes en cada fila, en el orden 000, 001, 010, 011, 100, 101, 110, 111. Evita instrucciones como «después activa A», que dejan ambiguo el estado anterior de B.
  3. Espera a que la imagen de la cámara se estabilice. Registra el valor observado de Y por separado de la predicción. En este perfil, los LEDs son activos a nivel alto: encendido significa 1.
  4. Ante cualquier discrepancia, anota la fila, la versión del código y lo que comprobaste. Conserva la observación original cuando corrijas un error de transcripción o de implementación.
  5. Tras la tabla principal, cambia un interruptor no utilizado manteniendo fijos E, A y B. Explica por qué Y no debería cambiar.

Con un diseño correcto, Y permanece apagado en las cinco primeras filas y se enciende en las tres últimas. Registra los estados estables de los LEDs desde la cámara; este ejercicio no mide la velocidad de conmutación.

4. Usa una expresión errónea para enseñar a probar bien

Ahora muestra Y = (E AND A) OR B. Antes de que nadie modifique el código, pide una fila en la que las dos reglas discrepen. Hay exactamente dos: EAB = 001 y 011. En ambas, B enciende Y mientras E está desactivada, así que B se ha saltado la habilitación. Las otras seis filas dan la misma salida con ambas reglas, incluida la 111. Una demostración que solo comprueba «todo activado» no puede detectar este error.

El alumnado puede explicarlo en papel o probar la expresión defectuosa, identificando claramente esa ejecución. Si la carga en la placa, debe restaurar su diseño correcto y repetir la verificación. Una buena pregunta de cierre es: «Si solo pudieras hacer una prueba para detectar este error, ¿qué fila elegirías y por qué 111 sería una mala elección?».

5. Evalúa la evidencia, no solo la captura

Pide una única entrega compacta: el archivo fuente final, las ocho filas con predicción y observación, dos capturas de la cámara etiquetadas (EAB = 001 y una fila asignada por el docente entre 101, 110 y 111) y una breve explicación del contraejemplo. Los pies de las capturas deben indicar la posición de los interruptores, Y, los LEDs de diagnóstico y la versión del código. Una sola captura con un LED encendido no puede demostrar toda la tabla de verdad.

CriterioPuntosQué merece la puntuación máxima
Requisito y predicción4Las ocho predicciones son correctas; la explicación distingue la habilitación del permiso.
Implementación4La expresión implementa el requisito; todas las salidas están definidas y la asignación de entradas es coherente.
Evidencia en hardware4Se registran las ocho filas observadas; las dos capturas respaldan las filas indicadas; se documenta cualquier discrepancia.
Razonamiento y depuración4El estudiante explica por qué 001 o 011 pone en evidencia la regla defectuosa y por qué 111 no lo hace.

En cada criterio, otorga 3 puntos por una omisión menor, 2 por un intento sustancial pero incompleto, 1 por una evidencia pertinente mínima y 0 si no hay evidencia. Publica este esquema de 16 puntos junto con la ficha. Si falla el acceso, permite entregar primero la predicción, el código y la explicación de la depuración; deja pendiente la evidencia en hardware en lugar de pedir al alumnado que la invente.

Errores frecuentes que conviene comentar

  • Invertir el orden de las entradas. La tabla sigue el orden EAB, es decir, SW2–SW1–SW0. Usa los LEDs de diagnóstico para comprobar la asignación.
  • Probar una carga anterior. Un nuevo archivo fuente no cambia el circuito en funcionamiento hasta que se carga la nueva compilación.
  • Confundir compilar con funcionar correctamente. Tanto el archivo inicial como la expresión defectuosa pueden compilar. La tabla de verdad es la que comprueba el requisito.
  • Usar pulsadores en lugar de interruptores. Los pulsadores documentados de la DE1-SoC tienen una polaridad distinta. Este ejercicio usa deliberadamente solo interruptores.
  • Presentar lo esperado como observado. Mantén separadas las dos columnas de la ficha, también cuando la imagen de la cámara no se pueda leer.
Usa esta práctica

Abre la ficha imprimible del estudiante (PDF) · Descarga el archivo inicial (PDF) · Descarga la solución de referencia (PDF)

La referencia se simuló con Icarus Verilog para las 1024 posiciones posibles de los interruptores. No se ha verificado en una ejecución con la placa física.

Próximos pasos

Para una introducción guiada antes de esta tarea, empieza con la lección de Teach sobre primeras puertas en Verilog. Cuando el alumnado sepa relacionar requisito, implementación y prueba, pasa a la lección sobre tablas de verdad y minimización. Consulta las lecciones de forma pública y después inicia sesión con tu cuenta de docente para preparar una sesión de clase y comprobar tu acceso al laboratorio.

Luis

Luis Rodríguez Gil es CTO de LabsLand y uno de sus cofundadores. Lleva más de 8 años en el ámbito de la investigación en laboratorios remotos. Ahora trabaja, desde LabsLand, para conseguir que esta tecnología tan novedosa alcance todo su potencial para la educación.