Question on sequence _item execution flow

Hello,
I have a question on sequence item execution flow as descried below :

UVM reference 1.2 states following (page 414):

"
Sequence item execution flow looks like
Use code

parent_seq.start_item(item, priority);
item.randomize(…) [with {constraints}];
parent_seq.finish_item(item);
or
`uvm_do_with_prior(item, constraints, priority)"

The following methods are called, in order

**sequencer.wait_for_grant(prior) (task)
parent_seq.pre_do(1) (task)
parent_seq.mid_do(item) (func)
sequencer.send_request(item) (func)
sequencer.wait_for_item_done() (task)
parent_seq.post_do(item) (func)
**
I have following questions with reference to above :

  1. When the send_request is called on sequencer, the item is written into the request fifo between sequencer and driver and driver will get the handle to the item from request fifo when it calls get_next_item. Is that correct statement?

  2. The methods send_request, wait_for_grant, wait_for_item_done are methods of uvm_sequencer_base class and also of uvm_sequence_base class. So does it mean that start_item calls methods of uvm_sequence_base and these in turn call corresponding methods of uvm_sequencer_base using the m_sequencer handle in sequence which points to sequencer?

  3. Methods start_item and finish_item of uvm_sequence_base are virtual methods. So are there any situations where user has to override them in the extended sequences?

thanks,
-sunil puranik

In reply to puranik.sunil@tcs.com:

The UVM has grown to having too many different ways that accomplish the same functionality without documented a recommended flow or a decision tree for you to make your choice.

Nowhere is this more evident than with UVM sequences, with some people preferring to use macros with _do callbacks to extend functionality, and others using OOP with virtual methods.

We prefer that you stick with the start_item/finish_item API, and extend as necessary. Then you do not need to worry about all the other methods. Just look at the execution flow here.

Thanks Dave for the reply.
In the examples I have seen, start_item/finish_items methods are not extended. Under what condition these need to be extended. Can you please give some example or a link.
thanks,
-sunil