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 especial de Verilog 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 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 realizar pruebas manuales

Banco de pruebas frente a módulo de diseño

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

Ejemplo sencillo de banco de pruebas

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

  • El banco de pruebas no tiene puertos
  • reg se utiliza para las señales que cambian (entradas a DUT)
  • wire se utiliza para las señales provenientes de DUT (salidas)
  • El módulo que se está probando se llama DUT (diseño bajo prueba)
  • $finish finaliza la simulación

En las siguientes lecciones abordaremos la creación de estímulos, la visualización de resultados y otras características del banco de pruebas.

challenge icon

Desafío

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

Qué hacer:

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

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