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

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

日志

Configuring a Test Environment(从Resource/config db开始

已有 722 次阅读| 2018-12-21 08:53 |系统分类:芯片设计

   Resources/config db

     uvm_config_db类是访问资源数据库的推荐方法。资源是在多个组件或object之间共享的任何信息。我们使用uvm_config_db :: set将某些内容放入数据库,并使用uvm_config_db :: get从数据库中检索信息。uvm_config_db类已参数化,因此数据库的行为就像将其分区为许多特定于类型的“迷你数据库”一样。对类型没有限制 - 它可以是类,uvm_object,内置类型,如位,字节或虚拟接口。
      uvm_config_db有两种典型用法。第一种是将虚拟接口从DUT传递到test,第二种是将配置类传递到测试平台。

   The set method  

     set方法的完整格式是void uvm_config_db #( type T = int )::set( uvm_component cntxt , string inst_name , string field_name , T value );

  • T是要配置的元素的类型 - 通常是虚拟接口或配置对象类;
  • cntxt和inst_name一起形成一个路径,用于在数据库中查找资源;范围是通过将实例名称附加到上下文的完整层次名称来形成的,即
    {cntxt.get_full_name(),".",inst_name}.
  • Field_name提供资源的名称;
  • value是实际将被放入数据库的东西。

      将虚拟接口放入配置数据库的示例如下所示:

      interface ahb_if data_port_if( clk , reset );
      interface ahb_if control_port_if( clk , reset );
      ...
      uvm_config_db #( virtual ahb_if )::set( null , "uvm_test_top" , "data_port" , data_port_if );  
      uvm_config_db #( virtual ahb_if )::set( null , "uvm_test_top" , "control_port" , control_port_if );

      此代码将两个AHB接口放入分层位置“uvm_test_top”的配置数据库中,该位置是run_test()创建的顶层测试组件的默认位置。使用两个不同的名称“data_port”和“control_port”将两个不同的接口放入数据库。

      Notes:

  • 我们使用“uvm_test_top”因为它比“*”更精确,更有效;除非您的顶层test在测试组件的构造函数中执行除super.new(name,parent)之外的操作,否则这将始终有效;如果在测试组件中执行了不同的操作,则必须相应地调整实例名称
  • 我们在第一个参数中使用“null”,因为此代码位于顶层模块而不是组件中;

       在env中配置agents的示例如下所示:

      class env extends uvm_env;
          //
          ahb_agent_config ahb_agent_config_h;
          //
          function void build_phase( uvm_phase phase );
              ...
              m_ahb_agent = ahb_agent::type_id::create("m_ahb_agent" , this );
              ...
              uvm_config_db #( ahb_agent_config )::set( this , "m_ahb_agent*" , "ahb_agent_config" , ahb_agent_config_h );
              ...
          endfunction
      endclass

      此代码设置ahb agent及其所有子组件的配置。关于此代码需要注意两点:

  • 我们使用“this”作为我们的第一个参数,所以我们可以确定我们只在组件层次结构中配置了这个env的agent而不是任何其他的ahb agent;
  • 我们使用“m_ahb_agent *”来确保我们配置agent及其子代。 如果没有'*',我们只会配置agent本身而不是driver,sequencer and monitor ;

     The get method

    get方法的完整格式是bit uvm_config_db #( type T = int )::get( uvm_component cntxt , string inst_name , string field_name , ref T value );

  • T是要配置的元素的类型 - 通常是虚拟接口或配置对象类;
  • cntxt和inst_name一起形成一个路径,用于在数据库中查找资源;范围是通过将实例名称附加到上下文的完整层次名称来形成的,即
    {cntxt.get_full_name(),".",inst_name}.
  • Field_name提供资源的名称;
  • value是将从数据库中检索的内容;如果对get的调用成功,则该值将被覆盖;

  • 点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 访问数
关闭

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

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

GMT+8, 2024-4-26 03:24 , Processed in 0.032877 second(s), 18 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网