Vengineerの妄想(準備期間)

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

OVM : ovm_scenario_driver

Verification Engineerの戯言

OVM 1.1版

何回に分けて、ovm_scenarioクラスについて書いてきましたが、今回はovm_scenario_driverクラスです。
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;
    endtask
get_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.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_blocking0を設定しています。

この変更に伴い、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