[1] Modules and Hierarchy
Trước tiên, chúng ta cần hiểu 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 hạt nhân mô phỏng. 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.
Sự khác biệt giữa SC_THREAD và SC_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_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 viết.
[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 gây ra bởi “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).
- 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_METHOD và SC_THREAD đều có thể chuyển đổi giữa dynamic và static sensitivity trong quá trình mô phỏng.
[4] Channels and Interfaces
Các Modules được kết nối với nhau bằng cách sử dụng các kênh primitive (primitive channels) hoặc các kênh hierarchical (hierarchical channels) . Cả hai loại channel kết nối với các modules thông qua các ports. Khả năng mạnh mẽ để có các channel có thể hoán đổi cho nhau được triển khai thông qua một thành phần gọi là interface.