Menu
Coddy logo textTech

Display и Monitor

Часть раздела Основы путешествия по Verilog на Coddy — урок 75 из 90.

$display и $monitor — это системные задачи, используемые для вывода информации из вашей симуляции. Они помогают увидеть, что происходит внутри вашего проекта.

$display

$display выводит message один раз в момент своего выполнения.

Синтаксис:

$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
Когда выводит значениеОдин раз при выполненииКаждый раз при изменении переменной
Сколько разСтолько раз, сколько вы его вызываетеНепрерывно (при каждом изменении)
Используется дляЗаголовков, тестовых сообщенийОтслеживания меняющихся сигналов

Common Format Specifiers

SpecifierMeaningExample
%bBinary$display("%b", a);
%dDecimal$display("%d", count);
%hHexadecimal$display("%h", data);
%tTime$display("%t", $time);
%0tTime (no spaces)$display("%0t", $time);
%sString$display("%s", "Hello");

Важные правила

ПравилоОбъяснение
$display выводит текст один разПодходит для заголовков и итоговых результатов
$monitor выводит текст при измененииПодходит для отслеживания сигналов
Активен только один $monitorПоследний переопределяет предыдущие
Используйте $finish для остановкиИначе симуляция может выполняться бесконечно
challenge icon

Задание

Добавьте пропущенные операторы $display и $monitor в этот testbench.

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

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

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

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