Start_item/finish_item versus `uvm_do macros

start_item() will tell 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() will then send the sequence_item to the driver.

When you re-use the same sequence_item handle, all the variables that you defined will remain as they were previously set.

There are several things you can do:

  • You can create() a new sequence item, but this has some additional overhead which can impact performance.
  • Randomize the sequence_item again and/or manually set the sequence_item variables

What is your concern about the sequence_item having the same values from the previous sequence?