Что такое тестбенч
Часть раздела Основы путешествия по 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.
Задание
Вам дан модуль логического элемента AND. Ваша задача — добавить недостающие части в его testbench.
Что нужно сделать:
Добавьте следующие части в testbench:
- Объявите
regдля inputsaиb - Объявите
wireдля outputc - Выполните 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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов14Основы тестбенча
Что такое тестбенчСоздание стимуловОтображение и мониторингDumpfile и DumpvarsИспользование системных задачПовторение — полный тестбенч3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog