Display e Monitor
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 75 de 90.
$display e $monitor são tarefas de sistema usadas para imprimir informações da sua simulação. Elas ajudam você a ver o que está acontecendo dentro do seu projeto.
$display
O $display imprime uma mensagem uma única vez no momento em que é executado.
Sintaxe:
$display("message", variables);Exemplo:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endSaída:
Simulation started
Time 10
Time 20$monitor
O $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;
endSaí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 imprime | Uma vez quando executado | Sempre que uma variável muda |
| Quantas vezes | Tantas vezes quanto for chamado | Continuamente (até ser alterado) |
| Usado para | Cabeçalhos, mensagens de teste | Rastreamento de sinais em mudança |
Especificadores de Formato Comuns
| Especificador | Significado | Exemplo |
|---|---|---|
%b | Binário | $display("%b", a); |
%d | Decimal | $display("%d", count); |
%h | Hexadecimal | $display("%h", data); |
%t | Tempo | $display("%t", $time); |
%0t | Tempo (sem espaços) | $display("%0t", $time); |
%s | String | $display("%s", "Hello"); |
Regras Importantes
| Regra | Explicação |
|---|---|
$display imprime uma vez | Bom para cabeçalhos e resultados finais |
$monitor imprime na mudança | Bom para observar sinais |
Apenas um $monitor ativo | O último substitui o anterior |
Use $finish para parar | Caso contrário, a simulação pode rodar para sempre |
Desafio
Adicione as instruções $display e $monitor que faltam neste testbench.
O que fazer:
- Adicione
$displaypara imprimir um cabeçalho: "Testing OR Gate" - Adicione
$monitorpara imprimir o tempo, x, y e z sempre que qualquer sinal mudar. Formato: "Time %0t: x=%b, y=%b, z=%b" - Adicione
$displayao final para imprimir "Test complete"
Folha de consulta
$display imprime uma vez quando executado; $monitor imprime automaticamente sempre que qualquer uma de suas variáveis muda.
$display("message", variables);
$monitor("message", variables);Exemplo:
initial begin
$display("Simulation started");
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
endEspecificadores de formato comuns:
%b— Binário%d— Decimal%h— Hexadecimal%t/%0t— Tempo (com/sem preenchimento)%s— String
Regras principais:
- Apenas um
$monitorfica ativo por vez — o último sobrescreve os anteriores. - Use
$finishpara parar a simulação.
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: Adicionar cabeçalho $display "Testing OR Gate"
// TODO: Adicionar $monitor para monitorar tempo, x, y, z
// Formato: "Time %0t: x=%b, y=%b, z=%b"
// Aplicar estímulos
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: Adicionar $display "Test complete"
$finish;
end
endmoduleEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores14Fundamentos de Testbench
O que é um TestbenchCriando EstímulosDisplay e MonitorDumpfile e DumpvarsUsando Tarefas de SistemaRecapitulação - Testbench Completo3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo