Menu
CoddyTech

Visualización y monitorización

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

$display y $monitor son tareas del sistema que se usan para imprimir información de tu simulación. Te ayudan a ver qué sucede dentro de tu diseño.

$display

$display imprime un mensaje una sola 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 cambia cualquiera de sus variables.

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 imprimeUna vez cuando se ejecutaCada vez que cambia una variable
Cuántas vecesTantas veces como lo llamesContinuamente (hasta que cambie)
Se usa 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 vezIdeal para encabezados y resultados finales
$monitor imprime cuando hay cambiosIdeal para observar señales
Solo puede haber un $monitor activoEl último reemplaza al anterior
Usa $finish para detener la simulaciónDe lo contrario, la simulación puede ejecutarse indefinidamente
challenge icon

Desafío

Añade las instrucciones $display y $monitor que faltan a este banco de pruebas.

Qué hacer:

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

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: Añade el encabezado $display "Testing OR Gate"
    
    
    // TODO: Añade $monitor para hacer seguimiento del tiempo, x, y, z
    // Formato: "Time %0t: x=%b, y=%b, z=%b"
    
    
    // Aplica los estímulos
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    // TODO: Añade $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

Practica por tu cuenta: Compilador de Verilog online