What is the difference between ovm_transaction and ovm_sequence_item?

In reply to Pratik Shah:

The PDF reference manual has not been updated in a while, but the source code and HTML is what you should be looking at. It says

// CLASS: uvm_transaction
//
// 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.

Use of any UVM class is independent on how you randomize it. You can always add random variables and constraints to any UVM class. And you can add constraints to any UVM class by extending it, or adding inline constraints. You must use a class extended from uvm_sequence_item to send from a sequence.