Verification Engineerの戯言
OVM 1.1版
何回に分けて、ovm_scenarioクラスについて書いてきましたが、今回はovm_scenario_driverクラスです。
ovm_scenario_driverクラスは、ovm_scenario_controllerクラスからのREQアイテムをget_next_itemタスクで獲得します。
その後、get_req.get(req_item)でREQアイテムを獲得します。
ovm_scenario_driverクラスは、ovm_scenario_controllerクラスからのREQアイテムをget_next_itemタスクで獲得します。
virtual task get_next_item(output REQ req_item, input bit non_blocking = 0); if (m_scenario_controller_ptr == null) begin req_item = null; return; end m_scenario_controller_ptr.driver_request(this, scenario_base_ptr, non_blocking); if (scenario_base_ptr == null) begin req_item = null; return; end get_req.get(req_item); return; endtaskget_next_itemタスクでは、m_scenario_controller_ptr.driver_requestでシナリオコントローラに対して、REQアイテムをドライブするように要求します。
その後、get_req.get(req_item)でREQアイテムを獲得します。
m_scenario_controller_ptrは、親クラスであるovm_scenario_driver_baseクラスで定義されているset_scenario_controller関数で設定します。
OVM 1.0/1.0.1とOVM1.1の違いは、OVM 1.0/1.0.1では引数non_blockingがありません。
そのため、OVM 1.1ではOVM 1.0/1.0.1と互換性を保つためデフォルト値として
そのため、OVM 1.1ではOVM 1.0/1.0.1と互換性を保つためデフォルト値として
OVM 1.0/1.0.1 virtual task get_next_item(output REQ req_item); OVM 1.1 virtual task get_next_item(output REQ req_item, input bit non_blocking = 0);のように、non_blockingに0を設定しています。
この変更に伴い、ovm_scenario_controllerクラスのdriver_requestタスクも変更になりました。
OVM 1.0/1.0.1 task driver_request (input ovm_scenario_driver_base driver_ptr, output ovm_scenario_base chosen_scen); OVM 1.1 task driver_request (input ovm_scenario_driver_base driver_ptr, output ovm_scenario_base chosen_scen, input bit non_blocking = 0 );
検証、Verification、SystemVerilog、OVM、Open Verification Methodology