Menu
Coddy logo textTech

Escritura del banco de pruebas

Parte de la sección Fundamentos del Journey de Verilog de Coddy. Lección 82 de 90.

challenge icon

Desafío

En esta lección, crearás un banco de pruebas para verificar que el controlador del semáforo funciona correctamente.

Qué hacer:

Crea un banco de pruebas que:

  1. Declare señales (reg para clk y reset, wire para red, yellow, green)
  2. Instancie el módulo traffic_light con el nombre uut
  3. Genere un reloj que cambie de estado cada 1 unidad de tiempo
  4. Aplique el reinicio durante 2 unidades de tiempo y después lo libere
  5. Ejecute la simulación durante 100 unidades de tiempo

La simulación se comprueba mediante lo que imprime, por lo que el bloque initial también debe producir exactamente estas líneas:

  1. Imprima Traffic Light Test con $display antes de configurar el reloj y el reinicio
  2. Después de las 100 unidades de tiempo, imprima Test complete con $display
  3. Finalice la simulación con $finish, que añade su propia línea a la salida

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 el 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 la simulación durante 100 unidades de tiempo
    
    
    $display("Test complete");
    $finish;
  end
endmodule

Todas las lecciones de Fundamentos

Practica por tu cuenta: Compilador de Verilog online