Vengineerの妄想

人生を妄想しています。

SimpleBus (その2)

Verification Engineerの戯言

イニシエータソケット(initiator_socket)とターゲットソケット(target_socket)に対して、
マクロにて設定したものは、lm_fw_nb_transport_ifとlm_bw_nb_transport_ifで説明したtlm::tlm_fw_nb_transport_ifおよびtlm::tlm_fw_nb_transport_ifクラスに必要なメソッドです。

ターゲットソケット(target_socket)に対して、マクロにて設定したものは、
tlm::tlm_fw_nb_transport_ifクラスに必要な次の3つのメソッドです。
    tlm::tlm_sync_enum nb_transport(
                tlm::tlm_generic_payload& trans, 
                tlm::tlm_phase& phase, sc_core::sc_time& t);

    bool get_direct_mem_ptr(
                const sc_dt::uint64& address, 
                tlm::tlm_dmi_mode& dmi_mode,
                tlm::tlm_dmi& dmi_data);

    unsigned int transport_dbg(tlm::tlm_debug_payload& r);
REGISTER_NBTRANSPORT_USERマクロでは、nb_transportメソッドとして、
initiatorNBTransportメソッドを、
REGISTER_DEBUGTRANSPORT_USERマクロでは、transport_dbgメソッドとして、
transportDebugメソッドを、
REGISTER_DMI_USERマクロでは、get_direct_mem_ptrメソッドとして、
getDMIPointerを、各target_socket[i]に設定しています。

イニシエータソケット(initiator_socket)に対して、マクロにて設定したものは、
tlm::tlm_bw_nb_transport_ifクラスに必要な次の2つのメソッドです。
    tlm::tlm_sync_enum nb_transport(
            tlm::tlm_generic_payload& trans, 
            tlm::tlm_phase& phase, 
            sc_core::sc_time& t);
 
    void invalidate_direct_mem_ptr(sc_dt::uint64 start_range, 
                                   sc_dt::uint64 end_range);
REGISTER_NBTRANSPORTマクロでは、nb_transportメソッドとして、
targetNBTransportメソッドを、
REGISTER_INVALIDATEDMIマクロでは、get_direct_mem_ptrメソッドとして、
invalidateDMIPointersを、各initiator_socket[i]に設定しています。

このように複数のソケットを持つモジュールは、マクロを使って、必要なメソッドを
設定するようになっているようです。