而这个uvm_callbacks类我们在第4步uvm_callback类创建的时候正是用的其中的静态方法add,下面我们来正式揭开这个uvm_callbacks类的庐山真面目,如图5所示。 图5 src/base/uvm_callback.svh中的关于类uvm_callbacks的代码截图 uvm_callbacks继承链条上的相关类如图6、图7所示。 图6 src/base/uvm_callback.svh中的...
uvm_typed_callbacks,实现了对uvm_queue中的callback进行add,delete,get,find的function; 定义了m_t_inst的static变量,以及m_tw_cb_q类型的uvm_queue,其中保存uvm_callback; uvm_callbacks,定义了register,add,delete,add_by_name,delete_by_name的function; add function,会根据uvm_object是会为null,来判断是写...
(1) 可以从uvm_event_callback进行类的派生,并实现pre_trigger与post_trigger函数,之后将该派生类通过add_callback函数添加到uvm_event中; (2) pre_trigger()有返回值,如果返回值为1,则表示uvm_event不会被trigger,也不会再执行post_trigger()方法;如果返回值为0,则会继续trigger该事件对象。 注1:对于uvm_ev...
1. 成员算法类的存储方式不是单个而是存储了算法集合(pool/queue),如此可动态添加更多的算法进行调用,特别的在需要增加操作时,不用修改已有的算法实现,只需新增一个算法类,并添加到算法集合中即可。(在uvm中通过uvm_callback#(type T, type CB)::add实现) 2. 调用主体不再是单一类与对象,而是通过以<调用者...
1.add 该函数用于向UVM中添加回调函数。它接受一个回调对象和一个事件类型作为参数。当事件发生时,回调函数会被自动调用。 2. remove 该函数用于从UVM中删除回调函数。它接受一个回调对象和一个事件类型作为参数。 3. execute 该函数用于手动执行回调函数。它接受一个事件对象作为参数,并调用与该事件相关联的所有回...
其次,在base_test中把my_callback实例化: my_callback的实例化是在connect_phase中完成的,实例化完成后需要把my_cb加入到A_pool中。同时,在加入的时候,要指定是给哪个mii_driver使用的。因为很可能整个base_test中例化了多个mii_env,所以要把mii_driver的路径作为add函数的第一个参数。
create callback class in test environment, and add to uvm environment classbase_testextendsuvm_test;user_driver_callback user_cb;...functionbuild_phase(uvm_phase phase);user_cb=user_driver_callback::create("user_cb");uvm_callbacks#(user_driver,driver_callback)::add(env.mst_agent.driver,us...
1`include"uvm_macros.svh"23package bus_driver_pkg;45import uvm_pkg::*;67typedef class bus_driver;8typedef class bus_driver_cb;9typedef uvm_callbacks #(bus_driver,bus_driver_cb) bus_driver_cbs_t; // 这样定义好之后,使用::add的时候就不要带那么多参数了。1011class bus_tr extends uvm_tran...
在driver类中,使用uvm_do_callbacks(driver, A, pre_do);来调用pre_do,在do函数之前。 这样便完成了预留的hook, 用户使用时: 接下来只需要在需要的时候extended A,定义好pre_do函数。并且在connect_phase之前调用add函数,来添加进来。 A_pool::add(env.i_agt.drv, cb); cb即为A的Extended的类的对象。
1`include"uvm_macros.svh"23package bus_driver_pkg;45import uvm_pkg::*;67typedef class bus_driver;8typedef class bus_driver_cb;9typedef uvm_callbacks #(bus_driver,bus_driver_cb) bus_driver_cbs_t; // 这样定义好之后,使用::add的时候就不要带那么多参数了。1011class bus_tr extends uvm_tran...