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 desde 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 imprimeUna vez al ejecutarseCada vez que cambia una variable
Cuántas vecesTantas veces como se llameContinuamente (hasta que cambie)
Usar paraEncabezados, mensajes de pruebaRastrear señales que cambian

Especificadores de formato comunes

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

Reglas importantes

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

Desafío

Agrega las sentencias $display y $monitor que faltan a este banco de pruebas.

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"

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 encabezado $display "Testing OR Gate"
    
    
    // TODO: Añade $monitor para rastrear time, 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: 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