Vengineerの妄想(準備期間)

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

OVM : ovm_scenarioとovm_scenario_controller

Verification Engineerの戯言

OVM 1.0/1.0.1 & 1.1対応版

「Layered Stimulus」では、スティミュラスのことをシナリオと呼んでいます。
ovm_scenarioクラスインスタンスでシナリオを記述することになります。
記述したシナリオを開始するには、次のようにstartタスクを実行します。
    st.start(sc, this);
stがシナリオ(ovm_scenarioクラスインスタンス)で、scがシナリオコントローラ(ovm_scenario_controllerクラスインスタンス)になります。
startタスクは、ovm_scenarioクラスの親クラスであるovm_scenario_baseクラスで次のように定義されています。

OVM 1.0/1.0.1では、
    virtual task start(ovm_scenario_controller_base scenario_controller, 
                     ovm_scenario_base parent_seq = null);

        m_scenario_controller = scenario_controller;
        m_parent    = parent_seq;
        pre_body();
        body();
        post_body();
    endtask // start
になります。
第1引数がovm_scenario_controller_baseクラスで、このシナリオを制御するシナリオコントローラを指定します。
第2引数がovm_scenario_baseクラスで、このシナリオを呼び出す親シナリオを指定します。
親シナリオが存在しないときは、nullを指定するか、引数を指定しない(デフォルトでnullが指定されていますので)。

OVM 1.1では、
    virtual task start(ovm_scenario_controller_base scenario_controller, 
                     ovm_scenario_base parent_seq = null,
                       int weighted_priority = 100);

        m_scenario_controller = scenario_controller;
        m_parent    = parent_seq;
        set_weighted_priority(weighted_priority);
        pre_body();
        body();
        post_body();
    endtask // start
になりました。

第3引数にweighted_priorityが追加され、
これに伴い、set_weighted_priority(weighted_priority);も追加されました。

P.S
これで、400エントリになりました。

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