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

上一篇 / 下一篇  2018-12-21 08:53:41

   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的调用成功,则该值将被覆盖;

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  

数据统计

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

RSS订阅