Vengineerの妄想(準備期間)

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

blocking transport interfaceとnon-blocking transport interface

Verification Engineerの戯言

TLM 2.0 draft #2では、blocking transport interfacenon-blocking transport interfaceがあります。
blocking transport interfaceは、ユーザーマニュアルのPage.13に次のように定義されています。
namespace tlm {
    template <typename TRANS = tlm_generic_payload>
    class tlm_blocking_transport_if : public virtual sc_core::sc_interface {
        public:
            virtual void b_transport(TRANS& trans) = 0;
    };
} // namespace tlm
一方、non-blocking transport interfaceは、ユーザーマニュアルのPage.15に次のように定義されています。
namespace tlm {
    enum tlm_phase { BEGIN_REQ, END_REQ, BEGIN_RESP, END_RESP };
    enum tlm_sync_enum { TLM_REJECTED = 0, TLM_ACCEPTED = 1,
                         TLM_UPDATED = 2, TLM_COMPLETED = 3 };
    template <typename TRANS = tlm_generic_payload, typename PHASE = tlm_phase>
    class tlm_nonblocking_transport_if : public virtual sc_core::sc_interface {
        public:
            virtual tlm_sync_enum nb_transport(TRANS& trans, PHASE& phase, 
                                               sc_core::sc_time& t) = 0;
    };
} // namespace tlm
TRANS、PHASEは、templateになっていますので、ユーザ定義できます。
blocking transport interfaceでは、ブロッキングされるので、引数に時間を指定していません。
non-blocking transport interfaceでは、第3引数のsc_timeのリファレンス型の引数が必要になります。

この2つのインターフェースがTLM 2.0 draft #2の基本になるようです。