美文网首页
seq&&seqr&&driver源码分析

seq&&seqr&&driver源码分析

作者: li_li_li_1202 | 来源:发表于2022-02-23 11:13 被阅读0次

在UVM的框架中,我们经常看到sequence的body()函数中,经常有`uvm_do这个宏,其实这个宏里面就包含了跟driver的交互所有细节,本章节就从uvm_do说起。

`uvm_do相关的宏

本质上就是uvm_do_on_pri_with()

create_item(seq_or_item,sqr)

  • 比较易懂就是创建实例,第一个参数可以是sequence也可以是item

start_item(uvm_sequence_item,sqr)

  • uvm_sequencer_base::wait_for_grant();


    wait_for_grant()
m_wait_for_arbitration_completed

get_next_item(req);

uvm_sequencer::get_next_item m_select_sequence
  • m_set_arbitration_completed()与start_item的wait_for_gant呼应,然后start_item执行完毕。
  • m_choose_next_request():就是通过仲裁算法以及lock/is_relevant等得到可以用的sequence_item。
  • m_wait_for_available_sequence()是在没有有效的sequence以后调用wait_for_relevant()

finish_item(item)

  • callback函数 mid_do/post_do
send_request
  • 类型转换,牵扯到随机,如果是A是基类,A.randomize()对应的是A里面的变量随机,如果B extends A,B里面有rand bit c,A=B,也就是$case(A,B),这样的话A.randomize就会随机化变量c。
  • m_req_fifo.try_put对应的就是get_next_item里面的peek。
wait_for_item_done
  • finish里面的wait_for_item_done对应到driver里面的item_done!
item_done 一张图概括一下

伪代码可以参考:https://www.edrawmax.cn/online/share.html?code=83c3b8b8799e11ec8a7585ec8adb0e95

相关文章

网友评论

      本文标题:seq&&seqr&&driver源码分析

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