How does a UVM sequence change the transactions based on DUT Outputs

In reply to n347:

This link may be useful for you.
https://verificationacademy.com/forums/uvm/sending-data-monitor-sequence

Alternatively, you can use uvm_queue#(seq_item) together with uvm_pool.
In monitor:


typedef uvm_object_string_pool #(uvm_queue#(seq_item)) uvm_queue_pool;
uvm_queue#(seq_item) queue = uvm_queue_pool::get_global("key");
queue.push_back(item);

In your sequence, you get the queue from the same key and check how many items are existed in the queue, then you can do whatever you want.


typedef uvm_object_string_pool #(uvm_queue#(seq_item)) uvm_queue_pool;
uvm_queue#(seq_item) queue = uvm_queue_pool::get_global("key");
if(queue.size() > 100) begin
 // Do something
end