Display и Monitor
Часть раздела Основы путешествия по 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"
Шпаргалка
$display выводит сообщение один раз при выполнении; $monitor выводит сообщение автоматически каждый раз, когда изменяется любая из его переменных.
$display("message", variables);
$monitor("message", variables);Пример:
initial begin
$display("Simulation started");
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
endОбщие спецификаторы формата:
%b— Двоичный (Binary)%d— Десятичный (Decimal)%h— Шестнадцатеричный (Hexadecimal)%t/%0t— Время (с отступами / без отступов)%s— Строка (String)
Основные правила:
- Одновременно может быть активен только один
$monitor— последний переопределяет предыдущие. - Используйте
$finishдля остановки симуляции.
Попробуйте сами
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Введение
Что такое 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