In reply to SilentB:
object_id.write(status, wadd, outgoing, UVM_BACKDOOR);
Unfortunately, the register layer uses 2-state datatypes all over the place. In this case, the built-in uvm_mem::write task is defined as:
virtual task write(
output uvm_status_e status,
input uvm_reg_addr_t offset,
input uvm_reg_data_t value,
input uvm_path_e path = UVM_DEFAULT_PATH,
input uvm_reg_map map = null,
input uvm_sequence_base parent = null,
input int prior = -1,
input uvm_object extension = null,
input string fname = "",
input int lineno = 0
)
Where uvm_reg_data_t is 2-state, so you can’t pass an X or Z through this API. I guess the thinking goes that X’s or Z’s are protocol specific, and so should be abstracted. Not sure I agree with that.
Since it appears you are trying to leverage the string based hdl_paths stored in your model here for your backdoor, you might consider directly using get_full_hdl_path() and uvm_hdl_deposit() instead. Those are the methods used internally to implement the backdoor. See uvm_mem::backdoor_write() for the details.