永利皇宫官网网址

Configuring a Test Environment(从Config/Params Package开始

上一篇 / 下一篇  2018-12-24 09:44:57

   Config/Params Package

      当参数化DUT和/或接口时,参数值也几乎总是在测试平台中使用。不应在实例化中使用直接文字值指定这些参数。而是在package中定义命名参数值,并在DUT端和设计的测试平台端使用命名值。
       这有助于避免在一方改变而另一方没有改变时的错误。或者,如果测试配置参数是DUT参数的某个函数,则在进行更改时可能会出现计算错误。
       请注意,此package不适用于所有测试参数。如果您具有DUT未使用的特定于test的参数,则应在test中直接设置这些值。DUT参数包应仅用于DUT和test之间共享的参数。

   Example use of a Parameter Package  

       在下面基于WISHBONE总线的示例中,有两个WISHBONE总线设备。A slave memory and an Ethernet Media Access Controller (MAC). 参数放在一个包(test_params_pkg)中,然后用于实例化顶层模块和测试平台测试类内的WISHBONE设备。

      【此处需插一幅图】

      测试参数包如下所示:

      package test_params_pkg;
          import uvm_pkg::*;

          // WISHBONE general slave parameters
          parameter slave_addr_space_sz = 32'h00100000;

          // WISHBONE slave memory parameters
          parameter mem_slave_size = 18; // 2**slave_mem_size = size in words(32 bits) of wb slave memory
          parameter mem_slave_wb_id = 0; // WISHBONE bus slave id of wb slave memory

          // MAC WISHBONE parameters
          parameter mac_m_wb_id = 0; // WISHBONE bus master id of MAC
          parameter mac_slave_wb_id = 1; // WISHBONE bus slave id of MAC

      endpackage

      顶层模块中用于实例化WISHBONE总线从存储器模块的参数值(mem_slave_size,mem_slave_wb_id)用法如下所示。 请注意top_mac模块中test_params_pkg的导入。

      module top_mac;
      ...
           import test_params_pkg::*;

           // WISHBONE interface instance
           // Supports up to 8 masters and up to 8 slaves
           wishbone_bus_syscon_if wb_bus_if();

           //-----------------------------------
           // WISHBONE 0, slave 0: 000000 - 0fffff
           // this is 1 Mbytes of memory

           wb_slave_mem #(mem_slave_size) wb_s_0 (
               // inputs
              .clk ( wb_bus_if.clk ),
              .rst ( wb_bus_if.rst ),
              .adr ( wb_bus_if.s_addr ),
              .din ( wb_bus_if.s_wdata ),
              .cyc ( wb_bus_if.s_cyc ),
              .stb ( wb_bus_if.s_stb[mem_slave_wb_id] ),
              .sel ( wb_bus_if.s_sel[3:0] ),
              .we ( wb_bus_if.s_we ),
              // outputs
              .dout( wb_bus_if.s_rdata[mem_slave_wb_id] ),
              .ack ( wb_bus_if.s_ack[mem_slave_wb_id] ),
              .err ( wb_bus_if.s_err[mem_slave_wb_id] ),
              .rty ( wb_bus_if.s_rty[mem_slave_wb_id] )
           );

       ...

       endmodule

       测试平台的测试类中用于设置WISHBONE总线从存储器的配置对象值的参数用法如下所示。请注意,代码不使用32'h00100000的数字文字作为地址值,而是使用涉及DUT参数(mem_slave_size)的表达式。

       package tests_pkg;
           ...
           import test_params_pkg::*;
           ...
           `include "test_mac_simple_duplex.svh"
       endpackage

       //-----------------------------------------------------------------
       class test_mac_simple_duplex extends uvm_test;
       ...
          wb_config wb_config_0; // config object for WISHBONE BUS
          ...

          function void set_wishbone_config_params();
             //set configuration info wb_config_0 = new();

             wb_config_0.m_s_mem_wb_base_addr = mem_slave_wb_id * slave_addr_space_sz; // base address of slave mem
             wb_config_0.m_mem_slave_size = 2**(mem_slave_size+2); // default is 1 Mbyte
             wb_config_0.m_mem_slave_wb_id = mem_slave_wb_id; // WISHBONE bus slave id of slave mem
             ...
          endfunction
          ...
       endclass

   Multiple Instances

       如果有多个参数集实例,则可以为参数创建命名约定,也可以使用基于参数的参数化方法在每个实例的基础上组织参数集。

       【此处需插一幅图】

       package test_params_pkg;
       import uvm_pkg::*;

           // WISHBONE general slave parameters
           parameter slave_addr_space_sz = 32'h00100000;

           // WISHBONE slave memory parameters
           class WISHBONE_SLAVE #(int mem_slave_size = 18, int mem_slave_wb_id = 0);
           endclass

           // Specializations for each slave memory instance
           typedef WISHBONE_SLAVE #(18, 0) WISHBONE_SLAVE_0;
           typedef WISHBONE_SLAVE #(18, 1) WISHBONE_SLAVE_1;

           // MAC WISHBONE parameters
           parameter mac_m_wb_id = 0; // WISHBONE bus master id of MAC
           parameter mac_slave_wb_id = 2; // WISHBONE bus slave id of MAC

       endpackage

       要访问或使用上述代码中的特殊化WISHBONE_SLAVE_0或WISHBONE_SLAVE_1中指定的参数(如mem_slave_size或mem_slave_wb_id),请使用以下语法name_of_specialization :: parameter_name,如下所示:

       module top_mac;
       ...

           import test_params_pkg::*;

           // WISHBONE interface instance
           // Supports up to 8 masters and up to 8 slaves
           wishbone_bus_syscon_if wb_bus_if();

           //-----------------------------------
           // WISHBONE 0, slave 0: 000000 - 0fffff
           // this is 1 Mbytes of memory
           wb_slave_mem #(WISHBONE_SLAVE_0::mem_slave_size) wb_s_0 (
               // inputs
               .clk ( wb_bus_if.clk ),
               .rst ( wb_bus_if.rst ),
               .adr ( wb_bus_if.s_addr ),
               .din ( wb_bus_if.s_wdata ),
               .cyc ( wb_bus_if.s_cyc ),
               .stb ( wb_bus_if.s_stb [WISHBONE_SLAVE_0::mem_slave_wb_id] ),
               .sel ( wb_bus_if.s_sel[3:0] ),
               .we ( wb_bus_if.s_we ),
               // outputs
               .dout( wb_bus_if.s_rdata[WISHBONE_SLAVE_0::mem_slave_wb_id] ),
               .ack ( wb_bus_if.s_ack [WISHBONE_SLAVE_0::mem_slave_wb_id] ),
               .err ( wb_bus_if.s_err [WISHBONE_SLAVE_0::mem_slave_wb_id] ),
               .rty ( wb_bus_if.s_rty [WISHBONE_SLAVE_0::mem_slave_wb_id] )
            );

            ...
        endmodule

        这里有关于参数和重用之间关系的进一步讨论。

        (在http://verificationacademy.com/uvm-ovm上在线下载源代码示例)。
 



TAG:

 

评分:0

我来说两句

显示全部

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

日历

« 2019-01-18  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

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

RSS订阅

Open Toolbar