【UVM基础】m_sequencer 和 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 类型的句柄。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MoorePlus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值