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-02-13  
     12
3456789
10111213141516
17181920212223
2425262728  

數據統計

  • 訪問量: 22424
  • 日志數: 75
  • 建立時間: 2018-09-03
  • 更新時間: 2018-12-29

RSS訂閱

热血江湖私服 幸运飞艇官网 幸运飞艇官网 魔域私服 热血江湖私服 幸运飞艇 幸运飞艇 幸运飞艇官网 魔域私服 幸运飞艇官网