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 Sistema | Propósito |
|---|---|
$time | Retorna o tempo de simulação atual |
$finish | Finaliza a simulação |
$stop | Pausa a simulação |
$random | Gera 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
endmoduleDesafio
Adicione as tarefas de sistema que faltam a este testbench.
O que fazer:
- Adicione
$displaypara imprimir o tempo atual no início - Adicione
$displaypara imprimir o tempo atual no fim - Adicione
$finishpara encerrar a simulação
Folha de consulta
Tarefas de sistema em Verilog começam com $ e executam utilitários de simulação:
| Tarefa de Sistema | Propósito |
|---|---|
$time | Retorna o tempo de simulação atual |
$finish | Encerra a simulação |
$stop | Pausa a simulação |
$random | Gera 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órioExperimente 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
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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
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ão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores14Fundamentos de Testbench
O que é um TestbenchCriando EstímulosDisplay e MonitorDumpfile e DumpvarsUsando Tarefas de SistemaRecapitulação - Testbench Completo3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo