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 especial do Verilog usado para testar outro módulo. Ele fornece entradas ao seu projeto e verifica se as saídas estão corretas.

Por que precisamos de um testbench?

Quando você cria 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 DesignTestbench
FinalidadeImplementa hardwareTesta o módulo de design
Possui portas?Sim (entradas e saídas)Não (autocontido)
Sintetizável?SimNão (somente 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
  

  // Esta é a instanciação de 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 principais

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

Abordaremos a criação de estímulos, a exibição de resultados e outros recursos de testbench nas lições a seguir.

challenge icon

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:

  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

Pratique por conta própria: Compilador de Verilog online