O que é um Testbench
Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 73 de 90.
Um testbench é um módulo Verilog especial usado para testar outro módulo. Ele fornece entradas para o seu projeto e verifica se as saídas estão corretas.
Por que precisamos de um Testbench?
Quando você constrói um módulo, precisa garantir que ele funcione corretamente. Um testbench permite que você:
- Aplique diferentes valores de entrada ao seu módulo
- Observe as saídas
- Verifique se as saídas correspondem ao que você espera
- Faça isso automaticamente sem testes manuais
Testbench vs Módulo de Design
| Módulo de Design | Testbench | |
|---|---|---|
| Objetivo | Implementa o hardware | Testa o módulo de design |
| Possui portas? | Sim (entradas e saídas) | Não (autocontido) |
| Sintetizável? | Sim | Não (apenas simulação) |
Exemplo Simples de Testbench
module testbench; // Sem portas!
// As entradas e saídas vêm do módulo que estamos testando (o DUT).
reg a, b; // reg para entradas
wire c; // wire para saída
// Isso é a instanciação do módulo — cria uma cópia do módulo and_gate e o nomeia como dut
and_gate dut ( // Instanciar DUT
.a(a),
.b(b),
.c(c)
);
// Este é um bloco initial que aplica valores de teste às entradas do módulo que está sendo testado.
initial begin // Aplicar valores de teste
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
$finish;
end
endmodulePontos Principais
- O Testbench não possui portas
regé usado para sinais que mudam (entradas para o DUT)wireé usado para sinais do DUT (saídas)
- O módulo sendo testado é chamado de DUT (Design Under Test)
$finishencerra a simulação
Abordaremos a criação de estímulos, a exibição de resultados e outros recursos de testbench nas lições seguintes.
Desafio
Você recebeu um módulo de porta AND. Sua tarefa é adicionar as partes que faltam ao seu testbench.
O que fazer:
Adicione as seguintes partes ao testbench:
- Declare
regpara as entradasaeb - Declare
wirepara a saídac - Instancie
and_gatecom o nomedute conecte as portas
Folha de consulta
Um testbench é um módulo Verilog usado para testar outro módulo (o DUT - Design Under Test). Ele não possui portas e é destinado apenas para simulação.
module testbench; // No ports!
reg a, b; // reg for inputs (signals that change)
wire c; // wire for DUT outputs
and_gate dut ( // Instantiate DUT
.a(a),
.b(b),
.c(c)
);
initial begin // Apply test values
a = 0; b = 0; #10;
a = 1; b = 1; #10;
$finish; // End simulation
end
endmodule- Use
regpara sinais acionados em blocosinitial(entradas para o DUT) - Use
wirepara sinais vindos do DUT (saídas) $finishencerra a simulação
Experimente você mesmo
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
// Tarefa 1: Declarar reg para as entradas a e b
// Tarefa 2: Declarar wire para a saída c
// Tarefa 3: Instanciar and_gate com o nome dut
// Conectar .a(a), .b(b), .c(c)
initial begin
a = 0; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 0; b = 1; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 0; #10 $display("%d & %d = %d", a, b, c);
a = 1; b = 1; #10 $display("%d & %d = %d", a, b, c);
$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