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 utilizado para probar otro módulo. Proporciona entradas a su diseño y verifica si las salidas son correctas.

¿Por qué necesitamos un banco de pruebas (Testbench)?

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

  • Aplicar diferentes valores de entrada a tu módulo
  • Observar las salidas
  • Comprueba si los resultados coinciden con lo que esperas
  • Haz esto automáticamente sin pruebas manuales

Testbench vs Módulo de Diseño

 Módulo de DiseñoTestbench
PropósitoImplementa el hardwarePrueba el módulo de diseño
¿Tiene puertos?Sí (entradas y salidas)No (autocontenido)
¿Es sintetizable?No (solo simulación)

Ejemplo de Testbench Simple

module testbench;              // ¡Sin puertos!

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

  // Esta 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 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 del banco de pruebas (testbench) en las siguientes lecciones.

challenge icon

Desafío

Se te proporciona un módulo de compuerta AND. Tu tarea es agregar las partes faltantes a su banco de pruebas (testbench).

Qué hacer:

Agrega las siguientes partes al banco de pruebas:

  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

Hoja de referencia

Un testbench es un módulo de Verilog utilizado para probar otro módulo (el DUT - Design Under Test). No tiene puertos y es solo para simulación.

module testbench;              // ¡Sin puertos!

  reg a, b;                    // reg para entradas (señales que cambian)
  wire c;                      // wire para salidas del DUT

  and_gate dut (               // Instanciar DUT
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin                // Aplicar valores de prueba
    a = 0; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;                   // Finalizar simulación
  end
endmodule
  • Use reg para señales controladas en bloques initial (entradas al DUT)
  • Use wire para señales que provienen del DUT (salidas)
  • $finish finaliza la simulación

Pruébalo tú mismo

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

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

  // Tarea 3: Instanciar and_gate con el nombre dut
  // Conectar .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