这里可以看看UVM源代码中还有个小错误就是133行的示例用法中宏函数的第1、2两个参数用反了,第一个参数应该是component,第二个参数是uvm_callback。uvm_do_obj_callbacks实现了将一个与uvm_object类型关联的uvm_callback类在某个类型T中执行起来。 uvm_do_callbacks和uvm_do_obj_callbacks宏都会迭代的调用其中注册...
这里使用了uvm_set_super_type宏,它把子类和父类关联在一起。其第一个参数是子类,第二个参数是父类。在main_phase中调用uvm_do_callbacks宏时,其第一个参数是my_driver,而不是new_driver,即调用方式与在my_driver中一样。 在my_agent中实例化此new_driver: functionvoidmy_agent::build_phase(uvm_phasephas...
`uvm_do_callbacks(comp1, cb1, do_trans(d)) endtask endclass class env1 extends uvm_env; comp1 c1; cb1 m_cb1; cb2 m_cb2; `uvm_component_utils(env1) function new(string name, uvm_component parent); super.new(name, parent); m_cb1 = new("m_cb1"); m_cb2 = new("m_cb2");...
1)由于很多参数化类的关系,所以callbacks以及callback_iter都对具体类型进行了typedef; 如对于uvm_reg,分别对pool和iter进行了typedef;uvm_reg_cbs是设计者已经extend的一级class; 2)对register函数的包装: macros,uvm_register_cb(T,CB),调用相应callbacks的m_register_pair函数; 3)do callback函数的包装; macros...
5. `uvm_do_callbacks(T,CB,THIS,METHOD)展开后,创建uvm_callback_iter的实例,这个类提供的是iterator迭代器的功能,因为所有callback都放在了容器 m_pool 或 m_tw_cb_q 中,在此处调用的callback需要满足 uvm_object=my_driver, uvm_callback = A 的条件,需要对容器检索遍历获得。如上节单独的foreach循环...
46、n 2) typedefuvm_callback s#(my_driver,A)A_pool 注意 s 3) 在 my_driver 中注册 callback:uvm_register_cb(my)driver,A) 4) my_driver 中使用 uvm_do_callbacks(my_driver,A, task()注意 s 5) 从A派生出一个实际用到的类my_callback,实现task 6) 在 case 的 connect_phase 中实例化 ...
默认情况下,这些回调函数do_xxx是定义为空的。如果用户执行了uvm_object::copy()函数,那么在该函数执行末尾会自动执行uvm_object::do_copy()。UVM是通过两个相关类uvm_callback_iter和uvm_callbacks #(T,CB)来实现函数回调的顺序和继承性的。 classedataextendsuvm_object;int data;`uvm_object_utils(edata) ...
`uvm_do_callbacks(mcdf_base_test, cb_mcdf_base, cb_do_formatter()) // 3.插入 endtask 1. 2. 3. 实现uvm_callback和对应test类的定义。 class cb_mcdf_data_consistence_basic extends cb_mcdf_base; ... function void build_phase(uvm_phase phase); ...
get_next_item(pkt); `uvm do callbacks(PktDriver, PktDriver cb, corrupt_packet(pkt)) //other code to derive to DUT etc end endtask endclass1)定义数据包packet类 2)定义从sequence中接收此数据包并将其发送到DUT的driver类 3)定义一个从uvm_callback基类派生的driver callback类,并添加一个虚拟...
58、ion2) typedef uvm_callbacks#(my_driver,A) A_pool 注意s3) 在my_driver中注册callback: uvm_register_cb(my)driver,A)4) my_driver中使用 uvm_do_callbacks(my_driver,A,task() 注意s5) 从A派生出一个实际用到的类 my_callback , 实现task6) 在case的connect_phase中实例化my_callback(假设是...