Menu
CoddyTech

Отображение и мониторинг

Часть раздела Основы путешествия по 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"

Попробуйте сами

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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog