barrier是通过调用ba.new()方法创建的,阈值或等待的进程数是新方法的参数
这个示例中有4个带有延迟的进程,在延迟之后调用wati_for方法
The statements after the wait_for will get executed only after the 3 process reaches to wait_for (3 is threshold have been set during creating the barrier)
module uvm_barrier_ex;
uvm_barrier ba;
initial begin
ba = new("ba",3);
fork
begin //process-1
$display($time," Inside the process-a");
#20;
$display($time," process-a completed");
$display($time," process-a Waiting for barrier");
ba.wait_for();
$display($time," process-a after wait_for");
end
begin //process-2
$display($time," Inside the process-b");
#10;
$display($time," process-b completed");
$display($time," process-b Waiting for barrier");
ba.wait_for();
$display($time," process-b after wait_for");
end
begin //process-3
$display($time," Inside the process-c");
#30;
$display($time," process-c completed");
$display($time," process-c Waiting for barrier");
ba.wait_for();
$display($time," process-c after wait_for");
end
begin //process-4
$display($time," Inside the process-d");
#5;
$display($time," process-d completed");
$display($time," process-d Waiting for barrier");
ba.wait_for();
$display($time," process-d after wait_for");
end
join
end
endmodule
运行结果:
0 Inside the process-a
0 Inside the process-b
0 Inside the process-c
0 Inside the process-d
5 process-d completed
5 process-d Waiting for barrier
10 process-b completed
10 process-b Waiting for barrier
20 process-a completed
20 process-a Waiting for barrier
20 process-d after wait_for
20 process-b after wait_for
20 process-a after wait_for
30 process-c completed
30 process-c Waiting for barrier
感谢大佬分享!