$ display vs $ strobe vs $ monitor в Verilog?

В чем разница между $ display vs $ strobe vs $ monitor в Verilog? Когда в очереди событий применяется каждый из них и как операторы взаимодействуют между собой? Может ли одно высказывание препятствовать другому?


person blitz    schedule 28.09.2015    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что нам не нужно читать руководство за вас. Пожалуйста, покажите то, что вы исследовали до сих пор, но все еще находите запутанным.   -  person dave_59    schedule 29.09.2015
comment
@ dave_59 Одной из причин строгих правил в SO является утверждение, что мы создаем базу данных вопросов и ответов. Этот вопрос кажется идеальным для такой базы данных. Фактически, я просто погуглил стробоскоп дисплея Verilog (пытаясь быть справедливым и подумав, что кто-то может на самом деле использовать Google), и Google предложил мне добавить монитор, и эта страница была второй.   -  person Matthew Taylor    schedule 11.04.2016
comment
@mathew taylor, Off-Topic не имеет никакого отношения к тому, хороший вопрос, плохой или идеальный. Вопрос в том, вписывается ли тема вопроса в рамки сообщества, в которое он был помещен.   -  person dave_59    schedule 12.04.2016
comment
@MatthewTaylor голосует за возобновление работы. У SO миллионы таких вопросов, и они экономят нам время.   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 29.04.2017
comment
Этот вопрос обсуждается на мета   -  person Cerbrus    schedule 07.02.2019
comment
Тот факт, что есть другие подобные вопросы, которые не закрыты на SO, не означает, что этот следует снова открыть. Этот вопрос, если он не по теме, не требует исследования и не содержит постановки проблемы. Это не следует повторно открывать.   -  person Cerbrus    schedule 07.02.2019


Ответы (2)


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

  • $display : print the immediate values
    • § 21.2.1 The display and write tasks
  • $strobe : print the values at the end of the current timestep
    • § 21.2.2 Strobed monitoring
  • $monitor : print the values at the end of the current timestep if any values changed. $monitor can only be called once; sequential call will override the previous.
    • § 21.2.3 Continuous monitoring
  • $write : same as $display but doesn't terminate with a newline (\n)
    • § 21.2.1 The display and write tasks

Пример:

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)

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

person Greg    schedule 29.09.2015
comment
Связанный документ больше не доступен. Я считаю, что теперь его можно получить по адресу: ieeexplore.ieee.org/servlet/opac?punumber = 6469138 - person icktoofay; 18.12.2017
comment
@icktoofay, похоже, IEEE изменил путь ссылки. Я обновил его до standard.ieee.org/findstds/standard/1800- 2012.html - person Greg; 18.12.2017

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

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

Взгляните на это изображение: VERILOG EVENT REGIONS

Пример кода доступен по адресу: Display / Strobe / Monitor

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

person sharvil111    schedule 30.09.2015