UVM_Sequence has a body method and communication between driver and sequencer, so we must follow some steps as shown below.
1.create_item() / create req.
3.randomize the req.
4.send the req.
5.wait for item done.
As per your question,
`uvm_do:- This macro takes seq_item or sequence as an argument. On calling `uvm_do() the above-defined 6 steps and start_item and finish_item will be executed.
`uvm_create:- This macro creates the item or sequence.
`uvm_send:- create() and randomize() are skipped, rest all other steps are executed.
start_item():- Tells the sequencer that your sequence is available for arbitration by the sequencer. When it returns, your sequence should then set the variables in your sequence_item to the required values (i.e. by randomization or manual methods)
finish_item():- when all the steps are executed in body method then call finish_item() to finish the transactions.
Note : start_item() and finish_item() calls do not call pre or post_body().