17.7 Системные функции моделировании времени Verilog
Следующие системные функции Verilog обеспечивают доступ к текущему времени моделирования: $time, $stime и $realtime.
17.7.1 $time
$time — это системная функция, которая возвращает целое число, представляющее собой 64-битное время, масштабированное до единицы временной шкалы вызвавшего ее модуля.
Синтаксис системной функции $time показан в Синтаксис 17-14.
time_function ::= $time
`timescale 10 ns / 1 ns
module test;
parameter p = 1.55;
reg set;
initial begin
$monitor($time,,"set=",set);
#p set = 0;
#p set = 1;
end
endmodule
// выходные данные этого примера:
// 0 set=x
// 2 set=0
// 3 set=1
В этом примере набору reg присваивается значение 0 при времени моделирования 16 нс и значение 1 при времени моделирования 32 нс. Значения времени, возвращаемые системной функцией $time, определяются следующими шагами:
1) Времена моделирования 16 нс и 32 нс масштабируются до 1,6 и 3,2, поскольку единицей измерения времени для модуля является 10 нс. Поэтому значения времени, сообщаемые этим модулем, кратны 10 нс.
2) Значение 1.6 округляется до 2, а 3.2 округляется до 3, поскольку системная функция $time возвращает целое число. Точность времени не вызывает округления этих значений.
ПРИМЕЧАНИЕ — Время, в которое происходят назначения в этом примере, не совпадает с временем, о котором сообщает $time.
17.7.2 $stime
$stime — системная функция, которая возвращает беззнаковое целое число, представляющее собой 32-битное время, масштабированное до единицы временной шкалы вызвавшего ее модуля. Если фактическое время моделирования не укладывается в 32 бита, возвращаются 32 бита младшего порядка текущего времени моделирования.
Синтаксис системной функции $stime показан в Синтаксисе 17-15.
stime_function ::= $stime
17.7.3 $realtime
$realtime — это системная функция, которая возвращает вещественное число time, которое, как и $time, масштабируется до единицы времени вызвавшего ее модуля.
Синтаксис системной функции $realtime показан в Синтаксисе 17-16.
realtime_function ::= $realtime
`timescale 10 ns / 1 ns
module test;
parameter p = 1.55;
reg set;
initial begin
$monitor($realtime,,"set=",set);
#p set = 0;
#p set = 1;
end
endmodule
// выходные данные этого примера:
// 0 set=x
// 1.6 set=0
// 3.2 set=1
В этом примере времена событий в наборе reg кратны 10 нс, потому что 10 нс — это единица времени модуля. Это вещественные числа, потому что $realtime возвращает вещественное число.