Отображение и мониторинг
Часть раздела Основы путешествия по 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 vs $monitor
| $display | $monitor | |
|---|---|---|
| Когда выводит | Один раз при выполнении | Каждый раз при изменении переменной |
| Сколько раз | Столько раз, сколько вы его вызываете | Непрерывно (до изменения) |
| Используется для | Заголовков, test-сообщений | Отслеживания изменяющихся сигналов |
Распространённые спецификаторы формата
| Спецификатор | Значение | Пример |
|---|---|---|
%b | Binary | $display("%b", a); |
%d | Десятичное число | $display("%d", count); |
%h | Шестнадцатеричное число | $display("%h", data); |
%t | Time | $display("%t", $time); |
%0t | Time (без пробелов) | $display("%0t", $time); |
%s | Строка | $display("%s", "Hello"); |
Важные правила
| Правило | Пояснение |
|---|---|
$display выводит один раз | Подходит для заголовков и итоговых результатов |
$monitor выводит данные при изменении | Подходит для отслеживания сигналов |
Активным может быть только один $monitor | Последний заменяет предыдущий |
Используй $finish, чтобы остановить выполнение | Иначе моделирование может выполняться бесконечно |
Задание
Add пропущенные операторы $display и $monitor в этот testbench.
Что нужно сделать:
- Add
$display, чтобы вывести заголовок: "Testing OR Gate" - Add
$monitor, чтобы выводить time, x, y и z при каждом изменении любого сигнала. Формат: "Time %0t: x=%b, y=%b, z=%b" - Add
$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 для отслеживания time, 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