¿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ño | Testbench | |
|---|---|---|
| Propósito | Implementa el hardware | Prueba el módulo de diseño |
| ¿Tiene puertos? | Sí (entradas y salidas) | No (autocontenido) |
| ¿Es sintetizable? | Sí | 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
endmodulePuntos clave
- El testbench no tiene puertos
regse utiliza para señales que cambian (entradas al DUT)wirese utiliza para señales del DUT (salidas)
- El módulo que se está probando se llama DUT (Design Under Test)
$finishfinaliza 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.
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:
- Declara
regpara las entradasayb - Declara
wirepara la salidac - Instancia
and_gatecon el nombreduty 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
regpara señales controladas en bloquesinitial(entradas al DUT) - Use
wirepara señales que provienen del DUT (salidas) $finishfinaliza 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
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1Introducción
¿Qué es Verilog?Hardware vs SoftwareNiveles de abstracción de diseñoTu primer móduloComentarios4Operadores Parte 1
Operadores aritméticosOperador de móduloOperadores de comparaciónRepaso - Matemáticas simplesOperadores bit a bit7Asignación y Compuertas
Asignación ContinuaAsignación con OperadoresPrimitivas de Compuertas IntegradasCompuertas AND OR NOTCompuertas XOR XNORResumen - Circuito de Compuertas Lógicas10Toma de decisiones
Sentencia IfIf - ElseRepaso - Comparador simpleSentencia CaseCasex y CasezRepaso - Diseño de ALU5Operadores Parte 2
Operadores lógicosOperadores de reducciónOperadores de desplazamientoOperador de concatenaciónOperador condicionalResumen - Desafío de operadores14Fundamentos de Testbench
¿Qué es un Testbench?Creación de estímulosDisplay y MonitorDumpfile y DumpvarsUso de tareas del sistemaResumen: Testbench completo3Sistema de numeración
Representación binariaNúmeros con tamaño definidoNúmeros sin tamaño definidoNúmeros negativosValores especiales X y ZResumen - Formatos de números6Módulos
Estructura del móduloPuertos de entrada y salidaPuertos InoutInstanciación de módulosMapeo de puertos por nombreMapeo de puertos por ordenResumen: Construye un módulo