mirror of
https://github.com/verilator/verilator.git
synced 2025-01-19 12:54:02 +00:00
a668b7c658
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
68 lines
1.8 KiB
Systemverilog
68 lines
1.8 KiB
Systemverilog
// DESCRIPTION: Verilator: Verilog Test module
|
|
//
|
|
// This file ONLY is placed under the Creative Commons Public Domain, for
|
|
// any use, without warranty, 2023 by Antmicro Ltd.
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
// USING THIS FOR DEBUGGING PROCESS PROPAGATION:
|
|
//
|
|
// The example contains most cases that were problematic during the
|
|
// works on support of 'disable fork' statement, including:
|
|
//
|
|
// - indirect use of disable fork (through a task),
|
|
// - indirect use of forks that are to be disabled,
|
|
// - forks in forks,
|
|
// - a function taking VlProcess argument shared between a process that
|
|
// allocates VlProcess, and one that doesnt,
|
|
// - a function that has a delay and obtains VlProcess argument,
|
|
// - a function that has a delay and doesn't obtain it,
|
|
// - an empty fork with disable fork.
|
|
//
|
|
// Blocks below contain info on whether they should (YES) or shouldn't (NO)
|
|
// be emitted as functions with a VlProcess argument.
|
|
//
|
|
// To check if that corresponds to reality, see blue nodes in proc_deps.dot
|
|
|
|
class Cls;
|
|
task print; /*NO*/
|
|
$write("*-* All ");
|
|
endtask
|
|
task disable_fork_func; /*YES*/
|
|
disable fork;
|
|
endtask
|
|
task common_func; /*YES*/
|
|
fork /*YES*/ #1; join_none
|
|
endtask
|
|
task fork_func; /*YES*/
|
|
fork /*YES*/ #1 $stop; join_none
|
|
endtask
|
|
task delay_func; /*NO*/
|
|
fork /*NO*/ #1 $write("Finished *-*\n"); join_none
|
|
endtask
|
|
task empty_fork;
|
|
fork
|
|
begin
|
|
end
|
|
join_none
|
|
disable fork;
|
|
endtask
|
|
endclass
|
|
|
|
module t;
|
|
Cls cls = new;
|
|
|
|
initial begin /*YES*/
|
|
fork /*YES*/ cls.common_func(); join_none
|
|
cls.fork_func();
|
|
cls.disable_fork_func();
|
|
cls.empty_fork();
|
|
cls.print();
|
|
end
|
|
|
|
initial begin /*NO*/
|
|
cls.delay_func();
|
|
cls.common_func();
|
|
fork /*YES*/ disable fork; join_none
|
|
end
|
|
endmodule
|