`uvm_declare_p_sequencer可以认为就是定义一个SEQUENCER类型的变量p_sequencer,并且定义一个函数m_set_p_sequencer()(这个函数在uvm_sequence类中肯定以经存在了,否则还需要用户再手动调用,而我们从来没有自己调用过,所以UVM源代码中原本应该已经实现了该函数的调用了,这里要做的就是override覆盖原有函数定义),该函...
`uvm_declare_p_sequencer,使得virtualsequence可以使用声明后的p_sequencer(类型为mcdf_virtual_sequencer),来进一步回溯到其内部的各个sequencer句柄。在这里,使用`uvm_declare_p_sequencer是较为方便的,因为这个宏在后台,可以新创建一个p_sequencer变量,而将m_sequencer的默认变量 ...
UVM发送激励的基本流程为:由sequence_item组成的sequence挂载到sequencer上,再由sequencer仲裁后发送给driver,最终由driver进行驱动。在这个过程中,每一个sequence_item都有一个uvm_sequencer_base类型的成员变量m_sequencer,并且在其中定义了set_sequencer()的方法,为这个句柄赋值,同时还在这个方法内部调用了m_set_p_seque...
p_sequencer是由`uvm_decalre_p_sequencer宏,定义在用户指定的sequence(例如类库中的your_sequence)中的,用户指定的类型的句柄(例如类库中的your_sequencer),也就是说 p_sequencer是由uvm_decalre_p_sequencer宏产生的 p_sequencer是用户指定的sequence的成员变量(这里是your_sequence的成员变量,因为`uvm_decalre_p_...
使用uvm_declare_p_sequencer后,就可以在sequence中调用挂载sequencer的成员函数和成员变量了。 2. `uvm_do()宏 **使用形式: ** UVM中提供了多个宏,uvm_do,uvm_do_with,`uvm_do_on_with等,但最终都是调用了uvm_do_on_pri_with宏。uvm_do_on_pri_with宏第一个参数可以传入sequence,也可以传入transaction...
因为m_sequencer 是uvm_sequencr_base (uvm_sequencr 的基类)类型,而不是my_sequencer 类型。 所以要cast:把m_sequencer 转换成my_sequencer: 但是好麻烦。所以内建了一个宏:uvm_declare_p_sequencer(SEQUENCER) 相当于声明如下变量: 自动将m_sequencer cast 成p_sequencer。在pre_body()前完成。
由于在同一个项目中各sequence通常都是类似的,因此可以将很多公用的函数或者任务写在base_sequence中,其他sequence都从此类派生。sequence是支持派生与继承的。同时对于使用了uvm_declare_p_sequencer的base_sequence,在派生的sequence中不需要再次声明,p_sequencer直接成为新的sequence的成员变量。
为了解决上面提到的资源引用问题,UVM又搞了一个p_sequencer的句柄,用户可以通过宏`uvm_declare_p_sequencer来创建。 p_sequencer的类型是我们绑定给sequence的sequencer的实际类型,它会通过$cast函数去引用到m_sequencer引用的对象,这样一来,我们就可以通过p_...
可以理解为每个sequence中默认都有m_sequencer这一成员变量。 m_sequencer 是一个指向执行当前sequence的sequencer句柄。 p_sequencer: 可以理解为parent_sequencer,父类sequencer 使用`uvm_declare_p_sequencer(my_sequencer) 宏声明p_sequencer,宏本质是在当前sequence也就是case0_sequence中声明了一个成员变量p_sequencer...
为了解决上面提到的资源引用问题,UVM又搞了一个p_sequencer的句柄,用户可以通过宏`uvm_declare_p_sequencer来创建。 p_sequencer的类型是我们绑定给sequence的sequencer的实际类型,它会通过$cast函数去引用到m_sequencer引用的对象,这样一来,我们就可以通过p_sequencer去引用实际sequencer中的资源了。