- uvm_event是对SV中event类的一次封装。
- 不同的组件可以共享同一个uvm_event,是通过uvm_event_pool这一全局资源池来实现的。它可以生成和获取通过字符串来索引的uvm_event对象。通过唯一的券聚资源池对象,在环境中任何一个地方的组件都可以从资源池中获取共同的对象,避免了组件之间的互相依赖
- 通过uvm_event_pool::get_global得到一个uvm_event对象的句柄。两个地方调用get_global,先调用的会创建这个pool,后调用的只是获得这个pool的句柄
uvm_event_pool::get_global("trans_start")
- 触发的方式:uvm_event.trigger();
- 等待的方式:uvm_event.wait_trigger();
- 再次触发:先reset()重置初始状态,再使用tigger()来触发
- event传递对象
uvm_event.tigger(a);
uvm_event.wait_tigger_data(b);
这个对象a必须是uvm_object的扩展,才能将其句柄作为trigger()方法的参数
wait_trigger_data()的参数b必须是uvm_object类,再$cast(a,b)
- uvm_event添加回调函数:
class cb extends uvm_event_callback;
uvm_event.add_callback(cb);