mirror of
https://github.com/verilator/verilator.git
synced 2025-01-05 22:27:35 +00:00
2a9f29912c
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com> Co-authored-by: Ryszard Rozak <rrozak@antmicro.com> Co-authored-by: Wilson Snyder <wsnyder@wsnyder.org> Co-authored-by: Arkadiusz Kozdra <akozdra@antmicro.com>
161 lines
3.5 KiB
Systemverilog
Executable File
161 lines
3.5 KiB
Systemverilog
Executable File
// DESCRIPTION: Verilator: Verilog Test module
|
|
//
|
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
|
// any use, without warranty, 2024 by Antmicro.
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
module t;
|
|
unsupported_ctl_type unsupported_ctl_type();
|
|
unsupported_ctl_type_expr unsupported_ctl_type_expr();
|
|
bad_assertcontrol_ctl_type bad_assertcontrol_ctl_type();
|
|
assert_class assert_class();
|
|
assert_iface assert_iface();
|
|
assert_iface_class assert_iface_class();
|
|
endmodule
|
|
|
|
module unsupported_ctl_type;
|
|
initial begin
|
|
$assertcontrol(1);
|
|
$assertcontrol(2);
|
|
$assertcontrol(6);
|
|
$assertcontrol(7);
|
|
$assertcontrol(8);
|
|
$assertcontrol(9);
|
|
$assertcontrol(10);
|
|
$assertcontrol(11);
|
|
end
|
|
endmodule
|
|
|
|
module unsupported_ctl_type_expr;
|
|
int ctl_type = 1;
|
|
initial begin
|
|
$assertcontrol(ctl_type);
|
|
end
|
|
endmodule
|
|
|
|
module bad_assertcontrol_ctl_type;
|
|
initial begin
|
|
$assertcontrol(0);
|
|
$assertcontrol(100);
|
|
end
|
|
endmodule
|
|
|
|
module assert_class;
|
|
virtual class AssertCtl;
|
|
pure virtual function void virtual_assert_ctl();
|
|
endclass
|
|
|
|
class AssertCls;
|
|
static function void static_function();
|
|
assert(0);
|
|
endfunction
|
|
static task static_task();
|
|
assert(0);
|
|
endtask
|
|
function void assert_function();
|
|
assert(0);
|
|
endfunction
|
|
task assert_task();
|
|
assert(0);
|
|
endtask
|
|
virtual function void virtual_assert();
|
|
assert(0);
|
|
endfunction
|
|
endclass
|
|
|
|
class AssertOn extends AssertCtl;
|
|
virtual function void virtual_assert_ctl();
|
|
$asserton;
|
|
endfunction
|
|
endclass
|
|
|
|
class AssertOff extends AssertCtl;
|
|
virtual function void virtual_assert_ctl();
|
|
$assertoff;
|
|
endfunction
|
|
endclass
|
|
|
|
AssertCls assertCls;
|
|
AssertOn assertOn;
|
|
AssertOff assertOff;
|
|
initial begin
|
|
$assertoff;
|
|
AssertCls::static_function();
|
|
AssertCls::static_task();
|
|
$asserton;
|
|
AssertCls::static_function();
|
|
AssertCls::static_task();
|
|
|
|
assertCls = new;
|
|
assertOn = new;
|
|
assertOff = new;
|
|
|
|
assertOff.virtual_assert_ctl();
|
|
assertCls.assert_function();
|
|
assertCls.assert_task();
|
|
assertCls.virtual_assert();
|
|
|
|
assertOn.virtual_assert_ctl();
|
|
assertCls.assert_function();
|
|
assertCls.assert_task();
|
|
assertCls.virtual_assert();
|
|
assertOff.virtual_assert_ctl();
|
|
assertCls.assert_function();
|
|
end
|
|
endmodule
|
|
|
|
interface Iface;
|
|
function void assert_func();
|
|
assert(0);
|
|
endfunction
|
|
|
|
function void assertoff_func();
|
|
$assertoff;
|
|
endfunction
|
|
|
|
initial begin
|
|
assertoff_func();
|
|
assert(0);
|
|
assert_func();
|
|
$asserton;
|
|
assert(0);
|
|
assert_func();
|
|
end
|
|
endinterface
|
|
|
|
module assert_iface;
|
|
Iface iface();
|
|
virtual Iface vIface = iface;
|
|
initial begin
|
|
vIface.assert_func();
|
|
vIface.assertoff_func();
|
|
vIface.assert_func();
|
|
|
|
iface.assert_func();
|
|
iface.assertoff_func();
|
|
iface.assert_func();
|
|
end
|
|
endmodule
|
|
|
|
interface class IfaceClass;
|
|
pure virtual function void assertoff_func();
|
|
pure virtual function void assert_func();
|
|
endclass
|
|
|
|
class IfaceClassImpl implements IfaceClass;
|
|
virtual function void assertoff_func();
|
|
$assertoff;
|
|
endfunction
|
|
virtual function void assert_func();
|
|
assert(0);
|
|
endfunction
|
|
endclass
|
|
|
|
module assert_iface_class;
|
|
IfaceClassImpl ifaceClassImpl = new;
|
|
initial begin
|
|
ifaceClassImpl.assertoff_func();
|
|
ifaceClassImpl.assert_func();
|
|
end
|
|
endmodule
|