Vengineerの妄想(準備期間)

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

SimpleBus (その11)

Verification Engineerの戯言

SimpleATTarget2クラスSimpleATTarger2クラスの違いは、myNBtransportメソッドでコマンドがphaseがtlm::BEGIN_REQのときの処理です。
SimpleATTarget1クラスでは、mEndRequestEvent.notify(t + ACCEPT_DELAY)を実行後、戻り値としてtlm::TLM_ACCEPTを返すのに、
      // Notify end of request phase after ACCEPT delay
      if (mEndRequestQueue.empty()) {
        mEndRequestEvent.notify(t + ACCEPT_DELAY);
      }
      mEndRequestQueue.push(&trans);

      return tlm::TLM_ACCEPTED;
SimpleATTarget2クラスでは、phaseをtlm::END_REQに変更し、mEndResponseEvent.notify(t + RESPONSE_DELAY)を実行後、戻り値としてtlm::TLM_UPDATEDを返しています。
      // End request phase after accept delay
      t += ACCEPT_DELAY;
      phase = tlm::END_REQ;

      if (mResponseQueue.empty()) {
        // Start processing transaction after accept delay
        // Notify begin of response phase after accept delay + response delay
        mBeginResponseEvent.notify(t + RESPONSE_DELAY);
      }
      mResponseQueue.push(&trans);

      return tlm::TLM_UPDATED;
このため、SimpleATTarget2クラスでは、endRequestメソッドが呼ばれません。
(mEndRequestEventをnotifyしていませんので)

endResponseメソッドが呼ばれる相対的な時間は、t+ACCEPT_DELAY+RESPONSE_DELAYになるので同じです。

戻り値がtlm::TLM_ACCEPTとtlm::TLM_UPDATEDと違いますが、それに対応するようにInitiatorクラスを記述する必要があります。

次回はInitiatorクラスについて見ていきます。