Tarefas de Exibição Verilog
As tarefas do sistema de exibição são usadas principalmente para exibir mensagens informativas e de depuração para rastrear o fluxo de simulação de arquivos de log e também ajuda a depurar mais rapidamente. Existem diferentes grupos de tarefas de exibição e formatos nos quais eles podem imprimir valores.
Exibir/gravar tarefas
Sintaxe
Ambos
$display
e $write
exibir argumentos na ordem em que aparecem na lista de argumentos.
$display(<list_of_arguments>);
$write(<list_of_arguments>);
$write
não acrescenta o caractere de nova linha
ao final de sua string, enquanto $display
faz e pode ser visto no exemplo mostrado abaixo. Exemplo
module tb;
initial begin
$display ("This ends with a new line ");
$write ("This does not,");
$write ("like this. To start new line, use newline char
");
$display ("This always start on a new line !");
end
endmodule
Registro de simulação ncsim> run This ends with a new line This does not,like this. To start new line, use newline char Hi there ! ncsim: *W,RNQUIE: Simulation is complete.
Estrobos Verilog
$strobe
imprime os valores finais das variáveis no final do passo de tempo delta atual e tem um formato semelhante como $display
.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1;
$display ("[$display] time=%0t a=0x%0h b=0x%0h", $time, a, b);
$strobe ("[$strobe] time=%0t a=0x%0h b=0x%0h", $time, a, b);
end
endmodule
Observe que
$strobe
mostra o valor final atualizado da variável b no tempo 10ns que é 0x2E e $display
pega isso apenas na próxima simulação delta em 11ns. Registro de simulação
ncsim> run [$display] time=10 a=0x2d b=0x2d [$strobe] time=10 a=0x2d b=0x2e [$display] time=11 a=0x2d b=0x2e [$strobe] time=11 a=0x2d b=0x2e ncsim: *W,RNQUIE: Simulation is complete. ncsim> exit
Monitores Contínuos Verilog
$monitor
ajuda a imprimir automaticamente valores de variáveis ou expressões sempre que a variável ou expressão em sua lista de argumentos for alterada. Ele atinge um efeito semelhante ao chamar $display
após cada vez que qualquer um de seus argumentos é atualizado.
module tb;
initial begin
reg [7:0] a;
reg [7:0] b;
a = 8'h2D;
b = 8'h2D;
#10; // Wait till simulation reaches 10ns
b <= a + 1; // Assign a+1 value to b
$monitor ("[$monitor] time=%0t a=0x%0h b=0x%0h", $time, a, b);
#1 b <= 8'hA4;
#5 b <= a - 8'h33;
#10 b <= 8'h1;
end
endmodule
Observe que
$monitor
é como uma tarefa que é gerada para ser executada em segundo plano no thread principal que monitora e exibe as alterações de valor de suas variáveis de argumento. Um novo $monitor
tarefa pode ser emitida qualquer número de vezes durante a simulação. Registro de simulação
ncsim> run [$monitor] time=10 a=0x2d b=0x2e [$monitor] time=11 a=0x2d b=0xa4 [$monitor] time=16 a=0x2d b=0xfa [$monitor] time=26 a=0x2d b=0x1 ncsim: *W,RNQUIE: Simulation is complete.
Especificadores de formato Verilog
Para imprimir variáveis dentro de funções de exibição, especificadores de formato apropriados devem ser dados para cada variável.
Argumento | Descrição |
---|---|
%h, %H | Exibir em formato hexadecimal |
%d, %D | Exibir em formato decimal |
%b, %B | Exibir em formato binário |
%m, %M | Exibir nome hierárquico |
%s, %S | Exibir como uma string |
%t, %T | Exibir no formato de hora |
%f, %F | Exibir 'real' em formato decimal |
%e, %E | Exibir 'real' em formato exponencial |
module tb;
initial begin
reg [7:0] a;
reg [39:0] str = "Hello";
time cur_time;
real float_pt;
a = 8'h0E;
float_pt = 3.142;
$display ("a = %h", a);
$display ("a = %d", a);
$display ("a = %b", a);
$display ("str = %s", str);
#200 cur_time = $time;
$display ("time = %t", cur_time);
$display ("float_pt = %f", float_pt);
$display ("float_pt = %e", float_pt);
end
endmodule
Registro de simulação ncsim> run a = 0e a = 14 a = 00001110 str = Hello time = 200 float_pt = 3.142000 float_pt = 3.142000e+00 ncsim: *W,RNQUIE: Simulation is complete.
Sequências de escape Verilog
Alguns caracteres são considerados especiais, pois representam outros fins de exibição, como nova linha, guias e feeds de formulário. Para imprimir esses caracteres especiais , cada ocorrência de tais caracteres deve ser escapada .
Argumento | Descrição |
---|---|
Caractere de nova linha | |
Caractere de tabulação | |
O personagem | |
" | O caractere " |
%% | O caractere % |
module tb;
initial begin
$write ("Newline character
");
$display ("Tab character stop");
$display ("Escaping " %%");
/*
// Compilation errors
$display ("Without escaping "); // ERROR : Unterminated string
$display ("Without escaping ""); // ERROR : Unterminated string
*/
end
endmodule
Registro de simulação ncsim> run Newline character Tab character stop Escaping " % ncsim: *W,RNQUIE: Simulation is complete.
Verilog