While revisiting my verilog slides I came across an example :

`timescale 10 ns / 1 ns
module time_test;
integer a=0, b=0, c=0;
initial begin
#1.53 a=6; $display($realtime,," a == 6 @ T == %0t ",$realtime );
#2.56 b=9; $display($realtime,," b == 9 @ T == %0t ",$realtime );
#1.547 c=4; $display($realtime,," c == 4 @ T == %0t ",$realtime );
end
endmodule

Based on timeprecision the delays are rounded off to 1 decimal place . #1.53 would be #1.5 , #2.56 would be #2.6 and #1.547 would be #1.5 .

Without using %t , $realtime would return the same rounded-off real numbers : 1.5 , 4.1 and 5.6

(a) However when I use %t along with $realtime , why do we observe 15 , 41 and 56 in the result ?

Then I replaced $realtime with $time in the above example :

Without using %t , $time would return an integer after rounding off : 2 , 4 and 6

(b) But when I use %t , I observe 20 , 40 and 60 in the result

One intuition I have is that format specification %t displays simulation time.

$realtime returns a real number scaled to time unit of 10ns .

Hence simulation time would be obtained my multiplying these real values ( i.e the argument $realtime ) by time unit of 10ns

Therefore we observe 15 , 41 and 56 ( which are actually in units of "ns" )

Similarly for $time we simply multiply the time unit of 10ns to the integer value returned by $time .

Hence we observe 20 , 40 and 60 ( which are again in units of "ns" )

NOTE : These values returned by $time are different than the actual simulation time at which the assignments occur .

Is my initial thought process correct ? Please correct me if wrong .

Thanks .