Home / Language / [ SC Tutorial ] 5. Module : The Basic Unit of Design

[ SC Tutorial ] 5. Module : The Basic Unit of Design

[1] SC_MODULE

Một SC_MODULE là đơn vị chức năng nhỏ nhất chứa trạng thái, hành vi và cấu trúc cho kết nối phân cấp trong SystemC. Nó đại diện cho một thành phần trong thiết kế hệ thống, có thể là phần cứng, phần mềm hoặc bất kỳ thực thể vật lý nào.
Một module SystemC về cơ bản là một định nghĩa lớp C++ kế thừa từ lớp cơ sở sc_module. Macro SC_MODULE được cung cấp để đơn giản hóa việc khai báo lớp này.

#include <systemc>
SC_MODULE(module_name) {
    MODULE_BODY
};
Syntax of SC_MODULE
#define SC_MODULE(module_name) \
struct module_name: public sc_module
SC_MODULE macro definition
#include <systemc>
class module_name : public sc_module {
public:
    MODULE_BODY
};
Syntax without the SC_MODULE macro

Một lớp module được kế thừa có thể chứa nhiều thành phần khác nhau

  • Ports
  • Member channel instances
  • Member data instances
  • Member module instances (sub-designs)
  • Constructor
  • Destructor
  • Simulation process member functions (processes)
  • Other methods (i.e., member functions)

Trong số các thành phần này, chỉ có hàm khởi tạo (Constructor) là bắt buộc để định nghĩa một SC_MODULE hợp lệ. Tuy nhiên, để module có bất kỳ hành vi hữu ích nào, nó phải bao gồm một quy trình (process) hoặc một thiết kế con (sub-design)

[2] SC_CTOR

SC_CTOR là một macro được SystemC cung cấp để đơn giản hóa việc viết bộ khởi tạo (constructor) cho các lớp SC_MODULE. Vì SC_MODULE về cơ bản là một định nghĩa lớp C++, nó đòi hỏi một bộ khởi tạo.

Bộ khởi tạo của lớp SC_MODULE thực hiện một số tác vụ quan trọng, cụ thể cho SystemC, trong giai đoạn elaboration (giai đoạn trước khi mô phỏng bắt đầu)

  • Khởi tạo/cấp phát các thiết kế con (sub-designs): Bao gồm việc tạo ra các module con bên trong module hiện tại.
  • Kết nối các thiết kế con: Thiết lập các kết nối giữa các module và kênh.
  • Đăng ký các tiến trình (processes) với nhân mô phỏng SystemC: Đây là một chức năng cốt lõi, cho phép nhân mô phỏng lập lịch và gọi các tiến trình này. Các tiến trình này có thể là SC_THREAD, SC_METHOD hoặc SC_CTHREAD.
  • Cung cấp độ nhạy tĩnh (static sensitivity): Xác định các sự kiện mà một tiến trình sẽ phản ứng lại ngay từ đầu mô phỏng và không thay đổi trong quá trình chạy.
  • Thiết lập bổ sung do người dùng định nghĩa: Các tác vụ cài đặt khác mà người dùng muốn thực hiện trong quá trình khởi tạo module
SC_MODULE(module_name) {
SC_CTOR(module_name)
: Initialization // C++ initialization list
{
    Subdesign_Allocation
    Subdesign_Connectivity
    Process_Registration
    Miscellaneous_Setup
}
};

Điều quan trọng cần lưu ý là macro SC_CTOR() ngụ ý SC_HAS_PROCESS và chỉ có thể được sử dụng khi không cần thêm các đối số nào cho bộ khởi tạo ngoài chuỗi tên thể hiện của module SystemC. Nếu bạn cần bộ khởi tạo có đối số cấu hình, hoặc muốn đặt định nghĩa bộ khởi tạo trong một tệp .cpp riêng biệt (thay vì tệp tiêu đề .h), bạn sẽ cần sử dụng macro SC_HAS_PROCESS thay thế.

DUT::DUT(sc_module_name name) :
    sc_module(name)
    , Initialization // C++ initialization list
{
    SC_HAS_PROCESS(DUT);
    Subdesign_Allocation
    Subdesign_Connectivity
    Process_Registration
    Miscellaneous_Setup
}

__FreeSourceC.com__

About admin

Check Also

[ SC Tutorial ] 6. Module : The Basic Unit of Execution

1.Simulation process Simulation process là đơn vị thực thi cơ bản trong SystemC. Chúng có …

Leave a Reply

Your email address will not be published. Required fields are marked *