UVM Register layer writing/reading X values

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.