Menu
CoddyTech

Exibição e Monitoramento

Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 75 de 90.

$display e $monitor são tarefas do sistema usadas para exibir informações da sua simulação. Elas ajudam você a ver o que está acontecendo dentro do seu projeto.

$display

$display imprime uma mensagem uma vez no momento em que é executado.

Sintaxe:

$display("message", variables);

Exemplo:

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

Saída:

Simulation started
Time 10
Time 20

$monitor

$monitor imprime uma mensagem automaticamente sempre que qualquer uma de suas variáveis mudar.

Sintaxe:

$monitor("message", variables);

Exemplo:

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

Saída:

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
Quando imprimeUma vez quando executadoToda vez que uma variável muda
Quantas vezesQuantas vezes você chamarContinuamente (até mudar)
Usado paraCabeçalhos, mensagens de testeAcompanhar sinais que mudam

Especificadores de formato comuns

EspecificadorSignificadoExemplo
%bBinário$display("%b", a);
%dDecimal$display("%d", count);
%hHexadecimal$display("%h", data);
%tTempo$display("%t", $time);
%0tTempo (sem espaços)$display("%0t", $time);
%sString$display("%s", "Hello");

Regras importantes

RegraExplicação
$display imprime uma vezBom para cabeçalhos e resultados finais
$monitor imprime quando há uma alteraçãoBom para observar sinais
Apenas um $monitor ativoO último substitui o anterior
Use $finish para pararCaso contrário, a simulação poderá ser executada para sempre
challenge icon

Desafio

Adicione as instruções $display e $monitor que estão faltando neste testbench.

O que fazer:

  1. Adicione $display para imprimir um cabeçalho: "Testing OR Gate"
  2. Adicione $monitor para imprimir o tempo, x, y e z sempre que qualquer sinal mudar. Formato: "Time %0t: x=%b, y=%b, z=%b"
  3. Adicione $display no final para imprimir "Test complete"

Experimente você mesmo

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: Adicione o cabeçalho com $display "Testing OR Gate"
    
    
    // TODO: Adicione $monitor para acompanhar o tempo, x, y, z
    // Formato: "Time %0t: x=%b, y=%b, z=%b"
    
    
    // Aplique os estímulos
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    // TODO: Adicione $display "Test complete"
    
    
    $finish;
  end
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos

Pratique por conta própria: Compilador de Verilog online