Flow control dependency in a sequence (or virtual sequence) on events monitored on other interface in IP

Hi Verification Academy,

I have a main_flow_sequence controlling different kinds of frames injection using more lower level sequences.
I would like to wait between the first call of lower level sequence(let’s name it seq_B) till the next time I call it. This wait will be inside the main_flow_sequence.
This wait is required since the seq_B is running in it’s beginning few DUT state registers configurations for the new frame, which may harm the transformation/conversion of the current frame.
One of the output interfaces of the IP is sending messages to a “message FIFO” block inside a micro-controller, I would like to imitate the FW mode of work in my test-bench, so would like to call the lower sequence (seq_B) again only after was monitored a message of end_of_frame of the current frame.

What is the recommended approach to send notification monitored on one of the interfaces of the DUT to the main_flow_sequence?
a. Using uvm_event, and waiting in the sequence to it’s triggering?
b. Using TLM port, which will notify us on this end_of_frame message?
c. Using a call-back? Not really sure if it is an option for what I looking for…

Please feel free to elaborate what is preferred?
Why it is preferred over the other?
Any pitfalls I should avoid?
Or maybe some other ideas…
In case there is a good paper(DVCON, SNUG, etc.) to read on this topic will be happy if you can point me out.

Thanks!

In reply to Michael54:
Hi,Michael
i think it is easy to use uvm_event to do this thing, when monitor a message of end_of_frame of the current frame, we can trigger the uvm_event .and the between the two calls of the seq_B ,we can block by this uvm_event.

Hoping to help you,and very glad to communicate with everyone in this Forum.

Best regards, mike

In reply to mike_wang:

I’m not sure if a uvm_event is the roght construct. I’m using a uvm_event_pool application to communicate between a monitor and asequence. And I believe this is exactly what you need.
If you are interested in a working code example please reply to ma personal email
christoph@christoph-suehnel.de

Hi,

Definitely, callback is not a relavent option to go with in this scenario. using uvm_event along uvm_event_pool is the best way to meet your requirement. You can find an example of using uvm_events in the below link. . In a class based TB, you can push uvm_event_pool into config_db and get in the other components/objects to access a common event pool

link for example for uvm event pool

Hope this helps.

Putta Satish