11

テストから周期を制御できる最上位テストベンチでクロックを作成したいと考えています。私がしたことは、期間を uvm_config_db に設定し、テストベンチに戻すことでした。ビルド フェーズが完了したことを確認するために #1 を入力する必要がありました。そうしないと、get が間違った値を返しました。

module testbench_top;
  int clk_period;

  bit clk = 0;

  initial begin
    #1;    
    void'(uvm_config_db #(int) ::get(null, "uvm_test_top.env", "clk_period", clk_period));
    // Create clk
    forever begin
      #(clk_period/2) clk = !clk;
    end
  end

#1 に悩まされています。構成が設定されていることを確認するより良い方法はありますか? start_of_simulation_phase まで何らかの方法でブロックできますか?

4

2 に答える 2

14

クラス リファレンスに埋もれていることがわかりました。各フェーズのグローバル シングルトン バージョンには<phase name>_ph. 次に、この関数を使用してwait_for_state、シミュレーション フェーズの開始までブロックすることができます。シミュレートされ、うまくいくようです:

module testbench_top;
  int clk_period;

  bit clk = 0;

  initial begin
    start_of_simulation_ph.wait_for_state(UVM_PHASE_STARTED);    
    if(!uvm_config_db #(int) ::get(null, "uvm_test_top.env", "clk_period", clk_period))
      `uvm_fatal("CONFIG", "clk_period not set");
    // Create clk
    forever begin
      #(clk_period/2) clk = !clk;
    end
  end
于 2013-11-09T19:34:55.397 に答える
4

助けることができる別の代替手段は、uvm_config_dbのwait_modified関数です...これはuvmリファレンスマニュアルからの抜粋です

変更待ち:

static task wait_modified(uvm_component cntxt,
                          string  inst_name,
                          string  field_name)

cntxt および inst_name の field_name に構成設定が設定されるまで待ちます。指定されたフィールドに影響を与える新しい構成設定が適用されるまで、タスクはブロックされます。

于 2013-11-23T11:19:59.607 に答える