Menu
Coddy logo textTech

Usando Tarefas de Sistema

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 77 de 90.

Tarefas de sistema são comandos integrados no Verilog que começam com um cifrão ($). Elas realizam funções úteis como imprimir mensagens, encerrar a simulação e criar arquivos de forma de onda.

Já cobrimos $display, $monitor, $dumpfile e $dumpvars em lições anteriores. Nesta lição, veremos tarefas de sistema adicionais que são úteis em testbenches.

Tarefas de Sistema Adicionais

Tarefa de SistemaPropósito
$timeRetorna o tempo de simulação atual
$finishFinaliza a simulação
$stopPausa a simulação
$randomGera um número aleatório

$time

Retorna o tempo de simulação atual. Útil para rastrear quando os eventos ocorrem.

$display("Current time is %0t", $time);

$finish

Encerra a simulação. Sempre use ao final do seu testbench.

$finish;

$stop

Pausa a simulação. Pode ser retomada com um comando do simulador. Útil para depuração.

$stop;

$random

Gera um número aleatório. Útil para criar estímulos de teste aleatórios.

reg [7:0] rand_value;
rand_value = $random;

Exemplo Usando Múltiplas Tarefas de Sistema

module system_tasks_demo;
  reg [7:0] data;
  integer i;
  
  initial begin
    $display("Simulation started at time %0t", $time);
    
    for (i = 0; i < 5; i = i + 1) begin
      data = $random;
      $display("Random value %d: %b", i, data);
    end
    
    $stop;
    #10 $display("Resumed at time %0t", $time);
    
    $display("Simulation finished at time %0t", $time);
    $finish;
  end
endmodule
challenge icon

Desafio

Adicione as tarefas de sistema que faltam a este testbench.

O que fazer:

  1. Adicione $display para imprimir o tempo atual no início
  2. Adicione $display para imprimir o tempo atual no fim
  3. Adicione $finish para encerrar a simulação

Folha de consulta

Tarefas de sistema em Verilog começam com $ e executam utilitários de simulação:

Tarefa de SistemaPropósito
$timeRetorna o tempo de simulação atual
$finishEncerra a simulação
$stopPausa a simulação
$randomGera um número aleatório
$display("Time: %0t", $time); // imprime o tempo atual
$finish;                       // encerra a simulação
$stop;                         // pausa a simulação

reg [7:0] rand_value;
rand_value = $random;          // atribui um número aleatório

Experimente você mesmo

module and_gate (
  input a,
  input b,
  output c
);
  assign c = a & b;
endmodule

module testbench;
  reg a, b;
  wire c;
  
  and_gate dut (
    .a(a),
    .b(b),
    .c(c)
  );

  initial begin
    // TODO: Adicionar $display com o tempo atual no início
    // Formato: "Start time: %0t"
    
    
    $monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    // TODO: Adicionar $display com o tempo atual no fim
    // Formato: "End time: %0t"
    
    
    // TODO: Adicionar $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