Trong C/C++, main() là điểm khởi đầu, SystemC đã “chiếm đoạt” quy trình này và cung cấp sc_main() làm sự thay thế. Thư viện SystemC tự định nghĩa main(), và hàm này sẽ gọi sc_main() cùng với các đối số. Theo quy ước, lập trình viên SystemC thường đặt tên file chứa sc_main() là main.cpp để dễ nhận biết đây là nơi mọi thứ bắt đầu. SystemC cũng cung cấp các hàm sc_argc() và sc_argv() để truy cập các đối số dòng lệnh (argc, argv) trên toàn bộ hệ thống phân cấp mô hình.
int sc_main(int argc, char* argv[]) {
ELABORATION
sc_start(); // <-- Simulation begins & ends
// in this function!
[POST-PROCESSING]
return EXIT_CODE; // Zero indicates success
}
Trong sc_main(), mã được thực thi qua ba giai đoạn chính
1. Elaboration Phase (Xây dựng/Chuẩn bị)
- Đây là giai đoạn mà kết nối cho mô hình được thiết lập.
- Các thành phần SystemC như các module phân cấp, module lá, kênh, process mô phỏng và cấu trúc dữ liệu được khởi tạo và đăng ký.
- Việc đăng ký các process mô phỏng và kết nối giữa các module thiết kế cũng diễn ra trong giai đoạn này.
- Các callback function như end_of_elaboration() có thể được sử dụng để can thiệp vào giai đoạn này.
2. Simulation Phase(Mô phỏng)
- Giai đoạn này được kích hoạt bởi lời gọi sc_start().
- Trong quá trình mô phỏng, mã đại diện cho hành vi của mô hình được thực thi.
- Bộ lập lịch (scheduler) của kernel mô phỏng chịu trách nhiệm điều phối việc thực thi các process, tạo ra ảo ảnh về sự đồng thời.
- Các callback function như start_of_simulation() và end_of_simulation() có thể được sử dụng ở giai đoạn này.
3. Post-processing Phase(Hậu xử lý)
- Đây là giai đoạn tùy chọn xảy ra sau khi sc_start() trả về.
- Trong giai đoạn này, mã có thể đọc dữ liệu được tạo ra trong quá trình mô phỏng, định dạng báo cáo, hoặc xử lý các kết quả mô phỏng khác.
- Giai đoạn hậu xử lý kết thúc bằng việc sc_main() trả về một mã thoát (exit status), với giá trị 0 thường cho biết thành công