Hello,
I am writing an arbiter that needs to interrogate sequence items from multiple sequencers before I get them (consume them) to make my arbitration decision.
I don’t want to remove the sequence item from the sequencer right away. I would like to first inspect the sequence item, then based on the sequence item attributes, make a decision whether to get sequence item or not. It is possible that sequence items will remain in sequencer for thousands of cycles until they are ready to be consumed.
My driver extends off of ovm_component (multiple sequencers prevented me from extending from ovm_driver base class).
My driver is comprised of:
ovm_seq_item_pull_port #(sequence_item_base_c, sequence_item_base_c) m_seq_item_port0;
sequence_item_base_c req;
at posedge of every clock:
if ( m_seq_item_port0.has_do_available() ) begin
m_seq_item_port0.peek(req);
…
if (seq_item_passes_evaluation)
m_seq_item_port0.get(req) // I have also tried “item_done” here
I have tried many combinations of “has_do_available”, “peek”, “get”, “try_next_item”/“item_done”, etc. without success.
Can someone tell me the proper methods I need to use?
Thank you,
Bobby