Verification Engineerの戯言
ovm_sequencer_baseクラスは、ovm_threaded_componentクラスを継承するのでrunタスクがエントリポイントになります。
task ovm_sequencer_base::run(); start_default_sequence(); run_forever(); endtaskstart_default_sequenceタスクは、デフォルトのSequence(default_sequenceインスタンスに格納されているSequence)を実行するタスクです。
task ovm_sequencer_base::start_default_sequence(); ovm_sequence m_seq ; seq_kind = get_seq_kind(default_sequence); $cast(m_seq, ovm_factory::create_object(default_sequence, get_full_name(), default_sequence))) // この場所で実行するSequenceが決まる。 m_seq.print_sequence_info = 1; m_seq.set_sequencer(this); assert(m_seq.randomize()); if(count != 0) start_sequence(m_seq); endtaskデフォルトのSequenceは、m_seqに格納され、start_sequenceタスクが呼ばれます。
task ovm_sequencer_base::start_sequence(ovm_sequence this_seq, ovm_sequencer_base this_seqr=null); // かなり、省略 fork begin ->this_seq.started; this_seq.pre_body(); this_seq.body(); this_seq.post_body(); ->this_seq.ended; end join_none endtask上記のように、Sequenceのインスタンス(this_seq)に対して処理を実行しています。
このように、Sequencerはdefault_sequenceに設定されたSequenceを実行するだけなのです。
では、どのようにすれば、default_sequenceに設定することができるのでしょう!
では、どのようにすれば、default_sequenceに設定することができるのでしょう!
次回は、default_sequenceへの設定方法を見ていきます。
検証、Verification、SystemVerilog、OVM、Open Verification Methodology