Display And 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 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Аппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog