// - Write complement of random value via back door// - Read via front door and expect inverted random valuefor(intk=0;k<mem.get_size();k++)beginval=$random&uvm_reg_data_t'((1'b1<<n_bits)-1);if(n_bits>32)val=uvm_reg_data_t'(val<<32)|$random;if(mode=="RO")beginmem.peek(status,k,exp);if(status!=UVM_IS_OK)begin`uvm_error("uvm_mem_access_seq",$sformatf("Status was %s when reading \"%s[%0d]\" through backdoor.",status.name(),mem.get_full_name(),k))endendelseexp=val;mem.write(status,k,val,UVM_FRONTDOOR,maps[j],this);if(status!=UVM_IS_OK)begin`uvm_error("uvm_mem_access_seq",$sformatf("Status was %s when writing \"%s[%0d]\" through map \"%s\".",status.name(),mem.get_full_name(),k,maps[j].get_full_name()))
// The memory to be tested//uvm_memmem;randuvm_reg_randvalrand_reg_val;`uvm_object_utils(uvm_mem_single_access_seq)// @uvm-ieee 1800.2-2020 auto E.5.1.3functionnew(stringname="uam_mem_single_access_seq");super.new(name);rand_reg_val=new();endfunctionvirtualtaskbody();stringmode;uvm_reg_mapmaps[$];intn_bits;if(mem==null)begin
// - Write complement of random value via back door// - Read via front door and expect inverted random valuefor(intk=0;k<mem.get_size();k++)beginvoid'(rand_reg_val.randomize());val=rand_reg_val.randval&uvm_reg_data_t'((1'b1<<n_bits)-1);if(mode=="RO")beginmem.peek(status,k,exp);if(status!=UVM_IS_OK)begin`uvm_error("uvm_mem_access_seq",$sformatf("Status was %s when reading \"%s[%0d]\" through backdoor.",status.name(),mem.get_full_name(),k))endendelseexp=val;mem.write(status,k,val,UVM_FRONTDOOR,maps[j],this);if(status!=UVM_IS_OK)begin`uvm_error("uvm_mem_access_seq",$sformatf("Status was %s when writing \"%s[%0d]\" through map \"%s\".",status.name(),mem.get_full_name(),k,maps[j].get_full_name()))end
// and may be randomized in order to generate a random register value// based on the context of the sequence's random seed without altering// the state of other random members of the sequence classuvm_reg_randval;randuvm_reg_data_trandval;endclass