Vengineerの妄想(準備期間)

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

Debug transaction interface

Verification Engineerの戯言

TLM 2.0 draft #2では、Debug transaction interfaceというものがあります。
これはデバッグのためにTargetの内部にアクセスするためのもので、次のように定義されていて、
Target側で実装する必要があります。
    class tlm_debug_payload
    {
        public:
            sc_dt::uint64 address;
            bool do_read;
            unsigned int num_bytes;
            unsigned char* data;
    };
    class tlm_transport_dbg_if : public virtual sc_core::sc_interface
    {
        public:
            virtual unsigned int transport_dbg(tlm_debug_payload& r) = 0;
    };
tlm_transport_dbg_ifインターフェースのtransport_dbgメソッドを使います。
transport_dbgメソッドの引数rは、tlm_debug_payloadクラスのリファレンスです。
tlm_debug_payloadクラスは、アクセスするアドレスを示すaddress、リード/ライドを区別するためのdo_read、
アクセスするデータ数(バイト数)を示すnum_bytes、データの先頭を示すポインタdataをメンバーに持ちます。
Initiatorは、tlm_debug_payloadクラスのインスタンスのアクセスするための情報を設定し、
transport_dbgメソッドを呼び出します。呼び出されたTargetは実際にアクセスしたバイト数を戻り値として介します。
もし、Targetがアクセスできない場合は戻り値を0にします。
transport_dbgメソッドでは、wait関数を呼び出したり、eventを起動するようなことはしてはいけません。
つまり、シミュレーションのイベントに対して何か影響を与えるようなことはしてはいけません。