Использование системных задач
Часть раздела Основы путешествия по Verilog на Coddy. Урок 77 из 90.
Системные задачи — это встроенные команды в Verilog, которые начинаются со знака доллара ($). Они выполняют полезные функции, такие как вывод сообщений, завершение simulation и создание файлов сигналов.
В предыдущих уроках мы уже рассмотрели $display, $monitor, $dumpfile и $dumpvars. В этом уроке мы рассмотрим дополнительные системные задачи, полезные в testbench.
Дополнительные системные задачи
| Системная задача | Назначение |
|---|---|
$time | Возвратить текущее время simulation |
$finish | Завершить simulation |
$stop | Приостановить simulation |
$random | Сгенерировать случайное число |
$time
Возвращает текущее время Simulation. Полезно для отслеживания того, когда происходят события.
$display("Current time is %0t", $time);$finish
Завершает simulation. Всегда используйте в конце своего testbench.
$finish;$stop
Приостанавливает simulation. Может быть возобновлена с помощью команды симулятора. Полезно для отладки.
$stop;$random
Генерирует случайное число. Полезно для создания случайного тестового воздействия.
reg [7:0] rand_value;
rand_value = $random;Пример использования нескольких системных задач
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleЗадание
Add the missing system tasks to this testbench.
Что нужно сделать:
- Add
$display, чтобы вывести current time в начале - Add
$display, чтобы вывести current time в конце - Add
$finish, чтобы завершить simulation
Попробуйте сами
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: Добавить $display с текущим временем в начале
// Формат: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: Добавить $display с текущим временем в конце
// Формат: "End time: %0t"
// TODO: Добавить $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