Menu
Coddy logo textTech

What Is A Testbench

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

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

Зачем нужен testbench?

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

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

Testbench и модуль проектирования

 Модуль проектированияTestbench
НазначениеРеализует аппаратное обеспечениеТестирует модуль проектирования
Имеет порты?Да (inputs и outputs)Нет (самодостаточный)
Синтезируемый?ДаНет (только simulation)

Простой пример testbench

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 используется для signals, которые изменяются (inputs DUT)
  • wire используется для signals из DUT (outputs)
  • $finish завершает simulation

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

challenge icon

Задание

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

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

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

  1. Объявите reg для inputs a и b
  2. Объявите wire для output c
  3. Выполните Instantiate and_gate с именем dut и подключите ports

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

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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog