Home / Language / [ SC Tutorial ] 2. SystemC Components

[ SC Tutorial ] 2. SystemC Components

[1] Modules and Hierarchy

Thiết kế phần cứng thường chứa cấu trúc phân cấp để giảm độ phức tạp. Có hai loại process cơ bản trong SystemC. SystemC simulation kernel lên lịch thực hiện các quy trình mô phỏng (process). Các quy trình mô phỏng chỉ đơn giản là các functions của class SC_MODULE được “đăng kí” với simulation kernel.

Bằng việc sử dụng SC_MODULE class. Nó sẽ xây dựng một hệ thống có phân cấp (hierarchy), Bạn có thể truy cập vào mô hình (model) hoặc bất kỳ signal, port, … nào được đặt tên.

[2] Threads and Methods

Từ góc độ phần mềm, các process chỉ đơn giản là các luồng thực thi (threads).
Từ góc độ phần cứng, các process cung cấp mô hình cần thiết cho các mạch định thời độc lập (independently-timed circuits)
. Các quy trình mô phỏng là các functions của SC_MODULE được đăng ký với simulation kernel. Quá trình đăng ký diễn ra trong giai đoạn elaboration phase (trong quá trình thực thi constructor cho class SC_MODULE) bằng cách sử dụng macro SC_METHOD, SC_THREAD hoặc SC_CTHREAD SystemC.

SC_METHOD là một hàm thành viên của lớp sc_module, trong đó thời gian giữa lúc gọi và lúc trả về hàm
là không đổi. Nói cách khác, SC_METHOD là một hàm C++ thông thường, không có đối số, không trả về giá trị và chỉ được gọi lặp lại bởi simulation kernel.

Sự khác biệt giữa SC_THREADSC_METHOD có 2 điểm. Đầu tiên, trong khi SC_METHOD được gọi nhiều lần, thì SC_THREAD chỉ được gọi một lần. Thứ hai, SC_THREAD có tùy chọn tự tạm dừng và có khả năng cho phép thời gian trôi qua trước khi tiếp tục. Theo nghĩa này, SC_THREAD tương tự như luồng thực thi phần mềm truyền thống.

SC_METHODSC_THREAD là các đơn vị cơ bản của thực thi đồng thời. Simulation kernel gọi từng tiến
trình này. Do đó, người dùng không bao giờ được gọi trực tiếp. Người dùng gián tiếp điều khiển
việc thực thi các tiến trình mô phỏng bởi kernel thông qua các events, sensitivity và notification.

SC_CTHREAD là trường hợp đặc biệt của SC_THREAD. Process này chỉ đơn giản là một thread có yêu cầu sensitive với một clock. Nó tồn tại do các vấn đề lịch sử và một số tools tổng hợp phụ thuộc vào nó tại thời điểm trước đây.

[3] Events, Sensitivity, and Notification

Chúng là những khái niệm rất quan trọng để hiểu việc triển khai đồng thời bởi trình mô phỏng SystemC.

Events ( sc_event class) được kích hoạt thông qua hàm “notify()” là một member function của class sc_event . Một process (SC_METHOD, SC_THREAD, SC_CTHREAD) có thể sensitive bởi một hay nhiều event . Và khi event xảy ra, simulation kernel lên lịch cho process được gọi.

Hai loại sensitivity :

  • Static sensitivity được triển khai bằng cách sử dụng lệnh sensitive của SystemC cho một process tại thời điểm elaboration (trong constructor). Một khi đã được thiết lập, các tham số của static sensitivity không thể thay đổi được trong suốt quá trình mô phỏng. Mục đích chủ yếu là để tiện lợi, đặc biệt cho các tiến trình có danh sách các mục sensitivity cố định.
  • Dynamic sensitivity cho phép quá trình mô phỏng thay đổi sensitivity của nó một cách nhanh chóng. SC_METHOD triển khai dynamic sensitivity bằng lệnh next_trigger(arg). SC_THREAD thực hiện dynamic sensitivity bằng lệnh wait(arg). Cả SC_METHODSC_THREAD đều có thể chuyển đổi giữa dynamic và static sensitivity trong quá trình mô phỏng.
    SC_METHOD(write_port_method);
    dont_initialize();
    sensitive << ev_write_port; //Static sensitivity
...//some code
    void clock_monitor_method() 
    {
        switch (cnt) {
          case 0 : cout << "@" << sc_time_stamp() <<" Default trigger clk triggered"<<endl;
                   next_trigger(e1);//Dynamic sensitivity
                   break;
          ...//some code
        }
        cnt ++;
    }

[4] Ports, Channels and Interfaces

System View in SystemC

Trong SystemC, việc giao tiếp giữa các processes trong cùng một module và giữa các module khác nhau là cốt lõi để mô phỏng các hệ thống phức tạp. SystemC đạt được điều này thông qua việc sử dụng các eventschannels, được kết nối thông qua ports và xác định bởi interfaces .

Trong cùng một module SystemC, các tiến trình (processes) có thể giao tiếp theo nhiều cách:

  • Sử dụng Events
  • Sử dụng các Kênh cục bộ ( sc_fifo<T> )
  • Sử dụng các biến dữ liệu thành viên ở cấp module

Khi giao tiếp giữa các module, SystemC sử dụng một cấu trúc chặt chẽ hơn bao gồm Ports, Interfaces và Channels. Các module giao tiếp với nhau bằng cách kết nối các ports của chúng với các channels. Các interfaces định nghĩa tập hợp các phương thức mà một channel phải cung cấp, cho phép các module sử dụng channel mà không cần biết chi tiết triển khai của nó.

__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 *