ASIC SoC2009. 9. 25. 09:26
SystemC언어로 설계하면 여러가지 편한점과 불편한 점이 있는데요
가장 불편한점은 누구 하나 속시원하게 해본적이 없다는 점입니다.

상위 수준 상위수준 하지만, 얼마 만큼의 상위수준까지가 합성이 되는지에 대해서 아직은 아는 사람이 없다는  부분이 또 걸리는 문제입니다. 결국 ERROR & TRY를 계속하면서 가는 수 밖에 없는 것 같습니다.


아직은 불편한 점도 많지만,
편한점은 몇가지 루틴만 이해하면 바로 설계에 들어갈 수 있다는 점이 장점입니다.

그런 점에서 보았을때 Typedef를 적절하게 이용하면 편리한 설계를 할 수 있습니다.
typedef + struct로 정의하는 것입니다. 이런 방식은 VHDL의 Record 타입과 비슷한 개념입니다.

몇가지 사항을 typedef로 정해서 진행하다 보면 쓸데 없는 오류에 봉착하는데요.. 아래에 그런 것에 대해서
한가지를 정리해 두었습니다.
진행하다가 더 나오면 그때 그때 정리하도록 하겠습니다.


SystemC에서 BUS는

sc_uint< bussize > busname;

으로 정의가 됩니다.

그런데 귀찮아서 이를 typedef로 정의하고 사용하면 에러가 발생합니다.

typedef sc_uint<32> tBUS_TYPE;

이라고 정의하고,

아래와 같이 함수에서 사용하면 에러가 발생합니다.

void classname::foo()
{
switch(BUS_TYPE)
{
....
.......
}
}


그래서

void classname::foo()
{

sc_uint<32> BUS_TYPE_int ;
BUS_TYPE_int = BUS_TYPE;

switch(BUS_TYPE_int)
{
case AHB :
....
case AXI  :
....
case WISHBONE :
....
}

}

위와 같이 로컬 변수로 받고 정의하면 에러가 없이 실행이 됩니다.
이것은 Signal로 선언되면 Signal Class로 다시 한번 상속되기 때문에,
container로 확장된 값과는 틀린 의미여서 switch로 사용할 수 없기 때문입니다.

좀더 직접적인 방법은 read() 메쏘드를 사용하는 것입니다.

switch(BUS_TYPE.read())
{
case AHB :
....
case AXI  :
....

이렇게 하면 후처리 작업이 필요 없이 정리할 수 있습니다.

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

취업 씨즌이 시작되었군요  (0) 2009.10.27
SystemC : Module을 인스턴스 할 때에 파라미터 전달 하기.  (0) 2009.10.21
SystemC : Thread 2nd  (0) 2009.08.26
GTKWave 를 OSX에서 구동하기  (0) 2009.08.24
SystemC : Thread  (0) 2009.08.21
Posted by GUNDAM_IM