ASIC SoC2009. 11. 4. 21:56

SystemC는 sc_main에서 시작합니다. 보통은 여기서 부터 초기화를 하고 진행하면 되지만

경우에 따라서는 곤란한 경우가 존재합니다.  대표적인것이 특정 그래픽 라이브러리를 함께 사용하고자 할 경우 오류가 발생하게 됩니다. 이는 Multi Thread 환경에서 발생하는 오류입니다.


이를 해결하기 위해서는 해당 라이브러리의 Multi Thread Support 기능을 잘 조정해 주어야 하는데 이 역시 코딩할 때나 컴파일 할 때 신경을 써야 하는게 많으므로 현실적인 해결책이 아닙니다.


그래서 main 함수에서 multi thread에 들어가기 전에 초기화 시키는 방법을 사용하는데 문제는 systemC가 main 함수를 wrapping하여서 sc_main을 제공한다는 점입니다. 그래서  계속 오류가 발생하는 데요.. 이를 해결하기 위해서는 main 함수를 새로 만들어 주어야 합니다.


표준안에 따르면 SystemC는 sc_elab_and_sim 을 호출하여서 시작합니다. 그리고 별도로 main함수를 제공할 수 있도록 되어 있습니다.


과정은 아래와 같습니다.


main.cpp에서 main함수가 있으면 이 함수를 먼저 호출하게 됩니다.

그리고 이 함수의 내에서 sc_elab_and_sim 을 호출하여 systemc의 영역으로 들어갑니다.
sc_elab_and_sim는 sc_main을 다시 호출하도록 정의 되어 있습니다.


아래 코드는 그에 대한 예제입니다.


#include "systemc.h"

//#include <iostream>



int main (int argc, char * argv[]) {

printf("This is  Main Function\n ");

sc_elab_and_sim(argc,argv);

}


int sc_main (int argc, char * argv[]) {

    // insert code here...

    std::cout << "Hello SystemC!\n";

    sc_start();

    return 0;

}



실행 결과는 아래와 같습니다.

This is  Main Function


             SystemC 2.2.0 --- May 25 2008 11:34:05

        Copyright (c) 1996-2006 by all Contributors

                    ALL RIGHTS RESERVED

Packaged for MacOS by Logic Poet: http://www.logicpoet.com


Hello SystemC!



1. 한가지 주의 할 점은 위의 코드에서 main 함수가 가장 먼저 나와야 한다는 점입니다.
name space에 관계된 부분인데, 별도의 키워드를 지정하면 되긴 하지만, 일단은 제일 쉬운 방법중 하나는  코드의 제일 처음에 나오도록 (심지어 변수도 다 뒤에서 정의하도록 한다.) 배열을 정리하면 호출하게 됩니다

'ASIC SoC' 카테고리의 다른 글

PERL TIP  (0) 2009.12.05
Timing Chart  (0) 2009.11.08
SystemC에서 배포가능 버전 만들기  (0) 2009.11.01
취업 씨즌이 시작되었군요  (0) 2009.10.27
SystemC : Module을 인스턴스 할 때에 파라미터 전달 하기.  (0) 2009.10.21
Posted by GUNDAM_IM