UVM学习笔记--sequencer的lock和grab以及sequence的有效性

先做小结:

1、lock:sequence独占sequencer,暂时拥有sequencer的所有权,在lock期间只有这个sequence在启动和发送transaction。

2、grab:也用于暂时拥有sequencer的所有权,比lock操作优先级更高,它几乎是一发出就拥有了sequencer的所有权。

3、sequence的is_relevant函数和wait_for_relevant函数:如果为1,说明此sequence有效,否则无效。在wait_for_relevant中,必须将使sequence无效的条件清除。当wait_for_relevant返回后,sequencer会继续调用sequenceis_relevant,发现依然是无效状态,则继续调用wait_for_relevant。系统会处于死循环的状态。

再看例子:

lock操作:

class sequence1 extends uvm_sequence #(my_transaction);
    …
    virtual task body();
        …
        repeat (3) begin
            `uvm_do_with(m_trans, {m_trans.pload.size < 500;})
            `uvm_info("sequence1", "send one transaction", UVM_MEDIUM)
        end

        lock();
        `uvm_info("sequence1", "locked the sequencer ", UVM_MEDIUM)
        repeat (4) begin
            `uvm_do_with(m_trans, {m_trans.pload.size < 500;})
            `uvm_info("sequence1", "send one transaction", UVM_MEDIUM)
        end
        `uvm_info("sequence1", "unlocked the sequencer ", UVM_MEDIUM)
        unlock();
        repeat (3) begin
            `uvm_do_with(m_trans, {m_trans.pload.size < 500;})
            `uvm_info("sequence1", "send one transaction", UVM_MEDIUM)
        end
        …
    endtask
    …
endclass
运行结果:在 lock 语句前, sequence0 和 seuquence1交替产生transaction(前述代码参见上一篇笔记《UVM学习笔记--在同一sequencer上启动多个sequence 》);在 lock 语句后,一直发送 sequence1 transaction ,直到 unlock 语句被调用后, sequence0 和 seuquence1又开始交替产生 transaction
一些特殊情况:

1、如果两个sequence都试图使用lock任务来获取sequencer的所有权则会如何呢?

答:先获得所有权的sequence在执行完毕后才会将所有权交还给另外一个sequence

2、如果两个sequence同时试图使用grab任务获取sequencer的所有权将会如何呢?

答:与两个sequence同时试图调用lock函数 一样,在先获得所有权的sequence执行完毕后才会将所有权交还给另外一个试图所有权的sequence

3、如果一个sequence在使用grab任务获取sequencer的所有权前,另外一个sequence已经使用lock任务获得了sequencer的所有权则会如何呢?

答:grab任务会一直等待lock的释放。grab任务还是比较讲文明的,虽然它会插队,但是绝不会打断别人正在进行的事情。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值