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