forked from github/verilator
117 lines
3.0 KiB
Systemverilog
117 lines
3.0 KiB
Systemverilog
// DESCRIPTION: Verilator: Verilog Test module
|
|
//
|
|
// 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
|
|
|
|
`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);
|
|
|
|
function automatic int f_au_st_global ();
|
|
static int st = 0; st++; return st;
|
|
endfunction
|
|
|
|
package my_pkg;
|
|
function int f_no_st_pkg ();
|
|
static int st = 0; st++; return st;
|
|
endfunction
|
|
endpackage
|
|
|
|
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 ();
|
|
automatic int au = 2; au++; return au;
|
|
endfunction
|
|
|
|
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 ();
|
|
automatic int au = 2; au++; return au;
|
|
endfunction
|
|
|
|
function automatic int f_au_no ();
|
|
int au = 2; au++; return au;
|
|
endfunction
|
|
function automatic int f_au_st ();
|
|
static int st = 2; st++; return st;
|
|
endfunction
|
|
function automatic int f_au_au ();
|
|
automatic int au = 2; au++; return au;
|
|
endfunction
|
|
|
|
int v;
|
|
|
|
initial begin
|
|
v = f_no_no(); `checkh(v, 3);
|
|
v = f_no_no(); `checkh(v, 4);
|
|
v = f_no_st(); `checkh(v, 3);
|
|
v = f_no_st(); `checkh(v, 4);
|
|
v = f_no_au(); `checkh(v, 3);
|
|
v = f_no_au(); `checkh(v, 3);
|
|
//
|
|
v = f_st_no(); `checkh(v, 3);
|
|
v = f_st_no(); `checkh(v, 4);
|
|
v = f_st_st(); `checkh(v, 3);
|
|
v = f_st_st(); `checkh(v, 4);
|
|
v = f_st_au(); `checkh(v, 3);
|
|
v = f_st_au(); `checkh(v, 3);
|
|
//
|
|
v = f_au_no(); `checkh(v, 3);
|
|
v = f_au_no(); `checkh(v, 3);
|
|
v = f_au_st(); `checkh(v, 3);
|
|
v = f_au_st(); `checkh(v, 4);
|
|
v = f_au_au(); `checkh(v, 3);
|
|
v = f_au_au(); `checkh(v, 3);
|
|
//
|
|
v = f_au_st_global(); `checkh(v, 1);
|
|
v = f_au_st_global(); `checkh(v, 2);
|
|
v = my_pkg::f_no_st_pkg(); `checkh(v, 1);
|
|
v = my_pkg::f_no_st_pkg(); `checkh(v, 2);
|
|
//
|
|
end
|
|
|
|
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;
|
|
v = ist1; `checkh(v, 10);
|
|
v = ist2; `checkh(v, 20);
|
|
v = iau3; `checkh(v, 30);
|
|
++ist1;
|
|
++ist2;
|
|
++iau3;
|
|
end
|
|
else if (cyc == 1) begin
|
|
v = ist1; `checkh(v, 11);
|
|
v = ist2; `checkh(v, 21);
|
|
//TODO v = iau3; `checkh(v, 0);
|
|
end
|
|
else if (cyc == 5) begin
|
|
$write("*-* All Finished *-*\n");
|
|
$finish;
|
|
end
|
|
end
|
|
|
|
endmodule
|