Menu
Coddy logo textTech

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, você 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 (outputs) correspondem ao que você espera
  • Faça isso automaticamente sem testes manuais

Testbench vs Módulo de Design

 Módulo de DesignTestbench
FinalidadeImplementa hardwareTesta o módulo de design
Possui ports?Sim (inputs e outputs)Não (autocontido)
Sintetizável?SimNão (apenas simulation)

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
  

  // Esta é a instanciação do módulo — ela cria uma cópia do módulo and_gate e a nomeia 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 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
endmodule

Pontos Chave

  • O testbench não possui nenhuma porta
  • reg é usado para sinais que mudam (entradas para o DUT)
  • wire é usado para sinais vindos do DUT (saídas)
  • O módulo sendo testado é chamado de DUT (Design Under Test)
  • $finish encerra a simulação

Coabriremos a criação de estímulos, a exibição de resultados e outros recursos de testbench nas aulas a seguir.

challenge icon

Desafio

Você recebeu um módulo de porta AND. Sua tarefa é adicionar as partes que faltam em seu testbench.

O que fazer:

Adicione as seguintes partes ao testbench:

  1. Declare reg para as entradas a e b
  2. Declare wire para a saída c
  3. Instancie and_gate com o nome dut e conecte as portas

Experimente você mesmo

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

module testbench;
  
  // Tarefa 1: Declare reg para as entradas a e b
  
  
  // Tarefa 2: Declare wire para a saída c
  

  // Tarefa 3: Instancie and_gate com o nome dut
  // Conecte .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
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