3. 모듈 (5장. 모듈)
시작 점: sc_main SystemC는 sc_main에서 시작한다 시뮬레이션 준비 sc_start() : 시뮬레이션 실행 시스템 구헝 계층 구조 형성 각종 자료구조 초기화 클럭과 설계모듈, 그리고 모듈을 상호 연결할 채널이 사례화 sc_start() : 시뮬레이션 실행 시뮬레이션 결과 후처리 결과 보고서 작성 파일 마감하고 할당된 메모리 해제 int sc_main (int argc, char* argv[]) { // [시뮬레이션 준비] sc_start (); // 이 함수 호출에 의하여 시뮬레이션 수행 // [시뮬레이션 결과 후처리] return EXIT_CODE; }
설계의 기본 단위: SC_MODULE SystemC의 모듈 어떤 상태의 동작과 행위, 계층성을 갖는 구조 등을 담아두는 가장 작은 단위 SC_MODULE 구문 실제로 SC_MODULE은 다음과 같은 C++ 매크로이다. 즉, SystemC의 sc_module 클래스를 상속 받은 클래서로 정의된다. #include <systemc.h> SC_MODULE (module_name) { // [모듈 본문] }; #define SC_MODULE (module_name) \ struct module_name: public sc_module
설계의 기본 단위: SC_MODULE 모듈 본문의 구성 요소 포트 모듈 내 지역 채널 모듈 클래스의 소속 자료 하위 설계 모듈 모듈 클래스 생성자 모듈 클래스 소멸자 프로세스로 지정될 멤버함수 기타 멤버함수
SC_MODULE 클래스의 구성자: SC_CTOR 하부 설계 모듈의 할당(사례화)과 초기화 하부 설계물의 상호 연결 SystemC 시뮬레이션 커널에 프로세스 등록 정적 감응 지정 기타 사용자 정의 설정 SC_CTOR의 구문 SC_CTOR (module_name) : Initialization // 클래스 구성자 초기화 (선택사항) { Subdesign_Allocation // 하위 모듈 객체 할당(사례화) Subdesign_Connectivity // 하위 모듈 상호 연결 Process_Registration // 프로세스 등록 Miscellaneous_Setup // 기타 설정 }
실행의 기본 단위: SystemC 프로세스 SystemC에서 병렬실행의 기본 단위는 프로세스이다. void PROCESS_NAME (void);
프로세스의 등록: SC_THREAD 클래의 멤버함수를 프로세스로 사용하기 위해서는 시뮬 레이션 커널에 등록해야 한다. SC_CTOR 내에서 프로세스를 등록하기 위한 구문은 다음 과 같다. 간단한 SC_THREAD 사용 예 SC_THREAD (process_name); // 반드시 구성자 내에 사용 SC_MODULE (simple_process_ex) { // 모듈 클래스 SC_CTOR (simple_process_ex) { // 모듈 클래스 구성자 SC_THREAD (my_thread_process0; // 시뮬레이션 프로세스 등록 } void my_thread_process (void); // 프로세스로 사용할 멤버함수 };
간단한 예제 simple_process_ex.h SC_MODULE (simple_process_ex) { SC_CTOR (simple_process_ex) { SC_THREAD (my_thread_process0; } void my_thread_process (void); }; simple_process_ex.cpp void simple_process_ex::my_thread_process (void ) { cout << “my_thread_process executed within “ << name() << endl; } main.cpp int sc_main (int argc, char *argv[]) { simple_process_ex my_instance(“my_instance”); sc_start (); return 0; }
SC_HAS_PROCESS 생성자 사용 방법 부가적인 생성자 인수 예 SC_HAS_PROCESS 예제 SC_CTOR : 생성자 인수로 이름만 전달 가능 SC_HAS_PROCESS : 다양한 생성자 인수 전달 가능 부가적인 생성자 인수 예 SC_HAS_PROCESS 예제 My_memory instance (“instance”, 1024); module_name.h SC_MODULE (module_name) { SC_HAS_PROCESS (module_name); module_name (sc_module_name instname [, others…]); }; module_name.cpp module_name::module_name ( sc_module_name instname [,others …]) : sc_module (instname) { // 생성자 본문 }