Escritura del Testbench
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 82 de 90.
Desafío
En esta lección, crearás un banco de pruebas (testbench) para verificar que el controlador del semáforo funcione correctamente.
Qué hacer:
Crea un banco de pruebas que:
- Declare señales (
regpara clk y reset,wirepara red, yellow, green) - Instancie el módulo
traffic_lightcon el nombreuut - Genere un reloj que cambie de estado cada 1 unidad de tiempo
- Aplique el reset durante 2 unidades de tiempo y luego lo libere
- Ejecute la simulación durante 100 unidades de tiempo
Pruébalo tú mismo
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
reg [5:0] counter;
// Asignaciones de salida
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// Máquina de estados con temporización
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2;
counter <= 0;
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
counter <= 10;
end
1: begin
state <= 2;
counter <= 40;
end
2: begin
state <= 0;
counter <= 30;
end
endcase
end else begin
counter <= counter - 1;
end
end
end
endmodule
module testbench;
// TODO: Declarar reg para clk y reset
// TODO: Declarar wire para red, yellow, green
// TODO: Instanciar el módulo traffic_light con el nombre uut
// Conectar clk, reset, red, yellow, green
// TODO: Generar reloj (alternar cada 1 unidad de tiempo)
initial begin
$display("Traffic Light Test");
// TODO: Inicializar clk a 0
// TODO: Aplicar reset (reset=1 durante 2 unidades de tiempo, luego reset=0)
// TODO: Ejecutar simulación durante 100 unidades de tiempo
$display("Test complete");
$finish;
end
endmoduleTodas las lecciones de Fundamentos
1Introducción
¿Qué es Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo9Bloques procedimentales
Bloque AlwaysBloque InitialLista de sensibilidadAsignación bloqueanteAsignación no bloqueanteResumen - Always vs Initial15Controlador de semáforo
Definición de los estadosLógica de la máquina de estados