ee_king的个人空间 https://blog.eetop.cn/1494617 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

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

已有 346 次阅读| 2018-12-24 09:44 |系统分类:芯片设计

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



点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 访问数
关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-23 21:14 , Processed in 0.028627 second(s), 18 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部