SC_HAS_PROCESS là một macro thay thế cho cách tạo hàm khởi tạo (constructor) trong SystemC, và nó được sử dụng trong hai tình huống chính
- Khi bạn cần các hàm khởi tạo có đối số ngoài chuỗi tên thể hiện module SystemC được truyền vào SC_CTOR (ví dụ: để tạo các module có thể cấu hình). Các đối số này có thể dùng để chỉ định kích thước bộ nhớ, dải địa chỉ cho bộ giải mã, độ sâu FIFO, bộ chia xung nhịp, v.v.. Ví dụ, một thiết kế bộ nhớ có thể cho phép lựa chọn các kích thước bộ nhớ khác nhau bằng một đối số
My_memory instance("instance", 1024);
- Khi bạn muốn đặt hàm khởi tạo vào tệp triển khai (.cpp) thay vì tệp tiêu đề (.h)
Để sử dụng SC_HAS_PROCESS, bạn cần gọi macro này ngay trước định nghĩa hàm khởi tạo thông thường của mình.
//DUT.h...
class DUT:
public sc_module
{
public:
SC_HAS_PROCESS(DUT);
DUT(sc_module_name name);
private:
void monitor_process_thread(void);
};
//Syntax of SC_HAS_PROCESS in the header
để sử dụng SC_HAS_PROCESS trong một triển khai riêng biệt (tức là tình huống
biên dịch tốc độ riêng biệt)
//DUT.h...
class DUT:
public sc_module
{
public:
DUT(sc_module_name name);
private:
void monitor_process_thread(void);
};
//DUT.cpp
SC_HAS_PROCESS(DUT);
DUT::DUT(sc_module_name name) :
sc_module(name)
{
SC_THREAD(monitor_process_thread);
}
...
//Syntax of SC_HAS_PROCESS in the implementation file
Tóm lại, SC_HAS_PROCESS mang lại sự linh hoạt hơn cho các hàm khởi tạo mô-đun SystemC, đặc biệt là cho các mô-đun có thể cấu hình và cho phép tách biệt rõ ràng hơn giữa khai báo và định nghĩa trong mã nguồn