Question: what is the difference between p_sequencer and m_sequencer?
Answer: m_sequencer is the generic uvm_sequencer pointer. it will always exist for the uvm_sequence and is initialized when the sequence is started. p_sequencer is a typed-specific sequencer pointer, created by registering the sequence to the sequencer using macros.