
# Khaí niệm:
Điểm bắt đầu chương trình: Mọi chương trình (programs) đều có 1 điểm bắt đầu (starting point). Trong C/C++, starting point là main. Trong SystemC, starting point là sc_main
int sc_main(int argc, char* argv[]) {
elaboration
sc_start(); // bắt đầu và kết thúc simulation
// function
post-processing
return exit_code;
}
sc_module là đơn vị thiết kế căn bản: Một systemc module là đơn vị nhỏ nhất chứa các chắc năng, hành vi và kiến trúc phân cấp. Systemc module là 1 class C++ chứa đựng các tính năng.
- Ports
- Member channel ínstances
- Member data ínstances
- Member module instances (sub designs)
- Constructor
- Destructor
- Simulation process member functions (processes)
- Other method (member functions …)
# SC_HAS_PROCESS macro:
Được sử dung khi
- Yêu cầu contructor với đối số truyền vào khi sử dụng SC_CTOR macro.
- Khi bạn muốn báo cho trình biên dịch nơi mà constructor được thực hiện (.cpp file).
# Khai báo:
- Cách 1: Sử dụng macro SC_MODULE:
#include <systemc>
SC_MODULE(module_name) {
// MODULE_BODY
};
- Cách 2: Kế thừa từ class sc_module:
#include <systemc>
class module_name : public sc_module {
public:
// MODULE_BODY
};
# Cách dùng:
SC_MODULE là một C++ class nên cần constructor. Trong constructor thể hiện một vài tác vụ đặc thù của systemc như:
- Initializing/allocating sub-design
- Connecting sub-designs
- Registering process
- Providing static sensitivity
- Miscellaneous user-defined setup
# Cách 1:
Sử dụng macro SC_MODULE -> SC_CTOR macro cho constructor
SC_MODULE(module_name) {
SC_CTOR(module_name)
: Initialization // C++ initialization list
{
Subdesign_Allocation
Subdesign_Connectivity
Process_Registration
Miscellaneous_Setup
}
};
# Cách 2:
Kết thừa c++ sc_module class
class module_name : public sc_module {
module_name();
~ module_name();
public:
MODULE_BODY
};
Ví dụ:
