Connections to DUT Interfaces(从VirtInterfaceFunctionCallChain开始)

上一篇 / 下一篇  2018-09-28 10:38:02

       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

        不应使用此方法有两个主要原因。

  • 它不可重用 - 如果测试环境层次结构发生更改,则必须更新这些functions。
  • 不必要的额外工作 - 要在环境中访问子组件,必须将虚拟接口句柄向下传递到层次结构的中间级别,这些中间级别对虚拟接口没有用处。此外,为了使此方法在环境层次结构更改方面更具可重用性,您必须嵌入额外的决策代码(如上例所示)。或者编写每个函数来迭代所有子类,或者为每个子类调用函数。这需要更多不必要的工作。
               

       



TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2018-12-14  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

数据统计

  • 访问量: 15187
  • 日志数: 49
  • 建立时间: 2018-09-03
  • 更新时间: 2018-12-12

RSS订阅

Open Toolbar