关于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
我学到了,你们呢?