| |
Connect/VirtInterfacePackage
Setting Virtual Interface Properties in the Testbench with Packages
将实际接口引用分配给测试平台内的虚拟接口句柄的一种简单方法是在package中创建虚拟接口变量。该方法具有的优点是简便性。但是,由于其缺点,这种方法只应考虑相对简单的设计,这些设计没有参数化接口,或者一个接口没有多个实例,因此该方法不推荐用于一般用途。
它具有以下限制可重用性的缺点:
【此处需一幅图】
Virtual Interface Variable in Package
在此连接方法中,虚拟接口变量通过package传递到测试平台test class。在此示例中,使用的package是agent package,但它可以是顶层模块和UVM test package之间共享的任何package。
package wishbone_pkg;
...
virtual wishbone_bus_syscon_if v_wb_bus_if; // virtual wishbone interface pointer
...
`include "wb_m_bus_driver.svh"
`include "wb_bus_monitor.svh"
...
endpackage
在顶层模块中,只需将实际的接口实例分配给package中的变量:
module top_mac;
...
// WISHBONE interface instance
wishbone_bus_syscon_if wb_bus_if();
...
initial begin
//set virtual interface to wishbone bus
wishbone_pkg::v_wb_bus_if = wb_bus_if;
...
end
endmodule
然后,在test中,应将package中的虚拟接口句柄变量分配给组件(agent)配置对象中的虚拟接口句柄。
class test_mac_simple_duplex extends uvm_test;
wb_config wb_config_0; // config object for WISHBONE BUS
function void build_phase(uvm_phase phase);
wb_config_0 = wb_config::type_id::create("wb_config_0");
// ...
wb_config_0.v_wb_bus_if = wishbone_pkg::v_wb_bus_if; // From the wishbone_pkg
uvm_config_db #(wb_config)::set(this, "*","wb_config",wb_config_0);
// ....
endfunction: build_phase
【笔误:此处差一个endclass】
使用虚拟接口的任何组件都应创建本地(local)句柄,并将配置对象句柄分配给connect() method中的本地句柄。
// wishbone master driver
class wb_m_bus_driver extends uvm_driver #(wb_txn, wb_txn);
...
virtual wishbone_bus_syscon_if m_v_wb_bus_if;
wb_config m_config;
...
function void build_phase(uvm_phase phase);
// get config object
if (!uvm_config_db#(wb_config)::get(this,"","wb_config", m_config) )
`uvm_fatal("CONFIG_LOAD", "Cannot get() configuration wb_config from uvm_config_db. Have you set() it?")
m_id = m_config.m_wb_master_id;
endfunction
function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
m_v_wb_bus_if = m_config.v_wb_bus_if; // set local virtual if property
endfunction : connect_phase
...
endclass
请注意,使用agent package共享虚拟接口句柄会产生严重影响 - 在UVM测试平台中只能使用一个agent实例,因为只有可用的虚拟接口句柄。
(在http://verificationacademy.com/uvm-ovm上在线下载源代码示例)。