uvm 中 m_sequncer和p_sequencer
m_sequnce是sequence或sequence item 的成员变量,即sequence/item一旦“挂载”到某一个sequencer上,那么该sequencer的句柄即被赋值于m_sequencer(uvm_sequencer_base类);而p_sequencer通常需要通过在定义sequence类使,通过宏`uvm_declare_p_sequencer(SEQUENCER)声明,间接定义p_sequencer成员变量。m_sequencer与p_sequencer均指向同一个挂载的sequencer句柄,只是前者使父类句柄,后者往往是所挂载sequencer句柄(子类句柄)。
避坑指南
sequence如果需要访问所挂载sequencer的新增成员,那么必须使用p_sequencer子类句柄,这也是为什么virtual sequence在定义时经常通过宏来间接声明p_sequencer句柄。