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 :
-
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?
-
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?
-
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