Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

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

  1. Tutorial Verilog
  2. Concatenação Verilog
  3. Atribuições Verilog
  4. Verilog Blocking &Non-Blocking
  5. Funções Verilog
  6. Tarefa Verilog
  7. Compilação condicional Verilog `ifdef
  8. Escopo de Referência Hierárquica Verilog
  9. Gerador de Relógio Verilog
  10. Tarefas de Exibição Verilog