Вывод в stdout

$display(), $write()

Используются для отображения в консоли симулятора значения переменных, строк или выражений. Исполняются сразу, как дошло исполнение до них. Строка формата, задаваемая первым аргументом, работает как в языке C.

$display всегда переходит на новую строку после печати. Поэтому вызов без параметров – это печать пустой строки.

$write не переходит на новую строку после печати.

Пример

module display_write_tb;
  reg [7:0] a, b;

  initial begin
      a = 8'd4;
      b = 8'd5;
      $write("Vars: ");
      $display("a = %0d; b = %0d", a, b);
  end
endmodule

Результат исполнения

Vars: a = 4; b = 5

$strobe()

Выводит текст после выполнения всех событий моделирования на текущем временном шаге, в отличие от $display() и $write(). Новая строка автоматически добавляется к тексту. Имеет формат, аналогичный формату $display.

Пример

module strobe_tb;
    reg [7:0] a, b;
  initial begin
    a = 8'h2D; b = 8'h2D;
    #10; b <= a + 1;           
    $display("[$display] Time [%0t]: a=0x%0h b=0x%0h", $time, a, b);
    $strobe ("[$strobe]  Time [%0t]: a=0x%0h b=0x%0h", $time, a, b);
    #1;
    $display("[$display] Time [%0t]: a=0x%0h b=0x%0h", $time, a, b);
    $strobe ("[$strobe]  Time [%0t]: a=0x%0h b=0x%0h", $time, a, b);
  end
endmodule

Результат исполнения

[$display] Time [10]: a=0x2d b=0x2d
[$strobe]  Time [10]: a=0x2d b=0x2e
[$display] Time [11]: a=0x2d b=0x2e
[$strobe]  Time [11]: a=0x2d b=0x2e

Стоит отметить, что $strobe показывает окончательное обновленное значение переменной b в момент времени 10, которое равно 0x2E, а $display отображает текущее значение своих аргументов внутри такта.

Last updated