Creating Stimulus
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 comprobar si funciona correctamente. Al cambiar las entradas y observar las salidas, puedes verificar que tu diseño se comporta como esperas.
Piensa en ello como probar una máquina: presionas diferentes botones (stimulus) y observas lo que sucede (outputs). Crear un buen stimulus es una parte esencial de escribir un testbench.
Por ejemplo, observa el stimulus en el siguiente testbench:
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// EL 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;
// EL ESTÍMULO TERMINA AQUÍ
$finish;
end
endmoduleCada estímulo se aplica, después esperamos 10 unidades de tiempo (#10) antes del siguiente estímulo. 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 retrasos.
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 los relojes.
initial begin
clk = 0;
forever #5 clk = ~clk;
endReglas importantes
| Regla | Explicación |
|---|---|
| Usa retrasos entre las asignaciones de stimulus | #10 permite que DUT tenga tiempo para responder |
Usa reg para las señales de stimulus | Porque cambian con el tiempo |
Add $finish al end | Para detener la simulación |
Desafío
Se te proporciona un module de compuerta OR. Tu tarea es añadir el stimulus que falta y las instrucciones $display para imprimir los resultados.
Qué hacer:
Añade stimulus para probar las cuatro combinaciones de entrada (00, 01, 10, 11):
- En cada línea, establece los valores de
xyy - Añade
#10para un retraso - Añade
$displaypara imprimir el resultado
El <strong>$display</strong> debería 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 VerilogHardware frente a softwareTu primer móduloComentariosNiveles de abstracción del diseño4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPractica por tu cuenta: Compilador de Verilog online