Jump to content

'SEQREQZMB' uvm_error in uvm-1.1b


Recommended Posts

Hi experts,

I found a uvm_error in my tb based on uvm-1.1b as below:

UVM_ERROR @ 6155000: uvm_test_top.tb0.agentA.sequencer [sEQREQZMB] The task responsible for requesting a wait_for_grant on sequencer 'uvm_test_top.tb0.agentA.sequencer' for sequence 'uvm_test_top.tb0.agentA.sequencer. seqA' has been killed, to avoid a deadlock the sequence will be removed from the arbitration queues

And there is a forever block in seqA body(), which will send items to driver all the time.

how can i stop such sequence which run on agt.main_phase, when main_phase start to jump the next phase???

It does not work using the following.

function void phase_ready_to_end(uvm_phase phase);
  302         static int count = 0;
  303         count++;
  304         if(phase.get_name()=="main") begin
  305             if(count>=20) begin
  308                 [COLOR="red"]agtA.sequencer[/COLOR].stop_sequences();
  309             end
  310         end
  311     endfunction : phase_ready_to_end

Thanks in advance

Link to comment
Share on other sites

I suspect the code in line 308 never executes; there is no guarantee there will be more than one call to ready_to_end. Unless somebody raises an objection when ready_to_end is called, phase_ended will happen immediately. If you remove all the "count" stuff, you should avoid the error you are getting. You could implement the phase_ready_to_end in the sequencer itself and avoid the "agtA.sequencer". I'm pretty sure you could then move it to phase_ended() and the stop_sequences() would be guaranteed to be called before the sequence is killed.

Link to comment
Share on other sites

I suspect the code in line 308 never executes; there is no guarantee there will be more than one call to ready_to_end. Unless somebody raises an objection when ready_to_end is called, phase_ended will happen immediately. If you remove all the "count" stuff, you should avoid the error you are getting. You could implement the phase_ready_to_end in the sequencer itself and avoid the "agtA.sequencer". I'm pretty sure you could then move it to phase_ended() and the stop_sequences() would be guaranteed to be called before the sequence is killed.

Thanks. Both work.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...