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 |