TUTORIAL SYSTEMC Model Diagram
Stimulus (data gen)
DFF1
Clock
Model SystemC
int sc_main (int argc , char *argv[]) { /* Deklarasi signal (wire) */ sc_clock
clock;
sc_signal
reset; sc_signal din; sc_signal dout; sc_signal input_valid; sc_signal sample; sc_signal Aresult; sc_signal Bresult;
/* Deklarasi stimulus */ stimulus stimulus1("stimulus_block"); stimulus1.reset(reset); stimulus1.input_valid(input_valid); stimulus1.sample(sample); stimulus1.clock(clock.signal());
DFF2
Display
/* Deklarasi dff1 */ dffa dffa1 ( "registerA" ); dffa1.clock(clock.signal()); dffa1.reset(reset); dffa1.din(sample); dffa1.dout(Aresult);
/* Deklarasi dff2 */ dffa dffa2 ( "registerB" ); dffa2.clock(clock.signal()); dffa2.reset(reset); dffa2.din(Aresult); dffa2.dout(Bresult);
/* Deklarasi dff2 */ display display1 ( "display"); display1.clock(clock); display1.dA(sample); display1.dB(Aresult); display1.dC(Bresult);
sc_start(clock, -1); return 0; }
Model DFF DFF dapat dideklarasikan dalam dua file atau satu file header saja, misalnya dffa.h. Hampir sama dengan HDL, model juga terbagi atas bagian entity-nya (port-port dan tipe-nya), bagian behaviornya (void) dan bagian mekanisme model (definisi behavior yang dikerjakan, definise input sensitive). Contoh : #include "systemc.h" SC_MODULE(dffa) { sc_in clock; sc_in reset; sc_in din; sc_out dout;
void do_ffa() { if (reset) { dout = false; } else if (clock.event()) { dout = din; } };
SC_CTOR(dffa) { SC_METHOD(do_ffa); sensitive(reset); sensitive_pos(clock); } };
Model Stimulus Stimulus merupakan model dengan dua file yaitu stimulus.cpp dan stimulus.h. Pada stimulus.h hanya dideklarasikan bagian entity-nya dan bagian mekanisme-nya saja. Bagian behaviournya dinyatakan dalam stimulus.cpp. stimulus.h :
SC_MODULE(stimulus) { sc_out reset; sc_out input_valid; sc_out sample; sc_in clock;
sc_int<8>
send_value1;
unsigned cycle;
SC_CTOR(stimulus) { SC_METHOD(entry); dont_initialize(); sensitive_pos(clock); send_value1 = 0; cycle
= 0;
} void entry(); };
stimulus.cpp :
#include <systemc.h> #include "stimulus.h" void stimulus::entry() { cycle++; // sending some reset values if (cycle<4) { reset.write(true); input_valid.write(false); } else { reset.write(false); input_valid.write( false ); // sending normal mode values if (cycle%1==0) { input_valid.write(true); sample.write( (int)send_value1 ); cout << "Stimuli : " << (int)send_value1 << " at time " /* << sc_time_stamp() << endl; */ << sc_simulation_time() << endl; send_value1++; }; } }
INSTALASI SYSTEMC Software yang dibutuhkan adalah : 1. Visual C 2. SystemC 2.01 Setelah software terinstall, maka tahap selanjutnya adalah : Membuat Library SystemC Klik path\systemc-2.0.1\msvc60\systemc\systemc.dsw. Lakukan “Build SystemC F7”. Buat direktori path\systemc-2.0.1\msvc60\systemc\Release. Copy file path\systemc2.0.1\msvc60\systemc\ Debug\systemc.lib ke direktori path\systemc-2.0.1\msvc60\systemc\Release. File library path\systemc2.0.1\msvc60\systemc\Release\systemc.lib inilah yang akan digunakan.
Membuat Project
Buatlah new project, pilih “Win32 Console Application. Beri nama project, misalnya tutorial_dff. Pilih direktori kerja selalu dibawah path/systemc-2.0.1/msvc60/examples/ . Sehingga direktori kerja-nya adalah : path/systemc-2.0.1/msvc60/examples/tutorial_dff . Selanjutnya pilih “An empty project”.
Add Files
Atau dengan cara dibawah :
Jika kedua cara diatas gagal (misalnya somehow visual c jadi crash), edit file path/systemc2.0.1/msvc60/examples/tutorial_dff/tutorial_dff.dsp . Tambahkan : # Begin Source File
SOURCE=display.h # End Source File # Begin Source File
SOURCE=stimulus.h # End Source File # Begin Source File
SOURCE=dffa.h # End Source File # Begin Source File
SOURCE=main_rtl.cpp # End Source File # Begin Source File
SOURCE=display.cpp # End Source File # Begin Source File
SOURCE=stimulus.cpp # End Source File # Begin Source File
SOURCE=..\..\systemc\Release\systemc.lib # End Source File # End Target # End Project
PROJECT SETTINGS Pada bagian C/C++, pilih kategori Preprocessor. Isilah “Additional include directories” dengan ../../../src .
Selanjutnya pilih kategori “C++ Languange”. Aktifkan checkbox Enable exception handling dan Enable Run-Time Type Information.
Akhirnya Excute:
Jika semuanya berjalan dengan benar, maka akan terjadi penampakan sebagai berikut :
Anda dapat mencoba contoh-contoh lain dalam path\systemc-2.0.1\msvc60\examples. Misalnya klik \systemc-2.0.1\msvc60\examples\pkt_switch\ pkt_switch.dsw. Selalu buka *.dsw untuk membuka suatu project/example. Selamat mencoba.
Bandung 23 Februari 2009
Akhmad Mulyanto [email protected]