Дисплей против строба против монитора в Verilog?

В чем разница между дисплеем, стробом и монитором в Verilog?

2 ответа

Решение

Я буду хорош и суммирую LRM (справочное руководство по языку), но вы должны прочитать его. Все в IEEE Std 1800-2012 § 21.2 Отображение системных задач (Технически SystemVerilog, но эти функции идентичны.)

  • $display: напечатать непосредственные значения
    • § 21.2.1 Задачи отображения и записи
  • $strobe: печать значений в конце текущего временного шага
    • § 21.2.2 Строб-мониторинг
  • $monitor: вывести значения в конце текущего временного шага, если какие-либо значения изменились. $monitor может быть вызван только один раз; Последовательный вызов отменит предыдущий.
    • § 21.2.3 Непрерывный мониторинг
  • $write: такой же как $display но не заканчивается новой строкой (\n)
    • § 21.2.1 Задачи отображения и записи

Пример:

reg [3:0] a,b;
integer i;
initial begin
  $monitor("monitor a:%h b:%h @ %0t", a, b, $time);
  for(i=0; i<4; i=i+1) begin
    $strobe("strobe  a:%h b:%h @ %0t", a, b, $time);
    $display("display a:%h b:%h @ %0t", a, b, $time);
    case(i)
      0 : a = 4;
      1 : b = 1;
      2 : begin end // do nothing
      3 : {a,b} = 9;
    endcase
    $display("display a:%h b:%h @ %0t", a, b, $time);
    #1;
  end
end

Выходы: (обратите внимание на порядок печати, и этот монитор не отображается во время 2)

отобразить:x b:x @ 0
показать a:4 b:x @ 0
монитор а: 4 б: х @ 0
стробоскоп: 4 б: х @ 0
дисплей а: 4 б: х @ 1
дисплей а: 4 б: 1 @ 1
монитор а: 4 б: 1 @ 1
стробоскоп: 4 б: 1 @ 1
дисплей а: 4 б: 1 @ 2
дисплей а: 4 б: 1 @ 2
стробоскоп: 4 б: 1 @ 2
дисплей а: 4 б:1 @ 3
отобразить a:0 b:9 @ 3
монитор а: 0 б: 9 @ 3
стробоскоп: 0 b: 9 @ 3

Verilog/SystemVerilog содержит хорошо организованную очередь событий. Все операторы в каждой отметке времени выполняются в соответствии с этой очередью.

  • $ display выполняется в области ACTIVE, поэтому, если есть какое-либо неблокирующее назначение (которое выполняется в INACTIVE регионе), оно не будет отображаться в $ display.
  • $ write также выполняется в области ACTIVE, но для вставки другой строки требуется явный вызов символа новой строки (\n). Эта системная задача обычно используется, когда вы хотите отобразить многомерный массив, используя цикл for.
  • $ strobe выполняется в области MONITOR/POSTPONE, то есть в конце отметки времени. Следовательно, обновленное значение отображается как $ strobe.
  • $ monitor отображается каждый раз, когда изменяется один из его параметров отображения. Для симуляции должен использоваться только один монитор.

Посмотрите на это изображение: VERILOG EVENT REGIONS

Пример кода доступен по адресу: дисплей / стробоскоп / монитор

Надеюсь, этот код проясняет.

Другие вопросы по тегам