Menu
Coddy logo textTech

Using System Tasks

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

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

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

Tarefas adicionais do sistema

Tarefa do sistemaFinalidade
$timeRetorna o tempo atual da simulação
$finishEncerra a simulação
$stopPausa a simulação
$randomGera um número aleatório

$time

Retorna o tempo atual da simulação. Útil para acompanhar quando os eventos acontecem.

$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 várias tarefas do 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 ausentes 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 final
  3. Adicione $finish para encerrar a simulação

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: Adicione $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: Adicione $display com o tempo atual no final
    // Formato: "End time: %0t"
    
    
    // TODO: Adicione $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