【UVM基础】m_sequencer 和 p_sequencer 概念与区别(面试常问)

文章目录

    • 1、基本概念
      • m_sequencer
      • p_sequencer
    • 2、解释m_seqeuncer和p_sequencer的区别?
    • 3、uvm_declare_p_sequencer宏做了哪几件事?
    • 参考

1、基本概念

m_sequencer

  • 类型是uvm_sequencer_base类型,定义在uvm_sequence_item类中,注意:类型很重要
  • 可以理解为每个sequence中默认都有m_sequencer这一成员变量
  • m_sequencer 是一个指向执行当前sequence的sequencer句柄

p_sequencer

  • 使用 `uvm_declare_p_sequencer(my_sequencer) 宏声明p_sequencer,宏本质是在当前sequence也就是case0_sequence中声明了一个成员变量p_sequencer。
  • 类型为my_sequencer,定义在case0_sequence中。
  • p_sequencer是my_sequencer的句柄

2、解释m_seqeuncer和p_sequencer的区别?

m_sequecer是定义在sequence_item中的成员变量,类型是uvm_sequencer_base,当seqence挂载的时候m_sequencer会自动指向同类型的sequener。

sequence是从uvm_object拓展而来,它不能访问uvm_component组成的uvm层次结构,如果非要访问uvm_component就要通过一个媒介,这个媒介就是m_sequencer。m_sequencer可用于从sequence中访问UVM组件层次结构中的配置信息和其他资源。

但又由于m_sequencer的类型是uvm_sequencer_base(uvm_sequencer的基类),而不是具体的my_sequencer类型。所以需要声明一个my_sequencer类型的句柄指向m_sequencer。(这里面其实就包含了两个过程:声明my_sequener类型的句柄;cast强制转换指向m_sequener)。其实这两个过程,UVM也为我们提供好了现成的宏,即:uvm_declare_p_sequencer宏。

3、uvm_declare_p_sequencer宏做了哪几件事?

  • 声明了一个sequencer类型的句柄p_sequencer
  • 将m_sequencer句柄通过$cast(p_sequencer,m_sequencer)转化为p_sequencer 类型的句柄。

参考

  • m_sequencer和p_sequencer的个人理解

你可能感兴趣的:(数字IC验证百宝箱,经验分享,面试,数字IC,芯片验证,SV)