*현상 : 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

TortoiseSVN : v.1.7.7 - 64 bit

Araxis : v.2011.4074

WinMerge : v.2.12.4.0

 

General - Subversion - Global ignore pattern (1)

__history *.~* *.dcu *.local *.identcache *.drc *.map *.zip *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store thumbs.db Thumbs.db *.bak *.class *.ap_ *.exe *.dll *.mine *.obj *.ncb *.lib *.log *.idb *.pdb *.ilk *.msi* *.pch *.suo *.exp *.*~ *.~* ~*.* release Release debug Debug ignore Ignore obj Obj *.csproj.user *.user *.dbs *.d ipch *.sdf *.opensdf  bin Bin *.asv


General - Subversion - Global ignore pattern (2) 

__history *.~* *.dcu *.local *.identcache *.drc *.map *.zip *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store thumbs.db Thumbs.db *.bak *.class *.ap_ *.exe *.mine *.obj *.ncb *.log *.idb *.pdb *.ilk *.msi* *.pch *.suo *.exp *.*~ *.~* ~*.* release Release debug Debug ignore Ignore obj Obj *.csproj.user *.dbs *.d ipch *.sdf *.opensdf  bin Bin *.asv


Setting - External Programs - Diff Viewer

"C:\Program Files (x86)\Araxis\Araxis Merge\compare.exe" /max /wait /title1:%bname /title2:%yname %base %mine

"C:\Program Files (x86)\Araxis\Araxis Merge\compare.exe" /max /wait /title1:%bname /title2:%yname %base %mine

-or-

"C:\Program Files (x86)\WinMerge\WinMergeU.exe"  %base %mine /dl %bname /dr %yname

"C:\Program Files (x86)\WinMerge\WinMergeU.exe"  %base %mine /dl %bname /dr %yname

 

Setting - External Programs - Merge Tool

"C:\Program Files (x86)\Araxis\Araxis Merge\compare.exe" /a2 /max /wait /3 /title1:%tname /title2:%bname /title3:%yname %theirs %base %mine %merged

 

Setting - External Programs - Unified Diff Viewer

C:\Program Files (x86)\Araxis\Araxis Merge\Merge.exe

by 고민고민하지마~* 2012. 8. 10. 14:34
| 1 ··· 3 4 5 6 |