RGM ovm_rgm_read_all_reg sequence not initiating properly

Hi All,

when I try to run the sequence ovm_rgm_read_all_reg_seq sequence.The rgm_sequencer is unable to send any packet to my driver.
I get following message :

OVM_INFO @ 1000 ns: ovm_test_top.m_usp_mas_env_h.m_mas_rgm_agent_h.m_rgm_sqr [ovm_rgm_read_all_reg_seq] Register “RX_STATUS” is holding unknown value. Skipping it from built-in-sequence
OVM_INFO @ 1000 ns: ovm_test_top.m_usp_mas_env_h.m_mas_rgm_agent_h.m_rgm_sqr [ovm_rgm_read_all_reg_seq] Register “TX_STATUS” is holding unknown value. Skipping it from built-in-sequence

I grep ed this message in the rgm library and I found it to be in this file
ovm_rgm_sequence_library.sv
piece of code of that file:
class ovm_rgm_read_all_reg_seq extends ovm_rgm_built_in_base_seq;
/*
Variable: skip_uninitialized_regs
This field can be used to skip registers which hold un-initialized values. By default it
is set. Use can reset it by using set_cnfig mechanism or by setting this field value
*/
bit skip_uninitialized_regs=1;

virtual function void get_configs();
bit sur;
super.get_configs();
if(p_sequencer.get_config_int(“ovm_rgm_read_all_reg_seq.skip_uninitialized_regs”, sur))
skip_uninitialized_regs=sur;
endfunction

virtual task body();
ovm_rgm_reg_op regop;
setup();
ovm_test_done.raise_objection(this);

for(int i=0; i<cnt; i++)
begin
  for(int j=0; j<regs.size(); j++) begin
    if(skip_uninitialized_regs) begin
      // If register is holding unknown value ('x), filter it out. No point in testing it
      ovm_rgm_logic_val_t e='x<<(`OVM_RGM_DWIDTH-regs[j].get_num_bits()), v=regs[j].read();
      e>>=`OVM_RGM_DWIDTH-regs[j].get_num_bits();
      if(e===v) begin
        p_sequencer.ovm_report_info(get_type_name(), $sformatf(
          "Register \"%s\" is holding unknown value. 1Skipping it from built-in-sequence %d", 
          regs[j].get_name(),v), OVM_LOW);
        continue;
      end
    end
    `ovm_create(regop)
    read_reg(regop, regs[j]);
  end
end
post_body();
ovm_test_done.drop_objection(this); 

endtask

`ovm_sequence_utils(ovm_rgm_read_all_reg_seq, ovm_rgm_sequencer)

function new(string name=“ovm_rgm_read_all_reg_seq”);
super.new(name);
endfunction // new
endclass


as a result of this rgm sequencer is not able to send any requests to the driver.

I am sure setting this skip_uninitialized_regs to 0 is not the solution.
Also the fact that the address string gets printed properly in the warning message says that the database linking with the rgm_sqr is correct.

Can anyone tell me what can go wrong?
There is no issue with xml file generation …
Do I need to set any flags etc so that the default values of all the register are not taken as X. from the xml file i can see that the default value of the registers are non 0 .

Let me add that my write sequence is working perfectly fine (ovm_rgm_write_all_seq)

Thanks,
Nipoon

Hi Nipoon,

I also encountered similar issue waith built-in sequence: uvm_rgm_read_all_reg_seq.
I guess you must have got some solution for this issue, can you pls share the same.
It will be of great help.

Thanks,
Abhishek