2011-12-23 2 views
0

이 DSP 프로 세서 용으로 뭔가를 구현하고 싶습니다. http://www.onsemi.com/pub_link/Collateral/BELASIGNA300-D.PDF 여기에 해당 데이터 시트가 있습니다.DSP 프로세서 워드 크기

여기에 구현하려는 기능 중 하나입니다. 모든 변수는 32 비트 int 인 내 [컴퓨터]의 mem [j]를 제외한 16 비트 int입니다. (고정 소수점 산술) IIR 필터 (직접 형식 2 전치)

15-16 페이지를 보면 int32를 저장할 수 있는지 여부를 알 수 없습니다. 왜냐하면 나는 다른 버스 크기를 볼 수 있기 때문이다 ..

만약 mem [j] 값이 24 비트를 초과하기 때문에 24가된다면 ...
그것은 56bit 어큐뮬레이터를 가지고 있지만 괜찮습니다. 나는 이것이 메모리 (32 비트 또는 누산기에서 48)에 저장할 수 있는지 모르겠다.
아직 평가 보드 및 문서가 없다.

그래서 제 질문은 이상의 24 비트를 지원하거나 내가 할 수있는 코드에 변경이 있는지 여부입니다 ... 그것은 아마도 지원

void filter_mem16(const spx_word16_t *x, const spx_coef_t *num, const spx_coef_t *den, spx_word16_t *y, int N, int ord, spx_mem_t *mem, char *stack) 
    { 
     int i,j; 
     spx_word16_t xi,yi,nyi;   

     for (i=0;i<N;i++) 
     { 
      xi= x[i]; 
      //yi=saturate (x[i]+mem[0]>>13) 
      yi = EXTRACT16(SATURATE(ADD32(EXTEND32(x[i]),PSHR32(mem[0],LPC_SHIFT)),32767)); 

      //nyi=-yi 
      nyi = NEG16(yi); 
      for (j=0;j<ord-1;j++) 
      { 
      //mem[j]= (num[j] *xi + mem[j+1]) + den[j] * nyi 
      mem[j] = MAC16_16(MAC16_16(mem[j+1], num[j],xi), den[j],nyi);    

      } 

      //mem[ord-1]=(num[ord-1] * xi) + (den[ord-1] *nyi) 
      mem[ord-1] = ADD32(MULT16_16(num[ord-1],xi), MULT16_16(den[ord-1],nyi));   

      y[i] = yi; 
     } 
    } 

답변

0

32 비트는 처리 속도가 느린 다만 것 integers-, 32 비트 정수와 32 비트 int 연산의 수를 최소화해야합니다.

데이터 시트에 칩에 전용 IDE가 있다고 나와 있습니다. IDE 문서 및/또는 컴파일러는 32 비트 int가 지원되는지 여부를 알려줄 수 있어야합니다.

관련 문제