永利皇宫官网网址

Connections to DUT Interfaces(从Connect/VirtInterfacePackage开始)

上一篇 / 下一篇  2018-09-27 11:03:24

        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上在线下载源代码示例)。



TAG:

 

评分:0

我来说两句

显示全部

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

日历

« 2019-01-13  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 19365
  • 日志数: 75
  • 建立时间: 2018-09-03
  • 更新时间: 2018-12-29

RSS订阅

Open Toolbar