关于UVM driver的幕后

关于UVM driver的幕后

我们都知道,driver要和sequencer相连,然后通过seq_item_port接口的get_next_item方法和sequence之间进行交互。

但是,你有没有去查过get_next_item这个方法究竟是哪个类提供的呢?

让我们打开网页

https://verificationacademy.com/verification-methodology-reference/uvm/docs_1.2/html/

我们来看看seq_item_port这个类的继承关系,他在driver源码中的原型是uvm_seq_item_pull_port #(REQ, RSP) seq_item_port;

我们查看uvm_seq_item_pull_port的继承关系

他继承自uvm_port_base#(uvm_sqr_if_base#(REQ,RSP))

而uvm_port_base的继承关系是

神奇的事情发生了uvm_port_base继承自IF?!

这是怎么回事?

我们来看看uvm_port_base的源码

virtual class uvm_port_base #(type IF=uvm_void) extends IF;

妹想到啊,居然还可以参数化继承的父类,UVM通过这种方式,让uvm_port_base这个类的父类能够变化,而uvm_seq_item_pull_port在派生的时候,参数化的类型正是uvm_sqr_if_base

因此,如果你去看uvm_port_base的源码,根本找不到get_next_item这个方法,因为它实际上在uvm_sqr_if_base中。通过参数化父类的方法,让uvm_port_base获得了uvm_sqr_if_base的方法,秀飞了。

查找get_next_item

我学到了,你们呢?

posted @ 2021-12-11 13:59  空白MAX  阅读(230)  评论(0编辑  收藏  举报