Uvm_analysis_port and transaction class

The transaction class that is sent to passed using uvm_analysis port, does it need to be of uvm_sequence_item class type?
From the UVM reference manual, it does not appear to be a requirement but I want to confirm?

Also, can i replace the class with a simple structure instead. Is there any restriction.
I am asking this because, the type of data that is passed from monitor to scoreboard is typically just related data with no methods inside them to any processing. So, a structure would be more efficient I guess.
Can anyone comment on this please?

In reply to verif_learner:

It does not need to be a uvm_sequence_item, a class is usually more efficient since you are just passing a handle through and not the data.

Usually you are reconstructing a transaction sent by the driver, so that is why you see people using the same class type for analysis ports.

In reply to dave_59:

In reply to verif_learner:
It does not need to be a uvm_sequence_item, a class is usually more efficient since you are just passing a handle through and not the data.
Usually you are reconstructing a transaction sent by the driver, so that is why you see people using the same class type for analysis ports.

For the sake of argument, is it possible to pass a structure too?

On your second point about reconstruction, I would like to differ.
The transaction sent to driver typically tends to have a lot of rand variables for randomization. Some of them may be abstract variables to control the randomization process.
All this is unnecessary for a transaction that goes from monitor to scoreboard, as we are collecting data that is post randomization and hence we can simplify a bit I guess.

In reply to verif_learner:

I don’t believe a transaction with all data members needed for driving your design does not really put an essential overhead on the simulaton, because the transaction objects are destroyed after they have been processed.

In reply to chr_sue:

ok. thanks. I will keep that in mind.

In reply to verif_learner:

For the sake of argument, is it possible to pass a structure too?

I don’t like to argue. Why don’t you try it with a small example.