// or that are not accessible using the default DPI backdoor mechanism.//------------------------------------------------------------------------------classuvm_reg_backdoorextendsuvm_object;// Function: new//// Create an instance of this class//// Create an instance of the user-defined backdoor class// for the specified register or memory//functionnew(stringname="");super.new(name);endfunction:new// Task: do_pre_read//
// corresponding to this instance of the backdoor class will be updated// via a backdoor read operation.//externvirtuallocaltaskwait_for_change(uvm_objectelement);/*local*/externfunctionvoidstart_update_thread(uvm_objectelement);/*local*/externfunctionvoidkill_update_thread(uvm_objectelement);/*local*/externfunctionbithas_update_threads();// Task: pre_read//// Called before user-defined backdoor register read.//// The registered callback methods are invoked after the invocation// of this method.//virtualtaskpre_read(uvm_reg_itemrw);endtask
// readtaskuvm_reg_backdoor::read(uvm_reg_itemrw);do_pre_read(rw);read_func(rw);do_post_read(rw);endtask// read_funcfunctionvoiduvm_reg_backdoor::read_func(uvm_reg_itemrw);`uvm_fatal("RegModel","uvm_reg_backdoor::read_func() method has not been overloaded");rw.status=UVM_NOT_OK;endfunction`ifdefUVM_SPARSE_ARRAY
//------------------------------------------------------------------------------// @uvm-ieee 1800.2-2020 auto 19.5.1virtualclassuvm_reg_backdoorextendsuvm_object;`uvm_object_abstract_utils(uvm_reg_backdoor)// @uvm-ieee 1800.2-2020 auto 19.5.2.1functionnew(stringname="");super.new(name);endfunction:new// @uvm-ieee 1800.2-2020 auto 19.5.2.2protectedtaskdo_pre_read(uvm_reg_itemrw);pre_read(rw);
externvirtualtaskwait_for_change(uvm_objectelement);/*local*/externfunctionvoidstart_update_thread(uvm_objectelement);/*local*/externfunctionvoidkill_update_thread(uvm_objectelement);/*local*/externfunctionbithas_update_threads();// @uvm-ieee 1800.2-2020 auto 19.5.2.9virtualtaskpre_read(uvm_reg_itemrw);endtask// @uvm-ieee 1800.2-2020 auto 19.5.2.10virtualtaskpost_read(uvm_reg_itemrw);endtask
// readtaskuvm_reg_backdoor::read(uvm_reg_itemrw);do_pre_read(rw);read_func(rw);do_post_read(rw);endtask// read_funcfunctionvoiduvm_reg_backdoor::read_func(uvm_reg_itemrw);`uvm_fatal("RegModel","uvm_reg_backdoor::read_func() method has not been overloaded")rw.set_status(UVM_NOT_OK);endfunction`ifdefUVM_SPARSE_ARRAY