Vengineerの妄想(準備期間)

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

OVM : Layered Stimulus

Verification Engineerの戯言

OVM 1.1のリリースを受けて、一部、修正しました(2008.5.8)。

OVMは、MentorとCadenceの合作。そのためかStimulusの生成方法もMentorとCadenceで違います。
Mentorは「Layered Stimulus」、Cadenceは「Sequence」と呼んでいます。

先日のOVMセミナーでも、
    前半のMentor からのセッションでは、'''シーケンシャル・スティミュラス'''
    後半のCadenceからのセッションでは、'''シーケンス'''
ということで説明がありました。

でも、アジェンダでは、Cadenceのセッションでも「シーケンシャル・スティミュラスモデリングとテスト」というタイトルになっていて、ごちゃまぜです。

ということで、「Layered Stimulus」「Sequence」について、見てみることにしました。

まずは、Mentorの「Layered Stimulus」について、です。

OVMの中では、examplesには、「Layered Stimulus」の例題はありません。
従って、ソースコードを見ることになります。
1.0.1/src/methodology/layered_stimulusディレクトリのあるovm_scenario.svhovm_scenario_driver.svhovm_scenario_controller.svhソースコードになります。
「Layered Stimulus」では、シナリオ(ovm_scenarioクラス)を使って、スティミュラスを記述することになります。
記述したスティミュラスは、コントローラ(ovm_scenario_controllerクラス)経由でドライバ(ovm_scenario_driverクラス)に渡され、ドライバが渡されたovm_sequence_itemを使うことになります。
ドライバがovm_sequence_itemを受け取るのは、ovm_scenario_driver.svhファイルのovm_sequence_driverクラスの定義の部分が次のようになっているからです。

OVM 1.0/1.0.1の場合、
    virtual class ovm_scenario_driver #(type REQ = ovm_sequence_item, 
                    type RSP = ovm_sequence_item) 
                                      extends ovm_scenario_driver_base;

OVM 1.1では、REQ/RSPovm_sequence_itemからovm_transactionに変更になりました。
    virtual class ovm_scenario_driver #(type REQ = transaction, 
                    type RSP = transaction) 
                                      extends ovm_scenario_driver_base;
ovm_scenario_driverクラスは、2つのパラメータ(REQ、RSP)を持ちます。2つのパラメータの型
は、デフォルトではovm_sequence_itemクラスになっています。
同様に、ovm_scenario_controllerクラスovm_scenarioクラスも同様に、2つのパラメータ(REQ、RSP)を持っています。

ovm_scenario_driverクラスと同様に、OVM 1.0/1.0.1では、
    class ovm_scenario_controller     #(type REQ = ovm_sequence_item, 
                    type RSP = ovm_sequence_item) 
                                      extends ovm_scenario_controller_base;

    virtual class ovm_scenario        #(type REQ = ovm_sequence_item, 
                    type RSP = ovm_sequence_item)
                                      extends ovm_scenario_base;

OVM 1.1では、
    class ovm_scenario_controller     #(type REQ = transaction, 
                    type RSP = ovm_transaction) 
                                      extends ovm_scenario_controller_base;

    virtual class ovm_scenario        #(type REQ = ovm_transaction, 
                    type RSP = ovm_transaction)
                                      extends ovm_scenario_base;
になりました。
このことから「Layered Stimulus」でも「Sequence」と同様にovm_sequence_itemクラスを使うことになります。