Menu
Coddy logo textTech

Creación de estímulos

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

Estímulo 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 (estímulo) y observas lo que sucede (salidas). Crear un buen estímulo es una parte esencial de escribir un banco de pruebas.

Por ejemplo, observa el estímulo en el siguiente banco de pruebas:

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
endmodule

Cada 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étodoIdeal paraEjemplo
Asignaciones secuencialesPruebas simplesa = 0; b = 0; #10;
Bucle forProbar todas las combinacionesfor (i = 0; i < 4; i++)
Bucle repeatRepetir patronesrepeat (10) #5 clk = ~clk;
Bucle foreverSeñales continuasforever #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;
end

Mé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;
end

Esto prueba: 00, 01, 10, 11.

Método 3: Bucle de repetición

Útil para repetir el mismo estímulo muchas veces.

initial begin
  a = 0; b = 1;
  repeat (10) begin
    #10 a = ~a;
  end
  $finish;
end

Método 4: Bucle infinito

Útil para señales continuas, como los relojes.

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Reglas importantes

ReglaExplicación
Usa retrasos entre las asignaciones de estímulos#10 permite que el DUT responda
Usa reg para las señales de estímuloPorque cambian con el tiempo
Añade $finish al finalPara detener la simulación
challenge icon

Desafío

Se te proporciona un módulo de puerta OR. Tu tarea es añadir el estímulo que falta y las instrucciones $display para imprimir los resultados.

Qué hacer:

Añade estímulos para probar las cuatro combinaciones de entrada (00, 01, 10, 11):

  1. En cada línea, establece los valores de x y y
  2. Añade #10 para indicar un retraso
  3. Añade $display para imprimir el resultado

La instrucción <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
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