Vengineerの妄想(準備期間)

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

SimpleBus (その5)

Verification Engineerの戯言

SimpleBusTLInitiator1_DMIクラスのinitTransactionメソッド内で各トランザクションへの
パラメータを次のように設定しています。
 bool initTransaction(transaction_type& trans)
  {
    // initialize DMI hint:
    trans.set_dmi_allowed(false);

    if (mTransactionCount < mNrOfTransactions) {
      trans.set_address(mBaseAddress + 4*mTransactionCount);
      mData = mTransactionCount;
      trans.set_data_ptr(reinterpret_cast<unsigned char*>(&mData));
      trans.set_command(tlm::TLM_WRITE_COMMAND);

    } else if (mTransactionCount < 2 * mNrOfTransactions) {
      trans.set_address(mBaseAddress + 4*(mTransactionCount-mNrOfTransactions));
      mData = 0;
      trans.set_data_ptr(reinterpret_cast<unsigned char*>(&mData));
      trans.set_command(tlm::TLM_READ_COMMAND);

    } else {
      return false;
    }

    ++mTransactionCount;
    return true;
  }
最初にtrans.set_dmi_allowed(false)しています。
これは前回runメソッドで説明したtrans.get_dmi_allowed()に対する初期化です。
コンストラクタの引数nrOfTransactions(デフォルト値は、5)で指定した数ライト・トランザクションを実行します。
その後、同じ数のリード・トランザクションを実行します。

トランザクションのアドレスは、set_addressメソッドで、
トランザクションのタイプは、set_commandメソッドで、
トランザクションのデータ・ポインタは、set_data_ptrメソッドで設定します。

トランザクションへの設定は、このようにすべてメソッドを使って行います。

これでSimpleTLInitiator1(_DMI)クラスについて、大体説明できました。

次回は、SimpleTLInitiator2(_DMI)クラスについてSimpleTLInitiator1(_DMI)クラスとの差分について説明します。