Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

UVM 1.0 : フェーズ(その2)


uvm_componentクラスには、次のような多くのフェーズも追加されました。
    task uvm_component::pre_reset_phase(uvm_phase phase);      return; endtask
    task uvm_component::reset_phase(uvm_phase phase);          return; endtask
    task uvm_component::post_reset_phase(uvm_phase phase);     return; endtask
    task uvm_component::pre_configure_phase(uvm_phase phase);  return; endtask
    task uvm_component::configure_phase(uvm_phase phase);      return; endtask
    task uvm_component::post_configure_phase(uvm_phase phase); return; endtask
    task uvm_component::pre_main_phase(uvm_phase phase);       return; endtask
    task uvm_component::main_phase(uvm_phase phase);           return; endtask
    task uvm_component::post_main_phase(uvm_phase phase);      return; endtask
    task uvm_component::pre_shutdown_phase(uvm_phase phase);   return; endtask
    task uvm_component::shutdown_phase(uvm_phase phase);       return; endtask
    task uvm_component::post_shutdown_phase(uvm_phase phase);  return; endtask
でも、ご安心あれ、
    // these runtime phase methods are only called if a set_domain() is done
にあるように、set_domain()を実行しないと、コールされません。

で、set_domain()はどんなときに呼ぶのか?ユーザーガイドによると、
    set_domain

    function void set_domain(uvm_domain domain, int hier = 1)

    Apply a phase domain to this component (by default, also to it’s children). 
    Get a copy of the schedule graph for this component base class as defined by virtual
    define_phase_schedule(), and add an instance of that to our domain branch in the
    master phasing schedule graph, if it does not already exist.
このset_domainの使い方がわかりません。例題にもありません。
でも、誰かが使うから仕様にないっているのでしょう!予想としては、VMM関連。

P.S
追記(4/19)
uvm_domainクラスのadd_uvm_phases関数で各フェースが登録されていますね。そして、add_uvm_phases関数は get_uvm_domain関数で呼ばれています。get_uvm_domain関数は、get_common_domain関数で呼ばれています。 get_comman_domain関数は、m_run_phasesタスクで呼ばれています。
このm_run_phasesタスクがuvm_rootクラスのrun_testタスク内のrun_phase部分で呼ばれていますの。

ということで、コメントしていただいたように、上記のタスクは呼ばれます。

基本的には、何も定義しなければ、何も起こらないのでいいのですが、
どのような場合に、どのタスクを定義するかの説明がイマイチわからないです。

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