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
感谢大佬分享!
该示例展示了如何在SystemVerilog中使用uvm_barrier进行进程同步。四个并发进程在完成各自任务后调用wait_for方法,只有当达到预先设定的阈值(3个进程)时,所有进程才会继续执行wait_for之后的代码。这展示了并发控制在验证中的应用。
1165

被折叠的 条评论
为什么被折叠?



