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, 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
ObjetivoImplementa o hardwareTesta o módulo de design
Possui portas?Sim (entradas e saídas)Não (autocontido)
Sintetizável?SimNã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
endmodule

Pontos 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)
  • $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 seguintes.

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

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 reg para sinais acionados em blocos initial (entradas para o DUT)
  • Use wire para sinais vindos do DUT (saídas)
  • $finish encerra 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
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