Отображение и мониторинг
Часть раздела Основы путешествия по Verilog на Coddy. Урок 75 из 90.
$display и $monitor — системные задачи, которые используются для вывода информации о симуляции. Они помогают увидеть, что происходит внутри вашего проекта.
$display
$display выводит сообщение один раз в момент выполнения.
Синтаксис:
$display("message", variables);Пример:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endВывод:
Simulation started
Time 10
Time 20$monitor
$monitor автоматически выводит сообщение каждый раз, когда изменяется одна из его переменных.
Синтаксис:
$monitor("message", variables);Пример:
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
endВывод:
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display и $monitor
| $display | $monitor | |
|---|---|---|
| Когда выводит | Один раз при выполнении | Каждый раз при изменении переменной |
| Сколько раз | Столько раз, сколько вы его вызовете | Постоянно (до изменения) |
| Для чего использовать | Заголовки, тестовые сообщения | Отслеживание изменяющихся сигналов |
Распространённые спецификаторы формата
| Спецификатор | Значение | Пример |
|---|---|---|
%b | Двоичный | $display("%b", a); |
%d | Десятичный | $display("%d", count); |
%h | Шестнадцатеричный | $display("%h", data); |
%t | Время | $display("%t", $time); |
%0t | Время (без пробелов) | $display("%0t", $time); |
%s | Строка | $display("%s", "Hello"); |
Важные правила
| Правило | Пояснение |
|---|---|
$display выводит один раз | Подходит для заголовков и итоговых результатов |
$monitor выводит при изменении | Подходит для отслеживания сигналов |
Активен только один $monitor | Последний заменяет предыдущий |
Используйте $finish, чтобы остановить выполнение | Иначе симуляция может выполняться бесконечно |
Задание
Добавь в этот тестовый стенд недостающие операторы $display и $monitor.
Что нужно сделать:
- Добавь
$display, чтобы вывести заголовок: "Testing OR Gate" - Добавь
$monitor, чтобы выводить время, x, y и z при каждом изменении любого сигнала. Формат: "Time %0t: x=%b, y=%b, z=%b" - В конце добавь
$display, чтобы вывести "Test complete"
Попробуйте сами
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
// TODO: Добавьте заголовок с помощью $display "Testing OR Gate"
// TODO: Добавьте $monitor для отслеживания времени, x, y, z
// Формат: "Time %0t: x=%b, y=%b, z=%b"
// Подайте входные сигналы
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: Добавьте $display "Test complete"
$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