Menu
Coddy logo textTech

Display y Monitor

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 75 de 90.

$display y $monitor son tareas del sistema utilizadas para imprimir información de su simulación. Le ayudan a ver qué está sucediendo dentro de su diseño.

$display

$display imprime un mensaje una vez en el momento en que se ejecuta.

Sintaxis:

$display("message", variables);

Ejemplo:

initial begin
  $display("Simulation started");
  #10;
  $display("Time 10");
  #10;
  $display("Time 20");
end

Salida:

Simulation started
Time 10
Time 20

$monitor

$monitor imprime un mensaje automáticamente cada vez que cualquiera de sus variables cambia.

Sintaxis:

$monitor("message", variables);

Ejemplo:

initial begin
  a = 0; b = 0;
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
  #10 a = 0;
end

Salida:

Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1

$display vs $monitor

 $display$monitor
Cuándo se imprimeUna vez al ejecutarseCada vez que cambia una variable
Cuántas vecesTantas veces como se llameContinuamente (hasta que se cambie)
Uso paraEncabezados, mensajes de pruebaSeguimiento de señales cambiantes

Especificadores de formato comunes

EspecificadorSignificadoEjemplo
%bBinario$display("%b", a);
%dDecimal$display("%d", count);
%hHexadecimal$display("%h", data);
%tTiempo$display("%t", $time);
%0tTiempo (sin espacios)$display("%0t", $time);
%sCadena$display("%s", "Hello");

Reglas importantes

ReglaExplicación
$display imprime una vezBueno para encabezados y resultados finales
$monitor imprime al cambiarBueno para observar señales
Solo un $monitor activoEl último anula al anterior
Usa $finish para detenerDe lo contrario, la simulación puede ejecutarse indefinidamente
challenge icon

Desafío

Agrega las sentencias $display y $monitor que faltan en este banco de pruebas (testbench).

Qué hacer:

  1. Agrega $display para imprimir un encabezado: "Testing OR Gate"
  2. Agrega $monitor para imprimir el tiempo, x, y, y z cada vez que cambie cualquier señal. Formato: "Time %0t: x=%b, y=%b, z=%b"
  3. Agrega $display al final para imprimir "Test complete"

Hoja de referencia

$display imprime una vez cuando se ejecuta; $monitor imprime automáticamente cada vez que cualquiera de sus variables cambia.

$display("message", variables);
$monitor("message", variables);

Ejemplo:

initial begin
  $display("Simulation started");
  $monitor("Time %0t: a=%b, b=%b", $time, a, b);
  #10 a = 1;
  #10 b = 1;
end

Especificadores de formato comunes:

  • %b — Binario
  • %d — Decimal
  • %h — Hexadecimal
  • %t / %0t — Tiempo (con/sin relleno)
  • %s — Cadena

Reglas clave:

  • Solo un $monitor está activo a la vez — el último anula a los anteriores.
  • Usa $finish para detener la simulación.

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
    // TODO: Agregar encabezado $display "Testing OR Gate"
    
    
    // TODO: Agregar $monitor para rastrear tiempo, x, y, z
    // Formato: "Time %0t: x=%b, y=%b, z=%b"
    
    
    // Aplicar estímulo
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    // TODO: Agregar $display "Test complete"
    
    
    $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