Vengineerの妄想(準備期間)

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

OVM : ovm_scenario::apply_send/applyタスク

Verification Engineerの戯言

OVM 1.0/1.01と1.1では、apply/apply_sendおよびapply_requestタスクの引数が違います。
OVM 1.1では、input bit randomize = 1という引数が追加されました。

以下は、OVM 1.1版です。

「Layered Stimulus」では、apply_sendタスクapplyタスクが重要なタスクになります。

まずは、applyタスクです。applyタスクは、ovm_scenarioクラスで次のように定義されています。
    virtual task apply(input REQ data_req, output RSP data_rsp, input bit randomize = 1);
    
      apply_request(data_req, randomize);

      if ($cast(p_drv, m_driver_ptr) == 0) begin
        ovm_report_fatal("ovm_scenario", "Error casting pdrv from driver_ptr");
      end
    
      p_drv.put_req.put(data_req);
      p_drv.get_rsp.get(data_rsp);
      post_apply();
    endtask  
apply_requestタスク後、ドライバ(m_driver_ptr)に対して、data_reqを送り(put)、data_rspを待ちます(get)。最後に、post_applyタスクを実行します。

apply_requestタスクでは、シナリオコントローラに対してリクエストし、グラントが来るまで待ちます。
その後に、pre_applyタスクdata_reqをランダマイズ(data_req.randomize())し、mid_applyタスクを実行します。
    virtual task apply_request(input REQ data_req, input bit randomize = 1);
      grant_flag = 0;
      if (m_scenario_controller == null) ovm_report_fatal("seqA", "null m_scenario_controller");
      m_scenario_controller.request(this);
      wait(grant_flag == 1);
      pre_apply();

      if (m_driver_ptr == null) ovm_report_fatal(get_full_name(), "null m_driver_ptr");
      grant_flag = 0;
      if (randomize == 1) begin
        assert(data_req.randomize());
      end
      mid_apply();
    endtask
pre_applymid_applypost_applyは、すべてovm_scenario_baseクラスvirtual taskで定義されていますが、実体は何もやりません。
これら3つのXXX_applyタスクは、ユーザが作成するシナリオ(ovm_scenarioクラスを継承する)で必要なら定義します。

apply_sendタスクでは、ドライバからの応答(p_drv.get_rsp.get(data_rsp))が無いだけで、後はapplyタスクと同じです。
    virtual task apply_send(input REQ data_req, input bit randomize = 1);
    
      apply_request(data_req, randomize);

      if ($cast(p_drv, m_driver_ptr) == 0) begin
        ovm_report_fatal("ovm_scenario", "Error casting pdrv from driver_ptr");
      end
    
      p_drv.put_req.put(data_req);
      post_apply();
    endtask   

検証、Verification、SystemVerilog、OVM、Open Verification Methodology