UVM学习——UVM phase的objection属性

UVM Objection

作用

1、控制taskphase的运行和终止
2、同步各个component同名的task phase

代码示例

示例一

上一篇博客的基础上对driver的代码进行修改,之后运行仿真。

class my_driver extends uvm_driver #(my_transaction);

    `uvm_component_utils(my_driver)

    function new(string name = "my_driver", uvm_component parent);
        super.new(name, parent);
    endfunction

    virtual task reset_phase(uvm_phase phase);
        phase.raise_objection(this);
        #100;
        `uvm_info("DRV_RESET_PHASE", "Now driver reset the DUT...", UVM_MEDIUM);
        phase.drop_objection(this);
    endtask

    virtual task configure_phase(uvm_phase phase);
        phase.raise_objection(this);
        #100;
        `uvm_info("DRV_CONFIGURE_PHASE", "Now driver config the DUT...", UVM_MEDIUM);
        phase.drop_objection(this);
    endtask

    virtual task run_phase(uvm_phase phase);
        # 3000;
        forever begin
            seq_item_port.get_next_item(req);
            `uvm_info("DRV_RUN_PHASE", req.sprint(), UVM_MEDIUM)
            #100;
            seq_item_port.item_done();
        end
    endtask

endclass

reset_phase中不加raise和drop objection,运行仿真,从打印信息中可以看出,reset_phase中的语句并未执行。
在这里插入图片描述

在reset_phase中加上raise和drop objection之后,reset phase的语句正常执行。
在这里插入图片描述
无消耗仿真时间的时间语句的phase可正常执行,上述代码注释一部分如下,也可正常执行。

virtual task reset_phase(uvm_phase phase);
        // phase.raise_objection(this);
        // #100;
        `uvm_info("DRV_RESET_PHASE", "Now driver reset the DUT...", UVM_MEDIUM);
        // phase.drop_objection(this);
    endtask

在这里插入图片描述

注意

1、Objection对于task phase才有意义,控制task phase的运行和终止。
2、必须在执行消耗仿真时间的语句之前raise objection
3、在task phase结束时drop objection。
4、在一个component中的某个task phase中raise和drop objection会影响其他component中同名的task phase。
5、建议在每个task phase中都raise和drop objection一次。

使用原则

1、raise和drop objection成对使用。
2、尽量在每个task phase使用raise objection和drop objection。
3、不要在无限循环中使用raise objection和drop objection。
4、每个phase中尽量只使用一次。
5、raise objection需要在消耗仿真时间的时间语句之前。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值