PACDSP平行化組語實現之高效能AAC解碼器

A High Performance AAC Decoder on PACDSP Platform using

                                    Parallelized Assembly Coding Technique

 

 

Demo影片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I. 作品簡介

本作品使用一具有5-way VLIW架構的PAC DSP平台上開發高效能的MPEG AAC解碼器系統,在Versatile Platform上除了原本的ARM processor,另外在logic tile加入了PAC DSP,使整個系統成為Dual Core的平台。ARM的部份負責處理使用者的輸入介面、將AAC檔載入到SDRAMPAC DSP的部份處理整個AAC解碼器運算及運算所需的輸入與輸出資料的傳送接收等,ARMDSP之間可以透過memory mapped register進行溝通並利用簡單的Finite State Machine來控制解碼的流程。輸出的介面可以透過Versatile上的Audio Codec (AACI) 將解碼後的PCM data直接透過喇叭進行播放,其中將PCM dataSDRAM讀取到AACI FIFO的動作則是透過Versatile上的DMA機制來處理,而不影響到ARMDSP的處理程序。

AAC解碼器系統架構圖

II. 設計重點

(1)使用組合語言撰寫整個AAC解碼器,並非只是將C Code單純porting到組合語言的過程,由於PAC DSP屬於VLIW架構且具有5-way的平行處理能力,程式撰寫將針對指令的平行度作最佳化。

(2)針對AAC解碼器中複雜度較高的模組(例:Filterbank),搭配適合的快速演算法來降低運算量並加速。

(3)Huffman解碼模組針對variable bit length進行處理,除了增加search的速度外,也減少Huffman table消耗的記憶體資源

(4)利用PAC DSP提供之特殊指令集,配合各個模組的特性發揮這些指令的效能,降低各模組的計算量,減少所需的工作週期 (cycle count)

(5)相對於以C Code方式實現的AAC解碼器,我們能以更低的操作頻率和更少的工作週期即時(Real-Time)解碼AAC bitstream,此外其功率消耗也因而大幅減低。

 

III. AAC解碼流程

 

 
 

                                                             

 

 

 

 

 

 

 

 

 

 

 

 

IV. 設計方法及創意

  • Noiseless Decoding

  • Count leading sign with 2-level table lookup

PAC DSP中有個CLS指令可以計算leading sign bit的位元數,我們分析AAC Huffman table可以充分利用這個指令的特性,如圖(a)所示,將原本的Huffman table根據前面的leading sign bit做分群的動作,再將此分群的資訊建立ㄧ個索引的表如圖(b)所示,最後實際的codeword資訊則是建立在圖(c)中,利用CLS的指令可以很快的進到相對應的Sub-group解出codeword,除了解碼速度很快之外table size也很小。

 

 

 

 

 

 

 

 

 

 

 

 

  • Inverse Quantizer

  • 256-size table lookup with interpolation   iq = |x_quant|4/3

  Linear Search Binary Search Two-step table lookup Ours (Count leading sign)
HCB_1 81 162 160 92
HCB_2 81 162 113 104
HCB_3 81 162 793 122
HCB_4 81 162 226 120
HCB_5 81 162 288 112
HCB_6 81 162 166 112
HCB_7 64 128 218 97
HCB_8 64 128 123 97
HCB_9 169 338 603 228
HCB_10 169 338 290 217
HCB_11 289 578 408 345
HCB_SF 121 242 2060 173

數值小於256直接查表,大於256則用內插。因為PAC DSP只支援16bit x 16bit乘法,而IQ運算需要32bit x 16bit乘法,所以要分兩次做再加起來,再調整為所需的format,如圖所示,D5rem所以都是整數而AC016bit都是0,只取後半部即可

                                                               

IQ定點數定義及32x16乘法運算示意圖
  • Scale Factors

  • 4-size table lookup with shift operation   gain = 20.25(sf-100)

設計中gain的部份只存20,20.25,20.5,20.75搭配shift完成非線性的運算。如圖左所示,如果rescale的值往左shift 12 bits,整數部分差了3 bit準確度,利用AC暫存器增加8 bit精準度,如圖右所示,rescale的值往左shift 12 bits,再調整為Q23.8 format,誤差只有1 bit

                      

Rescale乘法運算的比較
  • Middle/Side and Intensity stereo

  • Flow integration and loop reduction

圖左及圖右分別表示M/Sintensity的解碼流程圖,原本獨立的兩個流程,經由分析發現M/S只有common_window=1ms_mask_pre才不為0,所以這兩個流程可以共用相同參數,我們將M/Sintensity整合成單一流程並省下50%的運算量

                                       M/S stereo解碼流程                                            Intensity stereo解碼流程

                                               

                                整合之M/SIntensity stereo解碼流程圖

  • Filterbank

  • N/4-point IFFT fast algorithm for IMDCT

  • Two cluster parallel optimization

Filterbank占了整個AAC解碼流程裡最高的運算量,而IMDCT是其中最主要的運算且消耗最多的運算複雜度,因此需要使用快速演算法來降低整個運算量。 我們採用以IFFT為核心轉換的快速演算法來實現IMDCT,其運算複雜度可從原本的O(N2)降到O(Nlog2N)

IFFT快速演算法可大略分為下列四個步驟

(1)Pre-twiddle

(2)N/4-point Complex IFFT

(3)Post-twiddle

(4)De-interleaving

                                                                                          

                                                                                           Filterbank快速演算法流程圖

V. ARMDSP系統整合

本設計中ARM進行解碼流程的控制,將AAC bitstream送至DSP local memory、接收DSP解碼完之PCM data及播放的動作等,而DSP接收到AAC bitstream及啟動訊號(dsp_flag)之後完成AAC的解碼流程並送出PCM data,為了提升ARMDSP的效率,兩個處理器以平行化在處理,也就是DSP處理目前的frame時,ARM已經在處理下一個frame。 為了減少控制複雜度,每一次從VersatileSDRAM固定搬4KByte資料到DSP local memory,記錄每個frame結束的位置,下一次從此位置重新搬移4KByte資料

                            

                                                                                                  ARMDSP系統整合流程圖

VI. 實驗結果

                                             AAC設計規格列表

Standard MPEG-2 AAC (13818-7)
Profile LC (low complexity)
Bitstream format ADIF
Channel Mono/Stereo
Sampling frequency 8-96KHz
Output 16-bit PCM

AAC解碼器Cycle count統計

Functions Cycles
Huffman 32,557
IQ、Rescale 54,886
M/S 3,621
TNS 94,208
Filterbank 165,008
Total 350,280

AAC解碼器使用資源需求表

Operation frequency 15 MHz (Fs=44.1KHz)
RMS level 6.4 x 10-5 (Limited accuracy)
Program memory 27KB
Data ROM 14.33KB
Data RAM 12.66KB

VII. 結論

(1)本設計以PAC DSP組合語言開發一最佳化MPEG-2 AAC解碼器,每個模組都經過最佳化處理,不論是演算法或解碼流程的簡化,甚至以高平行度化的撰寫語法來最佳化等

(2)本系統只需以15MHz操作頻率即可達即時播放之性能local memorycode size都只需27KB

(3)利用Versatile上的雙核心平台完整驗證AAC解碼器,透過我們設計的使用者介面,使用者可直接選擇想要播放之歌曲,立即從喇叭聆聽由AAC解碼器所解碼之音樂歌曲