Vengineerの妄想

人生を妄想しています。

UVM 1.0 : default_sequence(その2)


UVM 1.0では、OVM 2.1.1/UVM 1.0EAとdefault_sequenceの設定方法が変わりました。

src/seq/uvm_sequencer_base.svhのset_phase_sequence関数のコメント部に次のような説明があります。
日本語部分は、私が追加しました。
  //  シーケンス(myseq_t)のインスタンス(myseq)を生成
  //| myseq_t myseq = new("myseq");
  //  制約を追加
  //| myseq.randomize() with { ... };
  //  この方法で'''default_sequece'''を設定することになる。
  //  uvm_config_dbのset関数を使って、'''myseq'''を'''default_sequence'''に設定する
  //| uvm_config_db #(uvm_sequence_base)::set(null, "top.agent.myseqr.main_phase",
  //|                                         "default_sequence",
  //|                                         myseq);

ファクトリを使う場合は、次のような感じ
  //| uvm_config_db #(uvm_object_wrapper)::set(null, "top.agent.myseqr.main_phase",
  //|                                          "default_sequence",
  //|                                          myseq_type::type_id::get());

get_full_name()を使うと、ちょっと変わる(top.agentが無くなる)
  //
  // The uvm_resource_db can similarly be used.
  //
  //| myseq_t myseq = new("myseq");
  //| myseq.randomize() with { ... };
  //| uvm_resource_db #(uvm_sequence_base)::set({get_full_name(), ".myseqr.main_phase",
  //|                                           "default_sequence",
  //|                                           myseq, this);
  //
  //| uvm_resource_db #(uvm_object_wrapper)::set({get_full_name(), ".myseqr.main_phase",
  //|                                            "default_sequence",
  //|                                            myseq_t::type_id::get(),
  //|                                            this );

このことは、Users Guide4.10.3 Configuring the Sequencer’s Default Sequenceにも書いてあります。

ちなみに、OVM 2.1.1/UVM 1.0EAでは、次のような感じ。
       sequencer = new("sequencer", null); 
       set_config_string("sequencer", "default_sequence", "simple_seq_sub_seqs");

検証、Verification、SystemVerilog、UVM、Unified Verification Methodology