[SEQREQZMB]

UVM_ERROR /opt/cadence/INCISIV121/tools/uvm/uvm_lib/uvm_sv/sv/seq/uvm_sequencer_base.svh(709) @ 5174793: uvm_test_top.jtag_env.jtag_agent.jtag_sequencer [SEQREQZMB] The task responsible for requesting a wait_for_grant on sequencer ‘uvm_test_top.jtag_env.jtag_agent.jtag_sequencer’ for sequence ‘uvm_test_top.jtag_env.jtag_agent.jtag_sequencer.seq’ has been killed, to avoid a deadlock the sequence will be removed from the arbitration queues

Hi, I am getting the above error ,can any one suggest reason fot this.

This error indicates that a sequence was terminated prior to completion. Since the sequence thread was no longer running, the sequencer removed it from the arbitration queue.

You need to look at the code that starts the sequence to see if it kills the sequence prematurely. Do you have a fork/join construct around it?

In reply to cgales:

Thanks,
My code look like as given below

tx = transaction::type_id::create("tx");
	 start_item(tx);
	 assert( tx.randomize() );
	 finish_item(tx);
	 fork
	    begin
	       start_item(tx);
	       assert( tx.randomize() );
               finish_item(tx);
	    end

	    begin
	       repeat(6)@(posedge p_sequencer.intf.clk);
	       p_sequencer.intf.trst_n =0;
	    end
	 join_any
	 disable fork;
repeat(6)@(posedge p_sequencer.intf.clk);
	       p_sequencer.intf.trst_n =1;

After executing

start_item(tx);
	 assert( tx.randomize() );
	 finish_item(tx);

This error is coming.

Several comments on the code you have written:

  1. You should never access interface signals outside of an agent’s driver. By doing this, you can cause undesired conflicts and code that is very difficult to debug.

  2. You should never use ‘p_sequencer’. This results in code that is non-portable. You should use the standard UVM sequencer.

  3. You should not use assert() around a randomize call. If you disable assertions, the randomize() call won’t happen.

  4. The main issue is that you have a start_item()/finish_item() inside a fork/join_any block. When the second part of the fork completes and you disable the fork, it will terminate the first begin/end block which is when the start_item() is waiting for sequencer arbitration.

In reply to cgales:

Thanks cgales,

Your suggestions works. I remove disable fork and my code is running well.