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()はどんなときに呼ぶのか?ユーザーガイドによると、
でも、誰かが使うから仕様にないっているのでしょう!予想としては、VMM関連。
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部分で呼ばれていますの。
追記(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