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

[ 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ó các đặc điểm và quy tắc hoạt động chính như sau

1. Đăng ký và Gọi

  • Tất cả các simulation process đều được đăng ký với simulation kernel SystemC.
  • Chúng được gọi bởi simulation kernel SystemC và chỉ bởi simulation kernel SystemC.
  • Từ thời điểm trình mô phỏng bắt đầu cho đến khi kết thúc, tất cả mã thực thi đều được khởi tạo từ một hoặc nhiều process.

2.Tính song song

  • Các simulation kernel có vẻ như thực thi đồng thời.
  • Simulation kernel SystemC tạo ra ảo giác rằng nhiều luồng mô phỏng SystemC đang thực thi song song. Điều này được thực hiện thông qua mô hình đa nhiệm hợp tác (cooperative multitasking), nơi mỗi tiến trình chạy một đoạn mã nhỏ rồi trả quyền điều khiển về cho kernel

Một tiến trình mô phỏng SystemC là một phương thức (hàm thành viên) của một lớp SC_MODULE được gọi bởi bộ lập lịch trong nhân mô phỏng SystemC

void PROCESS_NAME(void);

Có nhiều loại quy trình mô phỏng khác nhau, nhưng trong bài viết này chúng ta sẽ chỉ xem xét loại quy trình mô phỏng cơ bản nhất SC_THREAD.

2.Registering the Basic Process: SC_THREAD

Để một tiến trình mô phỏng SystemC có thể được nhân mô phỏng gọi và thực thi, nó phải được đăng ký với SystemC simulation kernel. Việc đăng ký tiến trình diễn ra bên trong hàm tạo của lớp module (SC_CTOR). Điều này đảm bảo tiến trình được thiết lập trong giai đoạn biên soạn (elaboration phase) của mô phỏng.

SC_THREAD(process_name);//Must be INSIDE constructor
  • process_name phải là tên của một phương thức thành viên của lớp SC_MODULE mà bạn đang định nghĩa.
  • Phương thức này cần được khai báo trong định nghĩa lớp module (thường trong tệp tiêu đề .h)
//DUT.h...
class DUT:
	public sc_module
{
public:
	DUT(sc_module_name name);
private:
    void monitor_process_thread(void);
};
  • Triển khai của phương thức tiến trình thường được đặt trong một tệp .cpp riêng biệt
//DUT.cpp
DUT::DUT(sc_module_name name) :
    sc_module(name)
{
    SC_HAS_PROCESS(DUT);

    SC_THREAD(monitor_process_thread);
}
void DUT::monitor_process_thread(void)
{
    while(1){
         cout << "monitor_process_thread executed within "
             << name() //returns sc_module instance name
             << endl;
         wait();
         ...
    }
}

3.Completing the Simple Design: main.cpp

Chúng ta sẽ hoàn thiện thiết kế bằng cách đặt mô hình SystemC trong hàm sc_main(), thường được đặt ở file main.cpp . Ở đây ta có thể đặt tên biến và argument trùng nhau “my_dut” để có thể sử dụng trong quá trình debugging sau này được thuận tiện.

//FILE: main.cpp
int sc_main(int argc, char* argv[]) { // args unused
    DUT my_dut("my_dut");
    sc_start();
    return 0; // unconditional success (not
    // recommended)
}

About admin

Check Also

[ 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 …

Leave a Reply

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