Hello Everyone,
I am trying to control a sub virtual sequencer's non-virtual sub sequencers using a top level virtual sequencer.
It looks like this diagram.
<start of diagram>
.------------------------------------------------------.
| my_test
| .--------------------------------------------------. |
| | sequences | |
| '--------------------------------------------------' |
| .--------------------------------------------------. |
| | my_env | |
| '--------------------------------------------------' |
'/----------------------------------------------------\'
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
.----------------------------------------------------------------------------------------------------.
| my_env |
| .------------------------. |
| | my_virtual_sequencer | |
| '------------------------' |
| .-----------------------------------. .----------------------------. .---------------------------. |
| | sub_virtual_agent | | sub_agent_a | | sub_agent_b | |
| | .-------------------------------. | | .------------------------. | | .-----------------------. | |
| | | sub_virtual_sequencer | | | | sub_sequencer_a | | | | sub_sequencer_b | | |
| | '-------------------------------' | | '------------------------' | | '-----------------------' | |
| | .-------------------------. | | .------------------------. | | .-----------------------. | |
| | | sub_agent_3 | | | | driver_a | | | | driver_b | | |
| | .-------------------------. | | | '------------------------' | | '-----------------------' | |
| | | sub_agent_2 | | | | .------------------------. | | .-----------------------. | |
| | .---------------------------. | | | | | monitor_a | | | | monitor_b | | |
| | | sub_agent_1 | | | | | '------------------------' | | '-----------------------' | |
| | | .-----------------------. | | | | '----------------------------' '---------------------------' |
| | | | sub_sequencer_1 | | | | | |
| | | '-----------------------' | | | | |
| | | .-----------------------. | | | | |
| | | | driver_1 | | | | | |
| | | '-----------------------' | | | | |
| | | .-----------------------. | | | | |
| | | | monitor_1 | | |-' | |
| | | '-----------------------' |-' | |
| | '---------------------------' | |
| '-----------------------------------' |
'----------------------------------------------------------------------------------------------------'
<end of diagram>
I am trying to apply section 4.8 Virtual Sequences of uvm users guide.
But I think I am missing on something.
I have a top level virtual sequence that has the top level virtual sequencer as its p_sequencer. I have this in the macro:
`uvm_declare_p_sequencer(my_virtual_sequencer)
And then I have this in the task body() to access the sub sequencer of the sub virtual sequencer:
`uvm_do_on(sub_sequence_1, p_sequencer.i_sub_virtual_sequencer.i_sub_sequencer_1);
sub_sequence_1 is a physical sequence.
Is this correct under the UVM standard?
If not, how do I properly control i_sub_sequencer_1?
This is how I access it in the test build_phase:
uvm_config_db #(uvm_object_wrapper)::set(this, "i_my_env,i_my_virtual_sequencer.main_phase","default_sequence",my_virtual_sequence::type_id::get());
Any help/inputs to this is much appreciated.
Thanks,
Martin