Verification Engineerの戯言
OVM 1.1版
ovm_scenario_controllerクラスおよびovm_scenario_driverクラスは、共にovm_threaded_componentクラスを継承します。
そのため、runタスクをvirtualで定義しています。
そのため、runタスクをvirtualで定義しています。
ovm_scenario_controllerクラスのrunタスクは、次のように定義されています。
startタスクはovm_scenario_baseクラスで定義されています。
task run(); stimulus_scenario.start(this, null); endtask // runstimulus_scenarioは、ovm_stimulus_scenarioクラスのインスタンスで、
startタスクはovm_scenario_baseクラスで定義されています。
前回、見ましたよね!
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
startタスクで実行される3つのタスク(pre_body, body, post_body)は、
どれもovm_scenario_baseクラスでvirtual taskとして定義されています。
どれもovm_scenario_baseクラスでvirtual taskとして定義されています。
virtual task pre_body(); return; endtask // pre_body virtual task body(); return; endtask virtual task post_body(); return; endtask // post_bodystartタスクでは、ovm_scenario_baseクラスを継承するクラスで定義された各タスク(pre_body, body, post_body)を呼び出すことになります。
そして、ovm_stimulus_scenarioクラスでbodyタスクを次のように定義していますので、このbodyタスクが呼ばれることになります。
(pre_bodyタスクおよびpost_bodyタスクは定義されていませんので、ovm_scenario_baseクラスのものが呼ばれます)
(pre_bodyタスクおよびpost_bodyタスクは定義されていませんので、ovm_scenario_baseクラスのものが呼ばれます)
task body(); REQ req; forever begin m_req_fifo.get(req); apply_send(req); end endtask // bodym_req_fifoからgetタスクでreqを獲得し、apply_sendタスクでドライバにreqを送信します。
次回、ovm_scenario::apply_send/applyタスクでは、bodyタスクで使っているapply_sendタスクについて説明します。
また、apply_sendタスクとapplyタスクについても説明します。
また、apply_sendタスクとapplyタスクについても説明します。
検証、Verification、SystemVerilog、OVM、Open Verification Methodology