1、说明
避免绝对路径的另外一种方式是使用
interface
。在
SystemVerilog
中使用
interface
来连接验证平台与
DUT
的端口;
2、定义
interface my_if(input clk, input rst_n);
logic [7:0] data;
logic valid;
endinterface
3、在类里面的声明
class my_driver extends uvm_driver;
virtual
my_if vif;
.....
endclass
在类里面声明必须是无实体的,否则会报语法错误;
4、跟top_tb的连接
UVM
引进了
config_db
机制。在
config_db
机制中,分为set
和
get
两步操作。所谓
set
操作,可以简单地理解成是
“
寄信
”
,而
get
则相当于是
“
收信
”
。
在
top_tb
中执行
set
操作:
src/ch2/section2.2/2.2.4/top_tb.sv
initial begin
uvm_config_db#(virtual my_if):
:set(null, "uvm_test_top", "vif", input_if)
;
end
跟top_tb的input_if连接;
src/ch2/section2.2/2.2.4/my_driver.sv
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
`uvm_info("my_driver", "build_phase is called", UVM_LOW);
if(!uvm_config_db#(virtual my_if)::
get(this, "", "vif", vif)
)
`uvm_fatal("my_driver", "virtual interface must be set for vif!!!")
endfunction
config_db
的
set
和
get
函数都有四个参数,这两个函数的第三个参数必须完全一致。
set
函数的第四个参数表示要将哪个interface,通过
config_db
传递给
my_driver
,
get
函数的第四个参数表示把得到的
interface
传递给哪个
my_driver
的成员变量。
set函数的第二个参数表示的是路径索引;