Verification Engineerの戯言
OVM 1.1のリリースを受けて、一部、修正しました(2008.5.8)。
OVMは、MentorとCadenceの合作。そのためかStimulusの生成方法もMentorとCadenceで違います。
Mentorは「Layered Stimulus」、Cadenceは「Sequence」と呼んでいます。
Mentorは「Layered Stimulus」、Cadenceは「Sequence」と呼んでいます。
先日のOVMセミナーでも、
前半のMentor からのセッションでは、'''シーケンシャル・スティミュラス''' 後半のCadenceからのセッションでは、'''シーケンス'''ということで説明がありました。
ということで、「Layered Stimulus」と「Sequence」について、見てみることにしました。
まずは、Mentorの「Layered Stimulus」について、です。
OVMの中では、examplesには、「Layered Stimulus」の例題はありません。
従って、ソースコードを見ることになります。
1.0.1/src/methodology/layered_stimulusディレクトリのあるovm_scenario.svh、ovm_scenario_driver.svh、ovm_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クラスの定義の部分が次のようになっているからです。
従って、ソースコードを見ることになります。
1.0.1/src/methodology/layered_stimulusディレクトリのあるovm_scenario.svh、ovm_scenario_driver.svh、ovm_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/RSPがovm_sequence_itemからovm_transactionに変更になりました。
は、デフォルトではovm_sequence_itemクラスになっています。
同様に、ovm_scenario_controllerクラスとovm_scenarioクラスも同様に、2つのパラメータ(REQ、RSP)を持っています。
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では、
このことから「Layered Stimulus」でも「Sequence」と同様にovm_sequence_itemクラスを使うことになります。
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クラスを使うことになります。