I am looking for ways to modify my UVM sequence to call a diff sequence/transaction or stop the stimulus requests to the DUT based on DUT outputs.
For example: if the DUT has an output packet size greater than 1000, the Sequence should slow down driving packets to the DUT. Or modify the transactions… How can this be achieved?
I could think of
Some kind of communication between monitor and Sequencer?
Driver sending a response back to the sequence? But driver doesnt know about DUT outputs , only monitor knows.
I believe this is not a good idea. You are storing seq_items in a queue and do not evaluate the item content. You are only looking for the number of seq_items. It is suffifient to count the number of seq_items.
BTW the driver can count the number of packets and opass them back to the sequence. This is in my eyes the best solution
I am looking for ways to modify my UVM sequence to call a diff sequence/transaction or stop the stimulus requests to the DUT based on DUT outputs.
For example: if the DUT has an output packet size greater than 1000, the Sequence should slow down driving packets to the DUT. Or modify the transactions… How can this be achieved?
I could think of
Some kind of communication between monitor and Sequencer?
Driver sending a response back to the sequence? But driver doesnt know about DUT outputs , only monitor knows.
Please suggest!
Driver can collect the DUT outputs and it can send it back to sequence using the following methods
are 2 alternatives sending back data.
The last one needs an additional connection to the sequencer.
Sending response is only efficient when the response is capture for the same signal interface that driver controls.
What happened when your driver controls an interface (virtual interface) but DUT returns response in different interface?
Reactive agent is also a good solution for this requirement.
If you receive the response in a different agent then there is no simple answer. It needs some more investigations. If the respinse is an interrupt you might add the interrupt signal/signals to the initializing interface. If there is no direct relationship you have to use horizontal synchronization. There are different approaches. One is to send data from 1 agent to another one using uvm_event/uvm_event_pool. This approach allows to pass data along with the uvm_event. I have posted here in the forum a solution for this.