Menu
Coddy logo textTech

¿Qué es un Testbench?

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 73 de 90.

Un testbench es un módulo de Verilog especial que se utiliza para probar otro módulo. Proporciona entradas a tu diseño y comprueba si las salidas son correctas.

¿Por qué necesitamos un Testbench?

Cuando construyes un módulo, necesitas asegurarte de que funcione correctamente. Un testbench te permite:

  • Aplicar diferentes valores de entrada a tu módulo
  • Observar las salidas
  • Compruebe si las salidas coinciden con lo que espera
  • Haga esto automáticamente sin pruebas manuales

Testbench vs Design Module

 Design ModuleTestbench
PropósitoImplementa el hardwarePrueba el design module
¿Tiene puertos?Sí (inputs y outputs)No (autónomo)
¿Sintetizable?No (solo simulation)

Ejemplo simple de testbench

module testbench;              // ¡Sin puertos!

  // Las entradas y salidas provienen del módulo que estamos probando (el DUT).
  reg a, b;                    // reg para entradas
  wire c;                      // wire para salida
  

  // Esto es la instanciación del módulo — crea una copia del módulo and_gate y lo nombra dut
  and_gate dut (               // Instanciar DUT
    .a(a),
    .b(b),
    .c(c)
  );

  // Este es un bloque initial que aplica valores de prueba a las entradas del módulo que se está probando.
  initial begin                // Aplicar valores de prueba
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

Puntos Clave

  • El testbench no tiene puertos
  • reg se utiliza para señales que cambian (entradas al DUT)
  • wire se utiliza para señales provenientes del DUT (salidas)
  • El módulo que se está probando se llama DUT (Design Under Test)
  • $finish finaliza la simulación

Cubriremos la creación de estímulos, la visualización de resultados y otras características de testbench en las siguientes lecciones.

challenge icon

Desafío

Se te proporciona un módulo de puerta AND. Tu tarea es agregar las partes que faltan a su testbench.

Qué hacer:

Agrega las siguientes partes al testbench:

  1. Declara reg para las entradas a y b
  2. Declara wire para la salida c
  3. Instancia and_gate con el nombre dut y conecta los puertos

Pruébalo tú mismo

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  
  // Tarea 1: Declara reg para las entradas a y b
  
  
  // Tarea 2: Declara wire para la salida c
  

  // Tarea 3: Instancia and_gate con el nombre dut
  // Conecta .a(a), .b(b), .c(c)


  initial begin
    a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
    a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
    $finish;
  end
endmodule
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos