Creación de estímulos
Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 74 de 90.
Stimulus se refiere a los valores de entrada que aplicas a tu diseño para probar si funciona correctamente. Al cambiar las entradas y observar las salidas, puedes verificar que tu diseño se comporta como se espera.
Piense en esto como probar una máquina: usted presiona diferentes botones (estímulos) y observa qué sucede (salidas). Crear un buen estímulo es una parte esencial de la escritura de un testbench.
Por ejemplo, mira los estímulos (stimulus) en el siguiente testbench:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// ESTÍMULO COMIENZA AQUÍ
// Caso de prueba 1: Ambas entradas son 0
a = 0; b = 0; #10;
// Caso de prueba 2: a=0, b=1
a = 0; b = 1; #10;
// Caso de prueba 3: a=1, b=0
a = 1; b = 0; #10;
// Caso de prueba 4: Ambas entradas son 1
a = 1; b = 1; #10;
// ESTÍMULO TERMINA AQUÍ
$finish;
end
endmoduleCada stimulus se aplica, después esperamos 10 unidades de tiempo (#10) antes del siguiente stimulus. Esto le da tiempo al DUT para producir una salida.
Métodos para crear estímulos
| Método | Ideal para | Ejemplo |
|---|---|---|
| Asignaciones secuenciales | Pruebas simples | a = 0; b = 0; #10; |
| Bucle for | Probar todas las combinaciones | for (i = 0; i < 4; i++) |
| Bucle repeat | Repetir patrones | repeat (10) #5 clk = ~clk; |
| Bucle forever | Señales continuas | forever #5 clk = ~clk; |
Método 1: Asignaciones secuenciales
La forma más sencilla de crear estímulos. Asignas valores uno por uno con retardos.
initial begin
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
endMétodo 2: Bucle For
Útil cuando quieres probar todas las combinaciones de entrada posibles.
integer i;
initial begin
for (i = 0; i < 4; i = i + 1) begin
{a, b} = i;
#10;
end
$finish;
endEsto prueba: 00, 01, 10, 11.
Método 3: Bucle Repeat
Útil para repetir el mismo estímulo muchas veces.
initial begin
a = 0; b = 1;
repeat (10) begin
#10 a = ~a;
end
$finish;
endMétodo 4: Bucle Forever
Útil para señales continuas como relojes.
initial begin
clk = 0;
forever #5 clk = ~clk;
endReglas importantes
| Regla | Explicación |
|---|---|
| Usar retardos entre asignaciones de estímulos | #10 da tiempo al DUT para responder |
Usar reg para señales de estímulo | Porque cambian con el tiempo |
Añadir $finish al final | Para detener la simulación |
Desafío
Se te proporciona un módulo de puerta OR. Tu tarea consiste en agregar el estímulo faltante y las declaraciones $display para imprimir los resultados.
Qué hacer:
Agrega estímulos para probar las cuatro combinaciones de entrada (00, 01, 10, 11):
- En cada línea, establece los valores para
xey - Agrega
#10para un retardo - Agrega
$displaypara imprimir el resultado
El <strong>$display</strong> debe verse así:
$display("%d %d | %d", x, y, z);Pruébalo tú mismo
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
$display("x y | z");
$display("---------");
// TODO: Añade estímulo y visualización para 0 0
// TODO: Añade estímulo y visualización para 0 1
// TODO: Añade estímulo y visualización para 1 0
// TODO: Añade estímulo y visualización para 1 1
$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