掃描二維碼
隨時(shí)隨地手機(jī)看文章
‘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);...endfunctionvirtual function void write_act(my_tr tr);...endfunctionendclassuvm_analysis_imp_expuvm_analysis_imp_actwrite_expwrite_act如果不想使用*_imp_decl宏,可以通過“策略”類實(shí)現(xiàn)類似操作。定義一個(gè)將策略類作為參數(shù)的通用uvm_analysis_imp。aimp 的write方法調(diào)用了策略類中的靜態(tài)寫方法,該方法調(diào)用了組件中的一個(gè)唯一write方法。需要為uvm_analysis_imp的每個(gè)實(shí)例定義一個(gè)單獨(dú)的策略類。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);endfunctionendclass
class wr_to_A #(type T=int, IMP=int);static function void write(T tr, IMP comp);comp.write_A(tr);endfunctionendclass
class wr_to_B #(type T=int, IMP=int);static function void write(T tr, IMP comp);comp.write_B(tr);endfunctionendclass
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);...endfunctionvirtual function void write_B(my_tr tr);...endfunctionendclass?