Search code examples
system-veriloguvm

Why uvm_transaction class when we always extend from uvm_sequence_item?


I was going through basics of UVM tutorials. Everywhere I read the transaction objects are always extended from uvm_sequence_item and not uvm_transaction since uvm_sequence_item has additional features like transaction id, etc. If that is the case, why is the uvm_transaction class even there in the UVM class hierarchy?

Who is using uvm_transaction other than uvm_sequence_item extending from it?

Is it because of legacy?


Solution

  • This is what the UVM Class Reference says about this:

    "The uvm_transaction class is the root base class for UVM transactions. Inheriting all the methods of uvm_object, uvm_transaction adds a timing and recording interface.

    This class provides timestamp properties, notification events, and transaction recording support.

    Use of this class as a base for user-defined transactions is deprecated. Its subtype, uvm_sequence_item, shall be used as the base class for all user-defined transaction types."