I am confused about why UVM has two separate classes: uvm_transaction and uvm_sequence_item.
If uvm_sequence_item only adds some extra features over uvm_transaction, then why didn’t the UVM creators directly include those features inside uvm_transaction itself?
There must be some architectural or practical reason behind creating two different classes instead of one.
Is uvm_transaction intended to be used separately in some specific scenarios? If yes, then in what kind of real verification scenarios would engineers use uvm_transaction instead of uvm_sequence_item?