[SC] Structure

2010/01/18 17:04 / ASIC SoC
SystemC로 설계하는 도중에 정리를 하지 못한것이 있었습니다.
- 이 문제로 반나절을 버그 찾느라고 날렸습니다.
- 알고나면 아주 간단한건데 역시 모르면 닭질하는군요

이 내용는 KAP의  SystemC: from the ground up에서 가지고 왔습니다.
Chapter 10절에 해당하는 내용입니다.

계층적으로 설계할 경우 서브 모듈에서 다른 서브 모듈을 불러서 할 경우 2가지 방법이 있습니다.
하나는 Direct sub module header only implementation 방식이고
다른 하나는 Indirect sub module header only implementation 방식입니다.

아래와 같은 방식이 전자인 직접 연결 방식입니다.

SC_MODULE(body)
{
.......
   Wheel wheel_R ;
   Wheel wheel_L ;
........

  CTOR(body)
    : wheel_R("WHEEL_R"),
      wheel_L("WHEEL_L")
    {
      ......

      ......
    }


};

아래 방식이 간접 연결 방식입니다.

SC_MODULE(body)
{
.......
   Wheel pWheel_R ;
   Wheel pWheel_L ;
........

  CTOR(body)
    {
      ......
     pWheel_R = new Wheel("Wheel_R");
     pWheel_L = new Wheel("Wheel_L");
      ......
    }
 ...
};


차이점은 직접 인스턴스를 만드느냐 아니면 포인터로 받느냐 입니다.
에궁 이 단순한것도 몰라서 고생하다니 웬지 억울합니다.
매뉴얼 안보고 게임하는거나 같군요

2010/01/18 17:04 2010/01/18 17:04
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]

SystemC에서 Module을 생성할 때에 파라미터를 전달하는 방법이 가끔 필요합니다.

같은 모듈을 인스턴스로 생성시키지만, 특정 파라미터를 바꾸어서 동작을 틀리게 할 경우에 유용하게 사용할 수 있습니다.


이런 경우에 아래와 같이 구성하면 됩니다.


#if 0

SC_CTOR(AXI_TestMaster)  {

// main function

SC_CTHREAD(AXI_TM_entry,CLK.pos());

}//end of SC_CTOR

#else

SC_HAS_PROCESS(AXI_TestMaster);

AXI_TestMaster(sc_module_name nm, char * filename = "Default.tsq") : sc_module(nm) {

// main function

FileName = filename;

SC_CTHREAD(AXI_TM_entry,CLK.pos());

}

#endif


........
사용 예
      AXI_TestMaster AXI_TM0("TestMaster0.cfg");
      AXI_TestMaster AXI_TM1("TestMaster1.cfg");
      AXI_TestMaster AXI_TM2("TestMaster2.cfg");

각각의 모듈이 기본적인 동작은 같지만 운용 방법을 조금 씩 틀리게 할 경우 위와 같이 준비하여 두면 편리합니다.

이 방식에 대한 참고 사이트는 아래와 같습니다.

http://www.doulos.com/knowhow/systemc/faq/
 

2009/10/21 12:55 2009/10/21 12:55
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]