IChip Posted July 21, 2012 Report Share Posted July 21, 2012 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 Quote Link to comment Share on other sites More sharing options...
mastrick Posted July 21, 2012 Report Share Posted July 21, 2012 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. Quote Link to comment Share on other sites More sharing options...
IChip Posted July 22, 2012 Author Report Share Posted July 22, 2012 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.