2024-01-02 01:11:46 +00:00
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2024 by Paul Wright.
// SPDX-License-Identifier: CC0-1.0
/ * Working through the $time example from IEEE Std 1364 - 2005
* * Section 17.7 .1
* * The example uses a 10 ns timeunit with a 1 ns timeprecision
* * For 16 ns $time should return 2
* * For 32 ns $time should return 3
* */
2024-04-13 12:02:25 +00:00
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
2024-01-02 01:11:46 +00:00
module t ( ) ;
timeunit 10 ns ;
timeprecision 1 ns ;
longint should_be_2 , should_be_3 ;
real should_be_1p6 , should_be_3p2 ;
2024-04-13 12:02:25 +00:00
initial begin : initial_blk1
should_be_2 = 0 ;
should_be_3 = 0 ;
# ( 16 ns ) ;
$display ( " $time=%0t=%0d, $realtime=%g " , $time ( ) , $time ( ) , $realtime ( ) ) ;
should_be_2 = $time ( ) ;
should_be_1p6 = $realtime ( ) ;
# ( 16 ns ) ;
$display ( " $time=%0t=%0d, $realtime=%g " , $time ( ) , $time ( ) , $realtime ( ) ) ;
should_be_3 = $time ( ) ;
should_be_3p2 = $realtime ( ) ;
# ( 16 ns ) ;
$finish ( 1 ) ;
2024-01-02 01:11:46 +00:00
end
2024-04-13 12:02:25 +00:00
initial begin : initial_blk2
2024-01-02 01:11:46 +00:00
# ( 100 ns ) ;
$display ( " %%Error: We should not get here " ) ;
2024-04-13 12:02:25 +00:00
$stop ;
end
2024-01-02 01:11:46 +00:00
function bit real_chk ( input real tvar , input real evar ) ;
real diff ;
diff = tvar - evar ;
return ( diff < 1e-9 ) & & ( diff > - 1e-9 ) ;
endfunction
2024-04-13 12:02:25 +00:00
final begin : last_blk
2024-01-02 01:11:46 +00:00
$display ( " Info: should_be_2 = %0d " , should_be_2 ) ;
$display ( " Info: should_be_3 = %0d " , should_be_3 ) ;
2024-04-13 12:02:25 +00:00
`checkd ( should_be_2 , 2 ) ;
`checkd ( should_be_3 , 3 ) ;
2024-01-02 01:11:46 +00:00
chk_2 : assert ( should_be_2 = = 2 ) ;
chk_3 : assert ( should_be_3 = = 3 ) ;
chk_1p6 : assert ( real_chk ( should_be_1p6 , 1.6 ) ) ;
chk_3p2 : assert ( real_chk ( should_be_3p2 , 3.2 ) ) ;
$write ( " *-* All Finished *-* \n " ) ;
end
endmodule