2017-08-09 15 views
0

何らかの理由で、作成時のオブジェクトがテストで渡された構成を選択しません。トレースを有効にするとGETが表示されず、SETだけが表示されます。 私は次のようにオブジェクトがあります。テストセットの後にuvm_object_utils_beginフィールドが設定されていません

env_cfg = top_env_cfg::type_id::create("env_cfg", this); 
:私は、このオブジェクトを作成しておりますbuild_phaseに

私の環境では
uvm_config_db#(int)::set(this, "*", "set_default_env" ,0); 

:私のテストで

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内を

このオブジェクトを作成した後でも、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には、構成データベースからのデータの取得を自動化するメカニズムがあります( )。リソースが自動的に二つのことを検索していする ために 起こらなければなりません:

  • まず、そのリソースは、フィールドの自動化マクロを使用して工場出荷時に登録する必要があります。
  • 第2に、super.build_phase(phase)はbuild_phase()関数で呼び出される必要があります。あなたはuvm_componentからsuper.build_phase()を呼び出すとき

"自動化" 検索が起こります。あなたがあなたの質問を参照している場合は、uvm_object(UVM build_phaseはありません)を持っているので、uvm_config get()コールを明示的に実行してデータベースからリソースを取得する必要があります。

+0

ありがとう、私はこれを期待しましたが、これを説明する場所が見つかりませんでした。 –

+0

こんにちは - 彼の[コメント](https://stackoverflow.com/questions/44876888/systemverilog-dynamically-accessing-subarray#comment76882659_44889436)に記載されている@Gregと同じように、「感謝」は上向き投票で実際に受け入れられますあなたがそれに満足しているときの答え。 – AndresM

関連する問題