multidriven class task and class function tests

This commit is contained in:
em2machine 2025-12-21 20:03:09 +01:00
parent 667f99bc41
commit 96d2b15deb
13 changed files with 534 additions and 3 deletions

View File

@ -53,14 +53,14 @@ module m_tb#()();
initial begin
#1;
sel = 'b0;
`checkd(val, 1'b0);
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
#1;
sel = 'b0;
`checkd(val, 1'b0);
#1;
`checkd(val, 1'b0);
end
initial begin

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile(verilator_flags2=["--binary"])
test.execute()
test.passes()

View File

@ -0,0 +1,72 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty.
// SPDX-License-Identifier: CC0-1.0
// class task chain - nested method calls write through ref in same always_comb
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
class C;
task automatic inner(inout logic q);
q = 1'b1;
endtask
task automatic outer(inout logic q);
inner(q);
endtask
endclass
module mod #()(
input logic sel
,output logic val
);
logic l0;
C c;
initial c = new;
always_comb begin
l0 = 1'b0;
if (sel) begin
c.outer(l0);
end
end
assign val = l0;
endmodule
module m_tb#()();
logic sel, val;
mod m(
.sel(sel)
,.val(val)
);
initial begin
#1;
sel = 'b0;
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
sel = 'b0;
#1;
`checkd(val, 1'b0);
end
initial begin
#5;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile(verilator_flags2=["--binary"])
test.execute()
test.passes()

View File

@ -0,0 +1,71 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty.
// SPDX-License-Identifier: CC0-1.0
// class handle passed through module port - class method writes through ref
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
class C;
task automatic set1(ref logic q);
q = 1'b1;
endtask
endclass
module mod #()(
input logic sel
,output logic val
,C c
);
logic l0;
always_comb begin
l0 = 1'b0;
if (sel) begin
c.set1(l0);
end
end
assign val = l0;
endmodule
module m_tb#()();
logic sel, val;
C c;
initial c = new;
mod m(
.sel(sel)
,.val(val)
,.c(c)
);
initial begin
#1;
sel = 'b0;
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
sel = 'b0;
#1;
`checkd(val, 1'b0);
end
initial begin
#5;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile(verilator_flags2=["--binary"])
test.execute()
test.passes()

View File

@ -0,0 +1,66 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty.
// SPDX-License-Identifier: CC0-1.0
// static class task - call via class scope, writes through ref in same always_comb
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
class C;
static task automatic set1(ref logic q);
q = 1'b1;
endtask
endclass
module mod #()(
input logic sel
,output logic val
);
logic l0;
always_comb begin
l0 = 1'b0;
if (sel) begin
C::set1(l0);
end
end
assign val = l0;
endmodule
module m_tb#()();
logic sel, val;
mod m(
.sel(sel)
,.val(val)
);
initial begin
#1;
sel = 'b0;
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
sel = 'b0;
#1;
`checkd(val, 1'b0);
end
initial begin
#5;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile(verilator_flags2=["--binary"])
test.execute()
test.passes()

View File

@ -0,0 +1,79 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty.
// SPDX-License-Identifier: CC0-1.0
// class composition - one class calls another task, ultimately writes through ref
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
class CInner;
task automatic set1(ref logic q);
q = 1'b1;
endtask
endclass
class COuter;
CInner inner;
function new();
inner = new;
endfunction
task automatic set1(ref logic q);
inner.set1(q);
endtask
endclass
module mod #()(
input logic sel
,output logic val
);
logic l0;
COuter c;
initial c = new;
always_comb begin
l0 = 1'b0;
if (sel) begin
c.set1(l0);
end
end
assign val = l0;
endmodule
module m_tb#()();
logic sel, val;
mod m(
.sel(sel)
,.val(val)
);
initial begin
#1;
sel = 'b0;
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
sel = 'b0;
#1;
`checkd(val, 1'b0);
end
initial begin
#5;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile(verilator_flags2=["--binary"])
test.execute()
test.passes()

View File

@ -0,0 +1,69 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty.
// SPDX-License-Identifier: CC0-1.0
// class function returns value - always_comb writes var directly + via class function call
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
class C;
function automatic logic ret1();
return 1'b1;
endfunction
endclass
module mod #()(
input logic sel
,output logic val
);
logic l0;
C c;
initial c = new;
always_comb begin
l0 = 1'b0;
if (sel) begin
l0 = c.ret1();
end
end
assign val = l0;
endmodule
module m_tb#()();
logic sel, val;
mod m(
.sel(sel)
,.val(val)
);
initial begin
#1;
sel = 'b0;
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
sel = 'b0;
#1;
`checkd(val, 1'b0);
end
initial begin
#5;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# Copyright 2025 by Wilson Snyder. This program is free software; you
# can redistribute it and/or modify it under the terms of either the GNU
# Lesser General Public License Version 3 or the Perl Artistic License
# Version 2.0.
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator')
test.compile(verilator_flags2=["--binary"])
test.execute()
test.passes()

View File

@ -0,0 +1,66 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed into the Public Domain, for any use,
// without warranty.
// SPDX-License-Identifier: CC0-1.0
// static class function returns value - always_comb uses class scope call
// verilog_format: off
`define stop $stop
`define checkd(gotv,expv) do if ((gotv) !== (expv)) begin $write("%%Error: %s:%0d: got=%0d exp=%0d (%s !== %s)\n", `__FILE__,`__LINE__, (gotv), (expv), `"gotv`", `"expv`"); `stop; end while(0);
// verilog_format: on
class C;
static function automatic logic ret1();
return 1'b1;
endfunction
endclass
module mod #()(
input logic sel
,output logic val
);
logic l0;
always_comb begin
l0 = 1'b0;
if (sel) begin
l0 = C::ret1();
end
end
assign val = l0;
endmodule
module m_tb#()();
logic sel, val;
mod m(
.sel(sel)
,.val(val)
);
initial begin
#1;
sel = 'b0;
#1;
`checkd(val, 1'b0);
sel = 'b1;
#1;
`checkd(val, 1'b1);
sel = 'b0;
#1;
`checkd(val, 1'b0);
end
initial begin
#5;
$write("*-* All Finished *-*\n");
$finish;
end
endmodule