Jump to content
Somasekhar

`uvm_do(), `uvm_create/`uvm_send vs sart_item/finish_item

Recommended Posts

I've been using various types of calling uvm_sequences while developing sequences and every approach works. But I've a doubt what is the best one to be used when compared between using uvm_create, uvm_send and start_item, finish_item. In either cases the type and amount of control on the transactions is the same.

Can anyone help me in understanding the differences better?

Are there any guidelines to choose a specific style of coding for a given requirement?

Thanks

Share this post


Link to post
Share on other sites

Hello Somasekhar,

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.

2.wait_for_grant().
3.randomize the req.
4.send the req.
5.wait for item done.
6.get response(optional).

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().

Thanks,
Bhagwan Jha

Agnisys Inc.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×