微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > uvm_driver类中的端口

uvm_driver类中的端口

时间:10-02 整理:3721RD 点击:
各位大神:
UVM_driver类中的seq_item_port端口 调用的get_next_item方法怎么是sequencer类中的?在port类中没有找到get_next_item方法还有driver在例化时没有显示的调用seq_item_port.get_next_item(item)方法,这个数据包是怎么传递进来的?
通过查找uvm_1.1d源代码,并没有在start_item 和finish_item函数中找到sequence的写入数据包操作。
我个人感觉seq_item_port端口调用的就是sequencer中的方法,但是seq_item_port貌似和sequencer没有什么关系。求大神解答一下

1. 一般的,在driver的main_phase或者run_phase中显式的调用seq_item_port.get_next_item();
2. seq_item_port.get_next_item()最终会调用相应sequencer的get_next_item,而这个task会从m_req_fifo中拿数。
3. sequence会通过各种task向m_req_fifo写入数据。

class uvm_seq_item_pull_port #(type REQ=int, type RSP=REQ)
extends uvm_port_base #(uvm_sqr_if_base #(REQ, RSP));
`UVM_SEQ_PORT(`UVM_SEQ_ITEM_PULL_MASK, "uvm_seq_item_pull_port")
`UVM_SEQ_ITEM_PULL_IMP(this.m_if, REQ, RSP, t, t)

bit print_enabled;

endclass
中的宏UVM_SEQ_ITEM_PULL_IMP里面定义了task get_next_item
我没有继续追,再继续应该是通过sequencer的export获取sequence_item,因为driver的port已经connect到sequencer的export了。

get_next_item 应该是端口调用的,但是在端口基类中只有一个get_next_item方法,该方法不做任何事情就返回了,我查了下源代码,只有sequencer中才有get_next_item方法具体的实现。

第二个问题:
sequence.start(sequencer)或者start_item
会调用sequencer.send_request,你查看这个task会看到有fifo的put操作
而sequencer.get_next_item会有fifo的get(peek)操作
而get_next_item的发起源头是driver,这样driver就获得了sequence_item

task get_next_item(output REQ t); this.m_if.get_next_item(t); endtask
明显有一个调用export中get_next_item的语句,怎么会没有返回呢

get_next_item中的参数是输出的,相当于返回。从这里get到一个transaction item.

you can treat it as the uvm system embedded port.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top