I have multiple agents for my code and hence I have multiple subscribers to check the coverage for each of them.
I want to the test to self end when both subscribers’ coverage are 100%
I have a flag called test_done in the sequence that keeps the sequence running untile It’s 1. But How could I make this flag=1 when both subscribers coverage is 100%? Where this code should be written?
I tried to run in the environment but I got an error.
Here are the codes:
Subscriber
virtual function get_cov();
return this.test_done_sub;
endfunction
virtual function void write(seq_item t);
real current_coverage;
item = t;
seq_cnt++;
cg_identifier.sample();
current_coverage = cg_identifier.get_coverage();
`uvm_info(get_full_name(),$sformatf("%0d Items sampled, Coverage %d %% reached", seq_cnt, current_coverage), UVM_MEDIUM)
if(current_coverage == 100)
test_done_sub = 1;
endfunction: write
Environment:
function void check_phase(uvm_phase phase);
`uvm_info(get_full_name(),$sformatf("\ntest_done_sub for master = %d \n test_done_sub for slave = %d\n", m_fc.get_cov(), s_fc.get_cov()), UVM_HIGH);
if(m_fc.get_cov() && s_fc.get_cov() )
test_done = 1;
endfunction: check_phase
Either Check phase or run phase, I get this error for both subscribers:
UVM_ERROR @ 346185: uvm_test_top.sm_env_h.hl_s_agnt_h.sqr@@hl_s_seq [uvm_test_top.sm_env_h.hl_s_agnt_h.sqr.hl_s_seq] Response queue overflow, response was dropped
UVM_ERROR @ 346375: uvm_test_top.sm_env_h.hl_m_agnt_h.sqr@@hl_m_seq [uvm_test_top.sm_env_h.hl_m_agnt_h.sqr.hl_m_seq] Response queue overflow, response was dropped