Usando Tarefas do Sistema
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 sistema | Finalidade |
|---|---|
$time | Retorna o tempo atual da simulação |
$finish | Encerra a simulação |
$stop | Pausa a simulação |
$random | Gera 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 no 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
endmoduleDesafio
Adicione as tarefas de sistema ausentes a este testbench.
O que fazer:
- Adicione
$displaypara imprimir o tempo atual no início - Adicione
$displaypara imprimir o tempo atual no final - Adicione
$finishpara 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
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. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
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ões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores14Fundamentos de Testbench
O Que É um TestbenchCriando EstímulosExibição e MonitoramentoDumpfile e DumpvarsUsando Tarefas do SistemaRecapitulação — Testbench Completo3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um MóduloPratique por conta própria: Compilador de Verilog online