Verification Engineerの戯言
http://blogs.yahoo.co.jp/verification_engineer/27806028.html
で書きましたが、ユーザーマニュアルを読んでみて、socketはちょっと違うようです。
で書きましたが、ユーザーマニュアルを読んでみて、socketはちょっと違うようです。
TLM 2.0 draft #2では、InitiatorとTargetはそれぞれsocketを持つことになります。
InitiatorはInitiator socketを、TargetはTarget socketを持つことになります。
InitiatorはInitiator socketを、TargetはTarget socketを持つことになります。
InitiatorとTarget間は、2つのパスを持っていて、
Initiator -> Targetへのパスは、Forward path、Target -> Initiatorへのパスは、Backward pathになります。
Initiator -> Targetへのパスは、Forward path、Target -> Initiatorへのパスは、Backward pathになります。
Forward pathでは、Initiator側がportでTarget側がexportになります。
一方、Backword pathでは、Target側がportでInitiator側がexportになります。
一方、Backword pathでは、Target側がportでInitiator側がexportになります。
つまり、socketとはportとexportの機能を持つことになります。
具体的には、ユーザーマニュアルのPage.43では、tlm_initiator_socketクラスを次のように定義しています。以下はかなりの部分を省略しています。
具体的には、ユーザーマニュアルのPage.43では、tlm_initiator_socketクラスを次のように定義しています。以下はかなりの部分を省略しています。
template < unsigned int BUSWIDTH = 32, typename FW_IF = tlm_fw_nb_transport_if<>, typename BW_IF = tlm_bw_nb_transport_if<> > class tlm_initiator_socket : public sc_core::sc_port<FW_IF> { public: typedef sc_core::sc_export<bw_interface_type> export_type; protected: export_type mExport; };つまり、tlm_initiator_socketクラスは、sc_portクラスの子クラスであり、sc_exportをメンバーに持っています。また、tlm_target_socketクラスは、tlm_initiator_socketクラスとは逆になり、sc_exportクラスの子クラスであり、sc_portをメンバーに持っています。
template < unsigned int BUSWIDTH = 32, typename FW_IF = tlm_fw_nb_transport_if<>, typename BW_IF = tlm_bw_nb_transport_if<> > class tlm_target_socket : public sc_core::sc_export<FW_IF> { public: typedef sc_core::sc_export<fw_interface_type> export_type; protected: port_type mPort; };
うまく考えていますね。