Menu
Coddy logo textTech

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 для остановкиИначе симуляция может выполняться бесконечно
challenge icon

Задание

Добавьте недостающие инструкции $display и $monitor в этот тестбенч.

Что нужно сделать:

  1. Добавьте $display для вывода заголовка: "Testing OR Gate"
  2. Добавьте $monitor для вывода времени, x, y и z при каждом изменении любого сигнала. Формат: "Time %0t: x=%b, y=%b, z=%b"
  3. Добавьте $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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы