mirror of
https://github.com/verilator/verilator.git
synced 2025-01-21 05:44:03 +00:00
b4b74d72f0
This API is used if the user copies the process using `fork` and similar OS-level mechanisms. The `at_clone` member function ensures that all model-allocated resources are re-allocated, such that the copied child process/model can simulate correctly. A typical allocated resource is the thread pool, which every model has its own pool.
39 lines
816 B
Systemverilog
39 lines
816 B
Systemverilog
// DESCRIPTION: Verilator: Verilog Test module for prepareClone/atClone APIs
|
|
//
|
|
// This model counts from 0 to 8. It forks a child process (in C++) at 6
|
|
// and waits for the child to simulate and exit for resumption (of the parent).
|
|
//
|
|
// This file ONLY is placed into the Public Domain, for any use,
|
|
// without warranty, 2023 by Yinan Xu.
|
|
// SPDX-License-Identifier: CC0-1.0
|
|
|
|
module top(
|
|
input clock,
|
|
input reset,
|
|
input is_parent,
|
|
output do_clone
|
|
);
|
|
|
|
reg [3:0] counter;
|
|
|
|
assign do_clone = counter == 4'h6;
|
|
|
|
always @(posedge clock) begin
|
|
if (reset) begin
|
|
counter <= 4'h0;
|
|
end
|
|
else begin
|
|
counter <= counter + 4'h1;
|
|
$write("counter = %d\n", counter);
|
|
end
|
|
|
|
if (counter[3]) begin
|
|
if (is_parent) begin
|
|
$write("*-* All Finished *-*\n");
|
|
end
|
|
$finish(0);
|
|
end
|
|
end
|
|
|
|
endmodule
|