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"
#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);
}
};
Mas, cara install library systemC di Ubuntu gimana? apakah harus jalan sama modelsim atau bisa jalan sendiri?
ReplyDeleteWah, tak pikir dulu sudah saya reply.. Maap.
DeleteInstall 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