在UVM中除了使用uvm_event来做同步之外,有时候还有这种应用场景,比如所有进程均在等待,到达一个的等待阈值时,所有进程再同时执行。这个时候可以使用uvm_barrier这个类来实现这种操作。
uvm_barrier专门用来同步一定个数进程的类。比如我们需要同步6个进程,那么6个进程各自调用uvm_barrier.wait_for。同时要设置阈值个数是6。这里面有3个重要的方法
1:wait_for
2:reset
3:set_threadhold
2个重要的变量
1:num_waiters
2: threadhold
其中wait_for用于等,每调用一次num_waiters++。如果num_waiters>=
threadhold。这个时候触发event,结束阻塞
set-threadhold用于设置阈值(threadhold),同时判断此时的num_waiters>= threadhold,如果成立,调用reset(1)
reset方法:复位,如果传入的参数是1,那么在复位前trigger一下事件,让所有等待的进程结束阻塞
所以一般结束进程阻塞的方法,
1:wait_for等到了,trigger事件,结束阻塞
2:wait_for没有等到,但是再调用set-threadhold,使得num_waiters>=
threadhold,自动调用reset,trigger事件,结束阻塞
管理uvm_barrier的地方叫uvm_barrier_pool的资源池(single模式)。在创建uvm_barrier的时候使用uvm_barrier_pool::get_global(“string_name”),来实现同步