扫描二维码
随时随地手机看文章
‘uvm_analysis_imp_decl(_exp)
‘uvm_analysis_imp_decl(_act)
class scorebd extends uvm_component;
uvm_analysis_imp_exp #(my_tr,scorebd) expect;
uvm_analysis_imp_act #(my_tr,scorebd) actual;
virtual function void write_exp(my_tr tr);
...
endfunction
virtual function void write_act(my_tr tr);
...
endfunction
endclass
uvm_analysis_imp_exp
uvm_analysis_imp_act
write_exp
write_act
如果不想使用*_imp_decl宏,可以通过“策略”类实现类似操作。定义一个将策略类作为参数的通用uvm_analysis_imp。aimp 的write方法调用了策略类中的静态写方法,该方法调用了组件中的一个唯一write方法。需要为uvm_analysis_imp的每个实例定义一个单独的策略类。class aimp #(type T=int, IMP=int, POLICY=int) extends uvm_port_base #(tlm_if_base #(T,T));
`UVM_IMP_COMMON(`TLM_ANALYSIS_MASK,“uvm_analysis_imp”,IMP)
function void write (input T t);
POLICY::write(m_imp , t);
endfunction
endclass
class wr_to_A #(type T=int, IMP=int);
static function void write(T tr, IMP comp);
comp.write_A(tr);
endfunction
endclass
class wr_to_B #(type T=int, IMP=int);
static function void write(T tr, IMP comp);
comp.write_B(tr);
endfunction
endclass
class my_comp extends uvm_component;
aimp #(my_tr, my_comp, wr_to_A) A_ap;
aimp #(my_tr, my_comp, wr_to_B) B_ap;
virtual function void write_A(my_tr tr);
...
endfunction
virtual function void write_B(my_tr tr);
...
endfunction
endclass