Что такое 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завершает симуляцию
Мы рассмотрим создание стимулов, отображение результатов и другие возможности тестбенчей в следующих уроках.
Задание
Вам дан модуль логического элемента И (AND gate). Ваша задача — добавить недостающие части в его тестбенч (testbench).
Что нужно сделать:
Добавьте следующие части в тестбенч:
- Объявите
regдля входовaиb - Объявите
wireдля выходаc - Создайте экземпляр
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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам14Основы Testbench
Что такое TestbenchСоздание стимуловDisplay и MonitorDumpfile и DumpvarsИспользование системных задачИтоги: полный Testbench3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial