Vengineerの妄想(準備期間)

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

OVM : ovm_sequencer_baseクラス

Verification Engineerの戯言

ovm_sequencer_baseクラスは、ovm_threaded_componentクラスを継承するのでrunタスクがエントリポイントになります。
    task ovm_sequencer_base::run();

      start_default_sequence(); 

      run_forever();

    endtask
start_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への設定方法を見ていきます。

検証、Verification、SystemVerilog、OVM、Open Verification Methodology