Sequence and sequencer interactions in UVM

I am a bit confused the way sequence and sequencers interact in UVM.

  1. does sequence hold sequencer object variable
  2. if 1) is true, when is the object variable assigned with sequencer object variable
  3. does a sequencer call a sequence or vice versa

Can anyone explain how this communication between sequencer and sequence happens?

In reply to verif_learner:

This chapter of the UVM Cookbook explains everything about sequence/sequencer/driver interaction.

In reply to cgales:

In reply to verif_learner:
This chapter of the UVM Cookbook explains everything about sequence/sequencer/driver interaction.

Thanks a lot. Probably, not a very related question but I would like to get comments.
There is a code chunk - apb_write_seq.start(env.m_apb_agent.m_sequencer);

A code like above means that the sequence that is starting its sub-sequence has to know the testbench hierarchy (env.m_apb_agent.m_sequencer). So, when the same environment is re-used in a top level environment (sort of vertical re-use) then would these sequences that have hard coded these sequencer paths need to be re-coded?

In reply to verif_learner:

The code that you referred to should be part of a test, which is not considered reusable. You can reuse the environment as part of vertical reuse, and you can reuse the apb_write_seq as well, but the new test will need to know the hierarchy of the sequencer, as you pointed out.

In reply to cgales:

In reply to verif_learner:
The code that you referred to should be part of a test, which is not considered reusable. You can reuse the environment as part of vertical reuse, and you can reuse the apb_write_seq as well, but the new test will need to know the hierarchy of the sequencer, as you pointed out.

Right. I looked at the rest of the code. Test alone know the actual hierarchy. Rest of the sequence hierarchies are passing around the sequencer object variables