*현상 : Verilog으로 HDL생성시 Fixed Signed Multiplication이 시뮬레이션에서 제대로 나오지 않는다.

*원인 : Multi가 구현된 부분을 보면 아래와 같아서 unsigned 곱셈이 일어난다.

  assign
    t_12 = (t_13 >>> 16);
  assign
    t_13 = (t_14 * t_15) + 48'h 8000;

*해결 : 아래와 같이 수정하면 해결되지만, 크고 무거운 알고리즘이라면 생성할 때마다 수정해줄 수 없으니 가능하면 VHDL로 생성하기를 권장한다.

  assign
    t_12 = (t_13 >>> 16);
  assign
    t_13 = (t_14 * t_15) + 48'sh 8000;

 

*현상 : Timing Simulation에서 값이 XXXXX나 특정비트가 X로 뜬다.

*원인 : 모듈안에서 변수 선언시 초기화 하지 않는 경우에 일부 발생

*해결 : "모든" 변수는 무조건 초기화값을 넣어준다.

 

*현상 : Timing Simulation에서 128버스가 제대로 동작하지 않는다.

*원인 : 미상

*해결 : 미상

 

*현상 : Timing Simulation에서 CO_FXCONST를 사용한 초기화 값이 제대로 들어가지 않거나 일부 비트가 X로 뜬다.

*원인 : 항상 그렇지는 않지만 종종 발생하는 "버그"이다. Behavior Simulation는 제대로 나온다.

*해결 : 고정값이라면 VS에서 값을 확인하여 아래와 같이 할당하도록 하고 위와 같은 초기화는 피한다.

int32 Temp = 0x123;

 

*현상 : #pragma CO INLINE를 사용한 함수를 호출시에 입력 Parameter와 Variant의 형이 일치하지 않으면 Simulation 값이 제대로 나오지 않는다.

*원인 : 예) Parameter Type은 int32 입력 Type은 int16인 경우

*해결 : 두가지의 형을 맞춰준다. 고정된 코드라면 가급적 함수를 풀어서 모듈에 넣도록 하는게 최선이다.

 

*현상 : Simulation시에 입력 변수의 크기가 배열의 크기를 넘었다는 에러가 나온다. (버그라기 보단 팁)

*원인 : 아래와 같이 조건식 내부더라도 Addr버스의 경우 직접 연결되어 있으므로 입력변수가 버퍼크기보다 커질 수 있다면 발생한다. 또는 루프안에서 씌이는 경우 Loop Iteration은 항상 조건+1의 크기를 가지므로 발생할 수 있다.

int BUF[MAX];
 for(i=0;i<MAX;i++)
 {if(i<100)
  {if(BUF[i&0x7F]!=0)
        diff++;
   }
 }

*해결 : FEATURE_BUF[i&0x7F];와 같이 MASK를 씌우거나 버퍼의 크기를 여유있게 할당한다.

 

*현상 : StageMasterExplorer에서 나눗셈에서 걸리는 Rate(Cycle/Result)와 시뮬레이션에서의 결과가 다르다

*원인 : StageMaster에서는 Rate2로 나오지만 실제로는 Fixed_32/Fixed_32의 경우 32(정확하지 않음) Clock을 필요로 한다.

*해결 : Resource에 적합하게 병렬이나 파이프라인 구조로 놓아서 Rate를 줄이자

 

*현상 : Float형을 입력 Param으로 받는 함수를 사용하는 모듈의 Synthesis가 제대로 이루어지지 않는다.

*원인 : Float형의 Param이 들어가는 함수의 경우 "종종" 제대로 생성하지 못한다.

*해결 : Float형을 사용하지 않던지 함수를 사용하지 않던지 한다.

 

*현상 : StageMaster에서 추천하는 Delay로 PipeLine시켰는데 Behavior Simulation에서 결과가 제대로 나오지 않는다.

*원인 : 정확히 파악 안됨.

*해결 : 가장 Performance가 높게 나온 Delay는 32였지만 Delay를 64로 높이니 결과가 잘 나온다.

낮은 Delay에서는 어느정도 margin을 가져가야 하지 않나 싶은데 StageMaster도 100% 신뢰하지 말자..

 

*현상 : 모듈 안에서 함수를 INLINE하여 사용하고 Simulation하였을 때에 결과가 제대로 나오지 않는다.

*원인 : Const한 상수값을 인수로 넣어 주었는데 StageMaster로 해당 모듈을 보았을 때에 제대로 INLINE 구현이 되어 있지 않았다. (마지막 결과 출력이 빠져있었다.)

*해결 : 리소스가 충분하다면 Generate 옵션에서 Enable constant propagation을 해제해준다.

by 고민고민하지마~* 2012. 9. 20. 09:51
| 1 |