作用:
为了能更好的在sequence中访问启动该sequence的sequencer类中的变量,我们引用了p_sequencer。
常规做法:
如果不使用p_sequencer,我们想要在sequence访问启动该sequence的sequencer类中的变量,该怎么做呢?
在sequence中的body中,定义一个启动该sequence的sequencer类的变量,然后通过cast进行类型转换后,就可以进行访问。详细参考张强《UVM实战》中代码
使用:
若在sequence访问启动该sequence的sequencer类为my_sequencer,那我们在使用p_sequencer的特性时,只需在在定义sequence时, 使用此宏声明sequencer的类型。如uvm_declare_p_sequencer( my_sequencer) 。 这个宏的本质是声明了一个my_sequencer类型的成员变量 p_sequencer。
UVM之后会自动将m_sequencer通过cast转换成p_sequencer。 这个过程在pre_body( ) 之前就完成了。 因此在sequence中可以直接使用成员变量p_sequencer来引用变量。
截图来自《UVM实战》