美文网首页
UVM源码角度分析lock() grab()的区别

UVM源码角度分析lock() grab()的区别

作者: li_li_li_1202 | 来源:发表于2022-02-22 15:04 被阅读0次

    lock基本用法

    首先通过一个例子来看一下:


    seq0 seq1 顶层启动,挂载在同一个sqr上
    • 如果没有lock请求的话,seq0/seq1将会交错发送
    • seq0获得sqr的发送权以后,会一直发送seq0的数据。但是也会把lock之前的seq1发送完毕。直到unlock调用释放sqr的使用权。

    grab的基本用法

    将上面case的lock/unlock替换成grab/ungrab.

    仿真结果
    • 相比于lock,grab的优先级更高,一旦获得sqr的使用权,就会只发送对应的seq

    源码是如何实现lock的?

    lock的意思是将sqr用seq占用住。

    • lock/grab都是调用了同一个函数,只不过有一个参数不一样而已。
    • lock和grab的区别就是将new_req存放的位置在arb_sequence_q[]的前面还是后面
    • grant_queued_locks会多次调用
    • lock_list里面存放的是占用sqr的seq,is_block()会根据lock_list查找,如果被block住的话,line686就会放在blocked_seqs[]中,然后将其放在arb_sequence_q[]的前面。
    • line698,m_set_arbitration_completed().
      这块比较难理解,我就只能理解到这里了。

    相关文章

      网友评论

          本文标题:UVM源码角度分析lock() grab()的区别

          本文链接:https://www.haomeiwen.com/subject/uqtqfrtx.html