uvm_reg_indirect_dataireg;uvm_regir;if(!m_pending.exists(rg))beginuvm_reg_itemitem=new;predict_info=new;item.element_kind=UVM_REG;item.element=rg;item.path=UVM_PREDICT;item.map=map;item.kind=rw.kind;predict_info.reg_item=item;m_pending[rg]=predict_info;endpredict_info=m_pending[rg];reg_item=predict_info.reg_item;if(predict_info.addr.exists(rw.addr))begin`uvm_error("REG_PREDICT_COLLISION",{"Collision detected for register '",
item.set_map(map);item.set_kind(rw.kind);item.set_status(rw.status);predict_info.reg_item=item;m_pending[rg]=predict_info;endpredict_info=m_pending[rg];reg_item=predict_info.reg_item;if(predict_info.addr.exists(rw.addr))begin`uvm_error("REG_PREDICT_COLLISION",{"Collision detected for register '",rg.get_full_name(),"'"})// TODO: what to do with subsequent collisions?m_pending.delete(rg);endlocal_map=rg.get_local_map(map);map_info=local_map.get_reg_map_info(rg);ir=($cast(ireg,rg))?ireg.get_indirect_reg():rg;
// do_predictfunctionvoiduvm_reg::do_predict(uvm_reg_itemrw,uvm_predict_ekind=UVM_PREDICT_DIRECT,uvm_reg_byte_en_tbe=-1);uvm_reg_data_treg_value=rw.get_value(0);m_fname=rw.get_fname();m_lineno=rw.get_line();if(rw.get_status()==UVM_IS_OK)beginif(m_is_busy&&kind==UVM_PREDICT_DIRECT)begin`uvm_warning("RegModel",{"Trying to predict value of register '",get_full_name(),"' while it is being accessed"})rw.set_status(UVM_NOT_OK);return;end