2014-11-29 01:44:07 +00:00
// DESCRIPTION: Verilator: Verilog Test module
//
2020-03-21 15:24:24 +00:00
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2014 by Wilson Snyder.
// SPDX-License-Identifier: CC0-1.0
2014-11-29 01:44:07 +00:00
2020-04-20 00:10:07 +00:00
`define checkh(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got='h%x exp='h%x\n", `__FILE__,`__LINE__, (gotv), (expv)); $stop; end while(0);
2014-11-29 01:44:07 +00:00
module t ( /*AUTOARG*/
// Inputs
clk
) ;
input clk ;
function int f_no_no ( ) ;
int st = 2 ; st + + ; return st ;
endfunction
function int f_no_st ( ) ;
static int st = 2 ; st + + ; return st ;
endfunction
function int f_no_au ( ) ;
2020-04-20 01:18:57 +00:00
automatic int au = 2 ; au + + ; return au ;
2014-11-29 01:44:07 +00:00
endfunction
2017-09-11 23:18:58 +00:00
2014-11-29 01:44:07 +00:00
function static int f_st_no ( ) ;
int st = 2 ; st + + ; return st ;
endfunction
function static int f_st_st ( ) ;
static int st = 2 ; st + + ; return st ;
endfunction
function static int f_st_au ( ) ;
2020-04-20 01:18:57 +00:00
automatic int au = 2 ; au + + ; return au ;
2014-11-29 01:44:07 +00:00
endfunction
function automatic int f_au_no ( ) ;
2020-04-20 01:18:57 +00:00
int au = 2 ; au + + ; return au ;
2014-11-29 01:44:07 +00:00
endfunction
function automatic int f_au_st ( ) ;
static int st = 2 ; st + + ; return st ;
endfunction
function automatic int f_au_au ( ) ;
2020-04-20 01:18:57 +00:00
automatic int au = 2 ; au + + ; return au ;
2014-11-29 01:44:07 +00:00
endfunction
2017-09-11 23:18:58 +00:00
2014-11-29 01:44:07 +00:00
initial begin
2020-04-20 00:10:07 +00:00
`checkh ( f_no_no ( ) , 3 ) ;
`checkh ( f_no_no ( ) , 4 ) ;
`checkh ( f_no_st ( ) , 3 ) ;
`checkh ( f_no_st ( ) , 4 ) ;
`checkh ( f_no_au ( ) , 3 ) ;
`checkh ( f_no_au ( ) , 3 ) ;
2014-11-29 01:44:07 +00:00
//
2020-04-20 00:10:07 +00:00
`checkh ( f_st_no ( ) , 3 ) ;
`checkh ( f_st_no ( ) , 4 ) ;
`checkh ( f_st_st ( ) , 3 ) ;
`checkh ( f_st_st ( ) , 4 ) ;
`checkh ( f_st_au ( ) , 3 ) ;
`checkh ( f_st_au ( ) , 3 ) ;
2014-11-29 01:44:07 +00:00
//
2020-04-20 00:10:07 +00:00
`checkh ( f_au_no ( ) , 3 ) ;
`checkh ( f_au_no ( ) , 3 ) ;
`checkh ( f_au_st ( ) , 3 ) ;
`checkh ( f_au_st ( ) , 4 ) ;
`checkh ( f_au_au ( ) , 3 ) ;
`checkh ( f_au_au ( ) , 3 ) ;
2014-11-29 01:44:07 +00:00
//
2020-04-20 00:10:07 +00:00
end
2020-04-20 01:18:57 +00:00
2020-04-20 00:10:07 +00:00
int cyc = 0 ;
always @ ( posedge clk ) begin
int ist1 ;
static int ist2 ;
automatic int iau3 ;
cyc < = cyc + 1 ;
if ( cyc = = 0 ) begin
ist1 = 10 ;
ist2 = 20 ;
iau3 = 30 ;
`checkh ( ist1 , 10 ) ;
`checkh ( ist2 , 20 ) ;
`checkh ( iau3 , 30 ) ;
+ + ist1 ;
+ + ist2 ;
+ + iau3 ;
end
else if ( cyc = = 1 ) begin
`checkh ( ist1 , 11 ) ;
`checkh ( ist2 , 21 ) ;
2020-04-20 01:18:57 +00:00
`checkh ( iau3 , 0 ) ;
2020-04-20 00:10:07 +00:00
end
else if ( cyc = = 5 ) begin
$write ( " *-* All Finished *-* \n " ) ;
$finish ;
end
2014-11-29 01:44:07 +00:00
end
endmodule