Menu
Coddy logo textTech

Что такое Testbench

Часть раздела Основы путешествия по Verilog на Coddy — урок 73 из 90.

Тестбенч (testbench) — это специальный модуль Verilog, используемый для тестирования другого модуля. Он подает входные сигналы на ваше устройство и проверяет, являются ли выходные сигналы правильными.

Зачем нам нужен тестбенч?

Когда вы создаете модуль, вам нужно убедиться, что он работает правильно. Тестбенч позволяет вам:

  • Подавать различные входные значения на ваш модуль
  • Наблюдать за выходными сигналами
  • Проверьте, соответствуют ли выходные данные вашим ожиданиям
  • Делайте это автоматически без ручного тестирования

Тестбенч против проектируемого модуля

 Проектируемый модульТестбенч
НазначениеРеализует аппаратную частьТестирует проектируемый модуль
Есть порты?Да (входы и выходы)Нет (автономен)
Синтезируемый?ДаНет (только для симуляции)

Пример простого тестбенча

module testbench;              // Нет портов!

  // Входы и выходы поступают из модуля, который мы тестируем (DUT).
  reg a, b;                    // reg для входов
  wire c;                      // wire для выхода
  

  // Это инстанцирование модуля — оно создает копию модуля and_gate и называет ее dut
  and_gate dut (               // Инстанцирование DUT
    .a(a),
    .b(b),
    .c(c)
  );

  // Это блок initial, который подает тестовые значения на входы тестируемого модуля.
  initial begin                // Подача тестовых значений
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    $finish;
  end
endmodule

Ключевые моменты

  • Тестбенч (Testbench) не имеет портов
  • reg используется для сигналов, которые изменяются (входы для DUT)
  • wire используется для сигналов от DUT (выходы)
  • Тестируемый модуль называется DUT (Design Under Test)
  • $finish завершает симуляцию

Мы рассмотрим создание стимулов, отображение результатов и другие возможности тестбенчей в следующих уроках.

challenge icon

Задание

Вам дан модуль логического элемента И (AND gate). Ваша задача — добавить недостающие части в его тестбенч (testbench).

Что нужно сделать:

Добавьте следующие части в тестбенч:

  1. Объявите reg для входов a и b
  2. Объявите wire для выхода c
  3. Создайте экземпляр and_gate с именем dut и подключите порты

Шпаргалка

Testbench (тестовый стенд) — это модуль Verilog, используемый для тестирования другого модуля (DUT — Design Under Test, тестируемое устройство). Он не имеет портов и предназначен только для симуляции.

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
  • Используйте reg для сигналов, управляемых в блоках initial (входы для DUT)
  • Используйте wire для сигналов, поступающих из DUT (выходы)
  • $finish завершает симуляцию

Попробуйте сами

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

module testbench;
  
  // Задача 1: Объявите reg для входов a и b
  
  
  // Задача 2: Объявите wire для выхода c
  

  // Задача 3: Создайте экземпляр and_gate с именем dut
  // Подключите .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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы