UVM 的sequence 在继承时执行body任务和pre_body任务会影响么?

UVM 的sequence 在继承时执行body任务和pre_body任务会影响么?这是我在学习UVM的路上遇见的一个疑问。我的理解是UVM内部实行的是pre_body/body/post_body任务按顺序调用。没调用之前都是空的,如果自建的sequence实现了就会override, 继承同理。

如果父类有pre_body(), 子类只有body task, 那么当子类会先执行父类的pre_body(),再执行子类的body()。如果子类有实现的pre_body(), 那么子类会先执行自己的pre_body(), 再执行子类的body().

测试代码如下:

class start_seq extends uvm_sequence#(uvm_sequence_item);
    `uvm_object_utils(start_seq)

    function new(string name="start_seq");
        `uvm_info("start_seq", "start_seq new function", UVM_LOW)
    endfunction

    virtual task body();
        `uvm_info("start_seq", "send a my_sequence!!!!", UVM_LOW)
    endtask

    virtual task pre_body();
        `uvm_info("start_seq", "start_seq pre_body task", UVM_LOW)
    endtask
endclass
class next_seq extends start_seq;
    `uvm_object_utils(next_seq)

function new(string name="next_seq
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用UVM构建激励,通常需要在任务(task)的主体(body)之前进行初始化操作。UVM提供了一种特定的方法来完成这个初始化,即pre_body。 pre_bodyUVM中一个特殊的构造函数,可以在任务开始执行之前执行一些初始化操作。这个函数在任务主体执行之前自动调用,并可以用于对变量、对象或其他一些资源进行初始化。 使用pre_body的方式可以确保激励在运行之前处于正确的状态。在pre_body函数内部,我们可以对需要使用的变量进行赋初值,初始化对象,以及执行其他必要的操作。 例如,假设我们需要构建一个名为my_sequence的序列,该序列需要在执行任务之前对某个变量进行初始化。我们可以在my_sequence类中定义pre_body函数,并在其中对该变量赋初值。 下面是一个简单的示例: class my_sequence extends uvm_sequence; `uvm_sequence_utils(my_sequence) ... function new(string name = "my_sequence"); super.new(name); endfunction virtual task pre_body(); // 执行初始化操作 my_variable = 0; endtask ... endclass 在这个示例中,my_sequence继承uvm_sequence类,并使用`uvm_sequence_utils宏进行注册。在构造函数中,我们调用了父类的构造函数,并将名字传递给它。 在pre_body函数中,我们执行了初始化操作,将my_variable变量的值设置为0。然后,在任务的主体中,可以使用已经初始化的my_variable变量。 通过使用pre_body来进行初始化操作,我们可以确保激励在任务执行之前处于正确的状态,从而提高测试的可靠性和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值