Menu
Coddy logo textTech

What Is A Testbench

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

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

¿Por qué necesitamos un banco de pruebas?

Cuando construyes un módulo, debes 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 las salidas coinciden con lo que esperas
  • Hazlo automáticamente sin testing manual

testbench frente a módulo de diseño

 Módulo de diseñotestbench
PropósitoImplementa hardwarePrueba el módulo de diseño
¿Tiene ports?Sí (inputs y outputs)No (autocontenido)
¿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 de un módulo — crea una copia del módulo and_gate y la 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

  • testbench tiene no ports
  • reg se usa para signals que change (inputs a DUT)
  • wire se usa para signals de DUT (outputs)
  • El module que se está tested se llama DUT (Diseño bajo prueba)
  • $finish finaliza la simulation

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

challenge icon

Desafío

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

Qué hacer:

Añade 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

Practica por tu cuenta: Compilador de Verilog online