systemC
SystemC merupakan sebuah C++ class library yang menyediakan konstruksi yang memudahkan untuk memodelkan arsitektur system termasuk hardware timing, concurrency, dan kelakuan reaktif yang tidak terdapat di dalam C++ yang standar. SystemC menggantikan HDL yang didesain khusus seperti Verilog dan VHDL dalam banyak hal. Hal ini dikarenakan SystemC mendukung pendekatan baru dalam hal perancangan sistem. SystemC lahir karena kebutuhan dari industry elektronik. Sebelumnya, C (atau C++) digunakan untuk perancangan bagian perangkat lunak. Sementara untuk perancangan bagian perangkat keras digunakan HDL. Sangat sulit untuk melakukan testbench pada keduanya, karena keduanya menggunakan bahasa yang berbeda. Lahirnya SystemC kemudian memecahkan masalah ini.
SystemC memiliki arsitektur bahasa sebagai berikut.
gambar 1 : arsitektur bahasa SystemC
Kelebihan dari SystemC :
-
SystemC mewarisi fitur-fitur C++, yang merupakan bahasa pemrograman yang stabil.
-
Memiliki banyak tipe data: selain tipe data yang didukung oleh C++, SystemC juga mendukung tipe data khusus yang sering digunakan untuk merancang perangkat keras.
-
Memiliki kernel simulasi yang kuat, yang memudahkan desainer dalam membuat test bench yang baik, dan mensimulasikannya.
-
Selain mendukung level desain dari RT (Register Transfer), SystemC juga mendukung desain pada level abstraksi yang lebih tinggi.
-
Concurrency: untuk mensimulasikan kelakuan konkuren dari perangkat keras digital, kernel simulasi didesain sehingga proses-proses dieksekusi secara konkuren, tanpa memandang urutan pemanggilan dari proses-proses tersebut.
Struktur program SystemC :
-
Setiap desain mengandung kelas atau modul “SC_MODULE” seperti berikut.
gambar 2 : Struktur Program SystemC
-
Setiap modul harus mempunyai sebuah konstruktor ‘SC_CTOR’ dengan nama yang sama dengan nama modul.
-
Port digunakan untuk komunikasi dengan modul atau kanal eksternal. Port didefinisikan di bagian awal modul. Arah dari port dispesifikasikan menggunakan ‘sc_in’ dan ‘sc_out’.
-
Setiap modul harus mempunyai minimal satu proses yang merepresentasikan fungsionalitas dari modul tersebut. Proses dideklarasikan setelah deklarasi dari port. Pendefinisian proses dapat dilakukan baik di dalam maupun di luar modul.
Ada 2 macam proses, yaitu method dan thread yang dideklarasikan sebagai ‘SC_METHOD’ dan ‘SC_THREAD’. Sebenarnya method dan thread hampir sama. Keduanya sama-sama mengandung sequential statement juga dapat mengandung thread-nya masing-masing lagi untuk dieksekusi. Yang membedakannya adalah jika method sudah dieksekusi maka tidak bisa di-suspend. Ketika eksekusi telah dijalankan maka method ini akan berhenti dan menunggu adanya aktivitas atau event baru sebelum dia mulai mengeksekusi lagi. Sebaliknya, thread dapat di-suspend ketika eksekusi sedang dijalankan dan juga dapat di-resume kembali pada stage selanjutnya. Dengan pengertian lain, thread hanya dieksekusi sekali selama simulasi dan selebihnya berada pada mode suspend.
Thread biasanya digunakan pada perulangan yang tak berhingga, sehingga perulangan tidak akan berakhir sebelum seluruh simulasi berakhir. Namun untuk alasan performansi, method lebih sering digunakan daripada thread.
-
Channel (kanal) merupakan media komunikasi pada SystemC, bentuk yang lebih umum dari sinyal. Contohnya ‘sc_signal’, ‘sc_fifo’, dan ‘sc_semaphore’.
Berikut menunjukkan contoh penggunaan dari SystemC yang diambil dari “SystemC Version 2.0 User’s Guide Update for SystemC 2.0.1, 2002”.
Model SystemC untuk sebuah flipflop.
// dff.h
#include “systemc.h”
SC_MODULE(dff) {
sc_in<bool> din;
sc_in<bool> clock;
sc_out<bool> dout;
void doit() {
dout = din;
};
SC_CTOR(dff) {
SC_METHOD(doit);
sensitive_pos << clock;
}
};
gambar 3 : Model SystemC untuk Flip-flop
Kata-kata yang ditulis dengan huruf kapital seperti SC MODULE dan SC METHOD merupakan makro-makro yang menyembunyikan sintaks C++ yang sebenarnya dan menyediakan sintaks yang lebih bersih. hampir setiap konstruksi VHDL memiliki sebuah varian SystemC. Pada level yang lebih tinggi, SystemC menawarkan sesuatu yang lain. Sinyal-sinyal di dalam VHDL sedikit lebih daripada sebuah representasi dari sebuah kabel listrik. Sinyal dapat beragam mulai dari fifo buffer sampai struktur bus lebar dengan buffer dan unit kalkulasi.
sebenarnya ini merupakan salah satu bagian dari tugas akhir saya. namun karena referensi untuk SystemC ini masih sangat terbatas (bahkan belum ada yang berbahasa Indonesia), maka saya publikasikan sedikit di sini. moga bermanfaat bagi yang membutuhkannya.. 🙂
sumber :
– Mahesh Prasad N, SystemC: An Introduction for beginners
– Thorsten Grotker, dkk., 2002. System Design with SystemC. Kluwer Academic Publishers : Hingham, MA, USA