| |
Function Call Chaining
遗憾的是,将实际接口引用分配给测试平台内部的虚拟接口句柄的方法是在UVM用户指南中普遍使用的xbus示例中使用的方法。许多用户自然认为这是推荐的方法,因为它在示例中使用。然而,不建议采用这种方法。
它涉及创建一个函数(在示例中称为assign_vi),该函数将虚拟接口句柄作为参数,并在一个或多个子组件上调用等效函数(也称为assign_vi)。这在层次结构中重复,直到到达子组件。需要虚拟接口的任何组件都声明本地句柄并将函数参数分配给本地句柄。
In the connect() function of test env:
xbus0.assign_vi(xbus_tb_top.xi0);
In the xbus env:
function void assign_vi(virtual interface xbus_if xi);
xi0 = xi;
if( bus_monitor != null) begin
bus_monitor.assign_vi(xi);
end
for(int i = 0; i < num_masters; i++) begin
masters[i].assign_vi(xi);
end
for(int i = 0; i < num_slaves; i++) begin
slaves[i].assign_vi(xi);
end
endfunction : assign_vi
In the agent:
function void assign_vi(virtual interface xbus_if xmi);
monitor.assign_vi(xmi);
if (is_active == UVM_ACTIVE) begin
sequencer.assign_vi(xmi);
driver.assign_vi(xmi);
end
endfunction : assign_vi
In the monitor:
function void assign_vi(virtual interface xbus_if xmi);
this.xmi = xmi;
endfunction
不应使用此方法有两个主要原因。