摘 要: FD216是智原科技" title="智原科技">智原科技公司出品的一款結(jié)構(gòu)與ADI公司的ADSP-2181相類似且指令集相兼容的高性價(jià)比16位定點(diǎn)DSP芯片。利用智原科技公司提供的開發(fā)工具包,可以方便地將C算法移植到FD216中。詳細(xì)介紹了在FD216評(píng)估板" title="評(píng)估板">評(píng)估板上用嵌入式C語言和匯編語言混合編程的方法設(shè)計(jì)并實(shí)現(xiàn)基于定點(diǎn)DSP的MP3實(shí)時(shí)解碼" title="實(shí)時(shí)解碼">實(shí)時(shí)解碼器的整個(gè)流程。
關(guān)鍵詞: DSP MP3解碼器 嵌入式C語言 匯編語言
1 FD216 16位定點(diǎn)DSP特點(diǎn)簡介
DSP(數(shù)字信號(hào)處理器)是一種特別適合于進(jìn)行數(shù)字信號(hào)處理的微處理器,主要用于實(shí)時(shí)快速地實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法。FD216是一個(gè)高效能而且易于使用的16位定點(diǎn)DSP,包含DSP內(nèi)核、芯片內(nèi)建數(shù)據(jù)存儲(chǔ)器、程序內(nèi)存、兩個(gè)串行接口、一個(gè)定時(shí)器、12組可編程I/O、內(nèi)部直接內(nèi)存存取(IDMA)接口、外部內(nèi)存接口和串行式在線仿真器(SICE)接口等,兼容ADSP-218X系列匯編代碼,最高運(yùn)行速度可達(dá)到190MIPS。FD216的CM(Code Memory)、PM(Program Memory)和DM(Data Memory)是嚴(yán)格區(qū)分的,在程序設(shè)計(jì)時(shí)要將放在PM區(qū)和DM區(qū)的數(shù)據(jù)分別說明。在移植ADSP2181匯編代碼時(shí),也要做相應(yīng)修改。
2 MP3及其解碼原理
MPEG-1 Audio Layer 3(MP3)[3] 是一個(gè)在低比特率下提供高保真音頻的壓縮標(biāo)準(zhǔn)。特別是在解碼部分,它已經(jīng)成功地應(yīng)用于多種消費(fèi)類電子產(chǎn)品中。
MP3解碼原理:首先將MP3數(shù)據(jù)幀解包,解出幀頭信息和邊帶信息;然后采用霍夫曼解碼解出比特分配信息;接著在逆變換中利用頻譜系數(shù),在綜合濾波器中將32個(gè)子帶合并成一個(gè)寬帶信號(hào)。18個(gè)頻譜值執(zhí)行32次IMDCT(逆改進(jìn)型離散余弦變換),將生成的576個(gè)頻譜值變換成長度為32的18個(gè)連續(xù)的頻譜。通過18次運(yùn)算,多相位綜合濾波器將這些頻譜轉(zhuǎn)換到時(shí)域,完成波形重構(gòu),生成立體聲PCM音頻數(shù)據(jù)。MP3解碼流程圖如圖1所示。
3 開發(fā)環(huán)境
目標(biāo)系統(tǒng)為智原科技公司提供的FD216 DSP評(píng)估板,系統(tǒng)環(huán)境為WIN2K,軟件環(huán)境為FD2XX工具包(DSP C compiler,assembler,linker,debugger)。
圖2為FD216開發(fā)系統(tǒng)結(jié)構(gòu)框圖。
4 MP3解碼器系統(tǒng)設(shè)計(jì)
4.1 設(shè)計(jì)要求
設(shè)計(jì)要求包括以下內(nèi)容:
(1)功能要求:以智原科技公司提供的FD216 DSP評(píng)估板作為目標(biāo)系統(tǒng),進(jìn)行MP3解碼器設(shè)計(jì),要求系統(tǒng)能實(shí)時(shí)解碼采樣頻率為32kHz/44.1kHz/48kHz、數(shù)據(jù)碼率從32到320kbps的MP3比特流。
(2)解碼精度要求:定點(diǎn)MP3解碼精度應(yīng)符合ISO/IEC 11172-4所規(guī)定的限制精度。
4.2 硬件設(shè)計(jì)
硬件設(shè)計(jì)包括以下內(nèi)容:
(1)在FD216評(píng)估板上進(jìn)行正確的硬件配置。
(2)串口" title="串口">串口0配置。FD216評(píng)估板所采用的Audio Codec是Philips公司的UDA1345TS,它與FD216的串口0相連,輸出16位或8位PCM線性數(shù)據(jù)。
(3)串行ICE(SICE)仿真調(diào)試接口。
4.3 軟件設(shè)計(jì)
軟件設(shè)計(jì)包括以下內(nèi)容:
(1)C運(yùn)行時(shí)間庫。C語言運(yùn)行時(shí)間庫(C Run Time Library)是整個(gè)C開發(fā)工具的核心之一,提供了大量的可以直接調(diào)用的庫函數(shù)。
(2)設(shè)置內(nèi)存映射寄存器訪問方式。
5 MP3解碼器程序設(shè)計(jì)
MP3解碼器程序設(shè)計(jì)包括以下內(nèi)容:
(1)定點(diǎn)算法設(shè)計(jì)。盡管定點(diǎn)DSP也支持浮點(diǎn)運(yùn)算,但浮點(diǎn)運(yùn)算會(huì)消耗大量的指令周期和內(nèi)存,也會(huì)降低系統(tǒng)運(yùn)行速度,不能應(yīng)用于MP3實(shí)時(shí)解碼。在程序設(shè)計(jì)中,首先要將MP3浮點(diǎn)C解碼算法轉(zhuǎn)換為定點(diǎn)C解碼算法。浮點(diǎn)算法轉(zhuǎn)換成定點(diǎn)算法實(shí)現(xiàn)過程比較復(fù)雜,本文不再贅述。
(2)在程序的頭部建立正確的運(yùn)行頭(RunTimeHeader)文件。
(3)內(nèi)存分頁/重疊。與ADSP-218X類似,F(xiàn)D216也是通過設(shè)置重疊存儲(chǔ)器選擇寄存器(PMOVLAY/DMOVLAY)來實(shí)現(xiàn)PM(CM)/DM存儲(chǔ)器分頁/重疊的。
FD216的內(nèi)存結(jié)構(gòu)圖如圖3所示。
FD216系統(tǒng)說明文件FD216.SYS說明了FD216 DSP的內(nèi)存分配方式,是支持DSP程序正確運(yùn)行的系統(tǒng)文件。
數(shù)據(jù)、代碼分頁/重疊應(yīng)首先在HOST(PC)上對(duì)數(shù)據(jù)、代碼分別進(jìn)行內(nèi)存分頁,接著使用FD2XX開發(fā)工具包進(jìn)行編譯、匯編、鏈接,生成目標(biāo)代碼,然后下載到目標(biāo)板上運(yùn)行。
(4)中斷服務(wù)子程序" title="子程序">子程序。FD216中斷控制器允許處理器響應(yīng)十二個(gè)中斷之一。在MP3解碼應(yīng)用中使用了如下三個(gè)中斷服務(wù)子程序:
①eset中斷服務(wù)子程序:程序運(yùn)行時(shí),首先進(jìn)入reset中斷服務(wù)子程序,即從start程序開始運(yùn)行,其優(yōu)先級(jí)最高。
jump start; rti; rti; rti; /* Reset */
②ir2_get_data外部中斷服務(wù)子程序:通過IDMA接口經(jīng)過PCI總線從HOST(PC)硬盤讀取數(shù)據(jù)的控制程序。
③intsp0中斷服務(wù)子程序:向串口0發(fā)送數(shù)據(jù)的子程序。為了實(shí)現(xiàn)MP3文件在系統(tǒng)中的實(shí)時(shí)播放,設(shè)計(jì)了雙Buffer通過串口0向Audio Codec傳送解碼后的聲音樣本數(shù)據(jù)。intsp0中斷服務(wù)子程序流程圖如圖4所示。
(5)代碼移植:將MP3 解碼算法C程序移植為可在FD216 DSP系統(tǒng)中運(yùn)行的嵌入式C程序。在此需要注意以下幾點(diǎn):
?、儆捎贒SP系統(tǒng)中沒有文件I/O函數(shù),應(yīng)將C程序中的文件I/O函數(shù)方式改成嵌入式系統(tǒng)中的內(nèi)存直接讀、寫方式。
?、趹?yīng)注意數(shù)據(jù)類型的處理:將C程序中的int類型改成short或long類型,將unsigned int類型改成unsigned short或unsigned long類型,并且為了提高程序運(yùn)行效率,應(yīng)注意盡量少用(unsigned)long型,算法驗(yàn)證無誤后再移植到DSP中。
?、墼诒WC程序正確性、穩(wěn)定性的前提下,應(yīng)通過修改C算法和數(shù)據(jù)結(jié)構(gòu),盡量縮減C程序中表數(shù)據(jù)的尺寸,使表在DSP內(nèi)存中占據(jù)的空間盡量小。
6 MP3解碼器實(shí)驗(yàn)結(jié)論
6.1 算法復(fù)雜度(Complexity)評(píng)測
通過仿真調(diào)試工具debugger對(duì)MP3解碼器在一定條件下進(jìn)行性能評(píng)估(Profile),并計(jì)算出系統(tǒng)所需要的MIPS (Million Instruction Per Second)。基于FD216的MP3解碼算法復(fù)雜度如表1所示。
MP3解碼算法復(fù)雜度為60.01MIPS,只占了系統(tǒng)最大運(yùn)行能力(190MIPS)的31.58%。
6.2 實(shí)驗(yàn)結(jié)果
基于FD216的MP3解碼器的實(shí)驗(yàn)結(jié)果如表2所示。
實(shí)驗(yàn)結(jié)論:系統(tǒng)功能、解碼速度、精度均符合設(shè)計(jì)要求,并且實(shí)現(xiàn)了實(shí)時(shí)解碼、回放。
本文簡要介紹了MP3解碼原理,并詳細(xì)說明了MP3在FD216定點(diǎn)DSP上實(shí)現(xiàn)實(shí)時(shí)解碼的設(shè)計(jì)、開發(fā)流程。在此基礎(chǔ)上亦可開發(fā)、實(shí)現(xiàn)其它格式的壓縮編碼數(shù)字音頻解碼器,如Dolby AC-3 [5]、MPEG-2 Advanced Audio Coding (AAC)、Microsoft(r) Windows Media(tm) Audio (WMA)等。利用DSP可編程特性,可以開發(fā)出多格式音頻解碼器,而不需要增加其它硬件。
參考文獻(xiàn)
1 FD216 16-bit DSP Microcomputer Data Sheet.Hsin-chu,Taiwan:Faraday Technology Corporation, 2002
2 FD216 DSP Evaluation Board User’s Manual. Hsin-chu,Taiwan :Faraday Technology Corporation, 2002
3 ISO/IEC JTC1/SC29/WG11 MPEG, IS11172-3.Informa-tion Technology-Coding of Moving Pictures and Associated Audio for Digital Storage Media at up to About 1.5Mbit/s.Audio, 1992(3)
4 徐科軍,黃云志.定點(diǎn)DSP的原理、開發(fā)與應(yīng)用.北京:清華大學(xué)出版社,2002