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.
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.

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.

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 · SW2 | A · SW1 | B · SW0 | Y esperada · LEDR0 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
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.
- Pon todos los interruptores en apagado. Confirma que los LEDs de diagnóstico coinciden con E = A = B = 0.
- 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.
- 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.
- 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.
- 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.
| Criterio | Puntos | Qué merece la puntuación máxima |
|---|---|---|
| Requisito y predicción | 4 | Las ocho predicciones son correctas; la explicación distingue la habilitación del permiso. |
| Implementación | 4 | La expresión implementa el requisito; todas las salidas están definidas y la asignación de entradas es coherente. |
| Evidencia en hardware | 4 | Se registran las ocho filas observadas; las dos capturas respaldan las filas indicadas; se documenta cualquier discrepancia. |
| Razonamiento y depuración | 4 | El 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.
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.
