endif(this_priority<0)beginif(parent_sequence==null)this_priority=100;elsethis_priority=parent_sequence.get_priority();end// Check that the response queue is empty from earlier runsclear_response_queue();m_priority=this_priority;if(m_sequencer!=null)beginintegerhandle;uvm_tr_streamstream;if(m_parent_sequence==null)beginstream=m_sequencer.get_tr_stream(get_name(),"Transactions");handle=m_sequencer.begin_tr(this,get_name());m_tr_recorder=uvm_recorder::get_recorder_from_handle(handle);endelsebegin
// Added in IEEE. Not in UVM 1.2// @uvm-ieee 1800.2-2020 auto 15.3.2.4externvirtualfunctionuvm_sequence_baseget_arbitration_sequence(intindex);//----------------------------------------------------------------------------// INTERNAL METHODS - DO NOT CALL DIRECTLY, ONLY OVERLOAD IF VIRTUAL//----------------------------------------------------------------------------externprotectedfunctionvoidgrant_queued_locks();externprotectedtaskm_select_sequence(outputuvm_sequence_requestselected_sequence_request);externprotectedfunctionintm_choose_next_request();externtaskm_wait_for_arbitration_completed(intrequest_id);externfunctionvoidm_set_arbitration_completed(intrequest_id);externlocaltaskm_lock_req(uvm_sequence_basesequence_ptr,bitlock);
// This semaphore is provided to ensure that a sequence is only being// run from a single thread at a time.protectedsemaphorem_sequence_state_mutex;protecteduvm_sequence_statem_sequence_state;intm_next_transaction_id=1;localintm_priority=-1;uvm_recorderm_tr_recorder;intm_wait_for_grant_semaphore;// Each sequencer will assign a sequence id. When a sequence is talking to multiple// sequencers, each sequence_id is managed separatelyprotectedintm_sqr_seq_ids[int];protectedbitchildren_array[uvm_sequence_base];protecteduvm_sequence_itemresponse_queue[$];protectedintresponse_queue_depth=8;protectedbitresponse_queue_error_report_enabled;