2011-12-23 51 views
0

我想爲這個DSP處理器實現一些東西。 http://www.onsemi.com/pub_link/Collateral/BELASIGNA300-D.PDF這裏是它的數據表。DSP處理器字大小

這是我想要實現的函數之一..所有變量都是16位int除了mem [j]是32位int(在我的電腦上)。(fixed point算術) 它是一個IIR過濾器(直接格式2轉置)

看第15-16頁我不知道我是否可以存儲int32。因爲我看到了不同的總線大小.. 48,24,32 ..

如果是24,然後它不會起作用,因爲MEM [J]值超過24位...
它具有56位累加器,這樣就可以了,但我不知道這是否可以存儲在內存(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位int和32位int操作的數量。

該數據表說,該芯片有一個專用的IDE。 IDE文檔和/或編譯器應該能夠告訴你是否支持32位整數。