Дисплей против строба против монитора в 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
Пример кода доступен по адресу: дисплей / стробоскоп / монитор
Надеюсь, этот код проясняет.