2017-08-09 30 views
0

出於某種原因,我創建時的對象不會選擇通過測試傳遞的配置。當啓用跟蹤時,我看不到GET,只有SET。 我有對象如下:uvm_object_utils_begin在測試集文件失敗後設置字段

class top_env_cfg extends uvm_object; 
    int set_default_env = 1; 
    `uvm_object_utils_begin(top_env_cfg) 
     `uvm_field_int(set_default_env,UVM_DEFAULT); 
    `uvm_object_utils_end 
    function new(string name = "top_env_cfg"); 
    super.new(name); 
    endfunction 
endclass 

在我的測試中,build_phase裏面我做了以下內容:

uvm_config_db#(int)::set(this, "*", "set_default_env" ,0); 

在我的環境中build_phase我創造這個對象爲:

env_cfg = top_env_cfg::type_id::create("env_cfg", this); 

創建此對象後,set_default_env仍然爲1. 什麼可能是錯誤的,以及我如何進行調試。 在此先感謝。

+0

你可以在你的環境的'build_phase()'中添加代碼嗎?你在哪裏爲這個資源做一個'uvm_config_db get()'? – AndresM

+0

首先感謝修復代碼的可讀性。 –

+0

我不想使用uvm_config_db :: get ...,我期待對象類中的utils宏應該在對象創建時獲得。這是uvm_env發生的事情。當我將類的擴展名從uvm_object改爲uvm_component時,顯式的get可以正常工作,但仍然不會在創建時隱式獲取。這裏是我的get:status = uvm_config_db#(int):: get(this,「」,「enb_env」,enb_env); –

回答

1

瞭解「自動檢索config_db資源」的重要之處在於它實際上自動發生了而不是This Verilab paper解釋引擎蓋下會發生什麼,我在這裏引用的相關章節:

[...]一個問題,往往是問關於檢索數據是: 你總是必須顯式調用get()函數?答案是短的 它取決於。在UVM中,有機制可以自動從配置數據庫中檢索數據。在 爲了使資源自動檢索兩件事情必須發生 :

  • 首先,資源必須與工廠使用的自動化領域的宏註冊。
  • 其次,必須在build_phase()函數中調用super.build_phase(phase)。當你從一個uvm_component調用super.build_phase()

的 「自動化」 檢索會發生。如果您提到的是您的問題,您有uvm_object(您沒有UVM build_phase),所以您需要明確執行uvm_config get()調用以從數據庫檢索資源。

+0

謝謝,我期待這一點,但找不到任何描述這一點的地方。 –

+0

嗨 - 就像@Greg在他的[評論](https://stackoverflow.com/questions/44876888/systemverilog-dynamically-accessing-subarray#comment76882659_44889436)中提到的那樣,「謝謝」最好通過提高投票和實際接受當你對此感到滿意時,一個答案。 – AndresM