Tuesday, March 15, 2011

Design hierarki sistem menggunakan TLM-2.0

TLM (Transaction Level Modeling) adalah tools yang disediakan SystemC untuk memodelkan komunikasi antar modul dalam system, baikan dalam hardware, software, ataupun komunikasi yang melibatkan hardware software. TLM memungkinkan kita modelkan sistem dilakukan dengan cepat. Salah satu hal penting yang kita butuhkan dalam memodelkan sistem adalah kemampuan merepresentasikan hierarchy. Berikut sedikit pengenalan bagaimana membuat desain hierarchy dalam SystemC TLM-2.0.  

Initiator dan target

Dalam TLM, kita mengenal istilah initiator dan target. Initiator adalah modul yang menginisiasi/mengawali transaksi, sedangkan target adalah yang menerima transaksi. Gambaran umumnya adalah seperti CPU menulis data ke RAM, dimana CPU adalah initiator, dan RAM adalah target. Initiator bisa dibungkus oleh modul initiator yang lain, begitu pula dengan target. Ini berguna jika ingin membuat desain dengan granularity yang jelas. 


Desain hierarchy pada gambar diatas dapat dibuat menggunakan library tlm_initiator_socket dan tlm_target_socket  dari tlm core interface. Kalau memakain tlm_utils, jangan lupa definisikan SC_INCLUDE_DYNAMIC_PROCESSES.

#define SC_INCLUDE_DYNAMIC_PROCESSES
#include "systemc.h"
#include "tlm/tlm.h"

struct initiator : sc_module {
tlm::tlm_initiator_socket<> init_socket;
SC_CTOR(initiator) : init_socket("init_socket")
{}
};

struct target : sc_module {
tlm::tlm_target_socket<> targ_socket;
SC_CTOR(target) : targ_socket("targ_socket")
{}
};

struct parent_of_initiator : sc_module {
tlm::tlm_initiator_socket<> init_socket;
initiator *INITIATOR;
SC_CTOR(parent_of_initiator) : init_socket("init_socket")
{
INITIATOR = new initiator("INITIATOR");
        INITIATOR->init_socket.bind(init_socket);
}
};

struct parent_of_target : sc_module {
tlm::tlm_target_socket<> targ_socket;
target *TARGET;
 SC_CTOR(parent_of_target) : targ_socket("targ_socket")
{
TARGET = new target("TARGET");
        targ_socket.bind(TARGET->targ_socket);
}
};

struct parent_of_initator_and_target : sc_module
{
tlm::tlm_initiator_socket<> init_socket;
tlm::tlm_target_socket<> targ_socket;
initiator *INITIATOR;
target *TARGET;
SC_CTOR(parent_of_initator_and_target) : init_socket("init_socket"), targ_socket("targ_socket")
{
INITIATOR = new initiator("INITIATOR");
TARGET = new target("TARGET");
  INITIATOR->init_socket.bind(init_socket);
  targ_socket.bind(TARGET->targ_socket);
}
};


Sebuah initiator juga bisa berfungsi sekaligus sebagai target. Ini sangat diperlukan ketika memodelkan interconnect component. Berikut implementasinya menggunakan simple_initiator_socket dan simple_target_socket.

struct initiator_target : sc_module {
tlm::tlm_initiator_socket<> init_socket;
tlm::tlm_target_socket<> targ_socket;
 SC_CTOR(initiator_target) : init_socket("init_socket"), targ_socket("targ_socket")
{}
};

struct parent_of_initiator_target : sc_module
{
tlm::tlm_initiator_socket<> init_socket;
tlm::tlm_target_socket<> targ_socket;
initiator_target *INITIATOR_TARGET;
SC_CTOR(parent_of_initiator_target): init_socket("init_socket"), targ_socket("targ_socket")
{
INITIATOR_TARGET = new initiator_target("INITIATOR_TARGET");
INITIATOR_TARGET->init_socket.bind(init_socket);
  targ_socket.bind(INITIATOR_TARGET->targ_socket);
}
};

TLM library dan source code pada contoh ini bisa didownload pada halaman Download. Sampai jumpa di tutorial TLM selanjutnya... Selamat mencoba.. ^^ (Ya2n)

2 comments:

  1. Mas, cara install library systemC di Ubuntu gimana? apakah harus jalan sama modelsim atau bisa jalan sendiri?

    ReplyDelete
    Replies
    1. Wah, tak pikir dulu sudah saya reply.. Maap.

      Install SystemC di Ubuntu cukup download SystemC library dari sytemc.org, tidak harus jalan sama Modelsim karena SystemC sebenarnya pure C++ template library.

      Kecuali kalau mau menggabungkan SystemC dengan Verilog/VHDL, maka harus pakai Modelsim (atau tools EDA lainnya seperti VCS, NC-Verilog) tapi harus ditambahkan plugin systemc-nya.

      Untuk plugin SystemC dapat didownload dari model.com

      Delete