Vengineerの妄想(準備期間)

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

SequenceとScenarioの比較、その1

Verification Engineerの戯言

Sequenceは、ovm_sequence/ovm_sequencer/ovm_driverの3つで構成されています。
Scenarioは、ovm_scenario/ovm_scenario_controller/ovm_scenario_driverの3つで構成されています。

Sequenceでは、bodyタスク内でovm_do/ovm_do_withマクロを使います。
Scenarioでは、bodyタスク内でapplyタスク、apply_withマクロ'''を使います。

Sequenceにも、applyタスクがあります。引数もScenarioと同じです。
    Sequence : task apply(ovm_sequence_item req, output ovm_sequence_item rsp);
    Scenario : virtual task apply(input REQ data_req, output RSP data_rsp, input bit randomize = 1););
Scenarioでは、REQ/RSPになっていますが、ovm_sequenceのクラス定義で
    virtual class ovm_scenario #(type REQ = ovm_transaction,
                                 type RSP = ovm_transaction) extends ovm_scenario_base; 
のようにしています。ovm_sequence_itemクラスは、ovm_transactionクラスを継承しています。

Scenarioでは、applyタスクの第3引数(randomize)を持っています。このrandomizeが1のとき、ランダム生成します。
デフォルトでは1になっているので、第3引数を指定しないときは、第1引数(req)のランダム生成をします。
ランダム生成をしたくない場合は、第3引数に0を指定します。
Sequenceのovm_doマクロを実行すると必ずランダム生成します。

共に、applyタスクが終了したときに、ドライバからの応答がある場合にはrspに値が設定されます。

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