隨著人們對于音頻電子產品功能的需求越來越高,8位及16位MCU逐漸向32位MCU轉型已經成為市場趨勢。晶心科技(Andes)作為亞洲首家原創性32位微處理器IP與系統芯片開發平臺的設計公司,面向32位MCU市場推出了Andes Core N9系列低功耗高性價比的32位處理器軟硬核IP。基于該系列處理器,晶心科技針對不同音頻應用提供了多種解決方案。其中包括將多種音頻格式的編、解碼器(開源),例如MP3、AAC、WMA、G729等移植到Andes平臺上。并且利用nds32(基于Andes Core)架構的優勢和針對音頻效能的擴展指令集,以及算法上的改進,對這些編解碼器做了進一步的優化,使其不僅占用的空間較小而且具備了較高的運行性能。本文以MP3解碼器為例,介紹如何將madplay移植到Andes平臺,以及晶心科技基于N903A處理器提供的MP3解決方案。
1.MP3簡介
MPEG-1 Audio Layer3(簡稱MP3)是一種有損音頻編碼方式,它利用掩蔽效應(一種心理聲學模型),將脈沖編碼調制(Pulse Code Modulation)音頻數據中人耳聽覺系統無法察覺的那部分數據去掉,使得MP3能夠在音質丟失很小的情況下把音樂文件壓縮到很小的程度(1:10 甚至 1:12 的壓縮率)。因為其體積小、音質高的特點,MP3已經成為當今最為流行的音頻格式。madplay是目前使用較為廣泛的一種MP3的解碼器,下面將詳細介紹如何使用Andes提供的AndeSight集成開發工具將madplay移植到Andes平臺。
2.環境及軟件介紹
2.1系統環境:
Linux:Fedora 8。
2.2開發環境:
AndeSight v1.4。
AndeSight是晶心科技提供的一種基于nds32架構開發嵌入式工程的圖形化的集成開發環境。主要由AndeSight IDE, AndESLive和nds32工具集3個部分組成。
AndeSight IDE為工程師提供了各種友好的界面,包括對嵌入式工程做編輯,編譯,運行,調試或者評測等等操作。
AndESLive提供了基于nds32架構的仿真器和一種圖形化的虛擬SoC構建模型,它與AndeSight IDE相結合為用戶提供了一個虛擬的硬件平臺。這個虛擬評估平臺提供Andes自行定義ISA的多組系列32位CPU IP以及各種外圍設備IP,并且支持用戶自定義IP模型。
AndESLive配合AndeSight IDE不僅使得SoC設計者能在計劃初期就開始軟件設計、偵錯、最優化等工作,并對系統架構及功能進行檢驗,而且使硬件工程師和軟件工程師具有一樣的能力去制作和修改他們各自的系統模型,可以有效的控制NRE(NonRecurring Engineering)成本,讓軟件工程師在拿到硬件原型之前,即可以進行軟件的開發和優化。
nds32工具集提供了一套在Andes平臺上開發嵌入式應用程序所需要的標準工具,例如編譯器、調試器、鏈接器等。
2.3交叉編譯器:
nds32le-linux-gcc。
nds32工具集中對應不同的Andes Core型號,不同的系統函數庫以及大小端形式等條件,提供了各種對應的交叉編譯器。這里我們選用nds32le-linux-gcc。
2.4軟件包:
除了源碼外,madplay還需要MP3的解碼庫libmad,以及zlib和libid3tag來正確的讀取MP3頭段信息。這四個軟件包都可以在開源網站上獲得。其中,madplay-0.15-1b.tar.gz、libmad-0.15.1b.tar.gz、libid3tag-0.15.1b.tar.gz可以在http://sourceforge.net/project/showfiles.php?group_id=12349獲取,zlib-1.2.4.tar.gz可以在http://zlib.net/獲取。
3.Madplay的移植
3.1編譯函數庫
3.1.1編譯libmad
進入libmad目錄,首先將如下nds32架構的信息加入到配置文件config.sub中(可加到第675行):
nds32*)
basic_machine=nds32-elf
os=-linux
;;
然后依次執行:
#CC=nds32le-linux-gcc ./configure --prefix=$PREFIX/MP3_Decoder --host=nds32-elf --disable-debugging --disable-shared
#make
#make check
#make install
編譯成功后,可以在$PREFIX/MP3_Decoder($PREFIX是用戶設定的路徑)目錄下的included和lib目錄里找到相應的.h文件和.a文件。
3.1.2編譯zlib和libid3tag
需要先編譯zlib。進入zlib目錄后,依次執行:
#CC=nds32le-linux-gcc ./configure --prefix=$PREFIX/MP3_Decoder
#make
#make install
然后編譯libid3tag。先將nds32架構信息加入到文件config.sub中(方法同libmad),然后執行如下命令,編譯libid3tag時需要用到編譯zlib生成的頭文件和庫文件:
#CC=nds32le-linux-gcc ./configure --prefix=$PREFIX/MP3_Decoder --disable-debugging --disable-shared CPPFLAGS="-I/tmp/MP3_Decoder/include" LDFLAGS="-L/tmp/MP3_Decoder/lib" --host=nds32-elf
#make
#make install
同樣,在編譯成功后libid3tag的相關文件也保存在$PREFIX/MP3_Decoder目錄下面。
3.2在AndeSight中生成madplay
在進入AndeSight圖形化集成開發環境之前,需要先對madplay源碼中的makefile進行配置。首先同樣需要將nds32架構信息加入到config.sub文件中,然后執行如下配置:
#CC=nds32le-linux-gcc ./configure --disable-debugging --disable-shared --host=nds32-elf CPPFLAGS="-I$PREFIX/MP3_Decoder/include -lmad -lid3tag -lz" LDFLAGS="-L$PREFIX/MP3_Decoder/lib" --prefix=/Andestech/AndeSight14/ide/workspace/MP3decoder_madplay
接著打開AndeSight v1.4,建立一個STD C(標準C)工程mp3decoder,并將madplay目錄下的所有文件導入工程中。選擇Project菜單欄選擇Build Project一項,成功進行編譯和鏈接后,在指定的目錄下就會生成madplay的可執行文件,如圖1所示。這樣madlpay就成功移植到Andes平臺上了。

圖1:成功進行編譯和鏈接后,在指定的目錄下就會生成madplay的可執行文件。
3.3測試與驗證
為了驗證移植的正確性,這里我們采用在虛擬的Andes硬件平臺上運行的方式,也就是在AndeSight中通過AndESLive提供的虛擬SoC平臺進行仿真。這里選用Andes_demo.vep這個虛擬開發平臺,它與真實的Andes demo開發板是一樣的。
選取一首MP3格式的歌曲“test.mp3”拷貝到工程mp3decoder的目錄下,然后在運行視窗的Arguments選項中加入指定輸入文件和輸出的文件的格式:

圖2:在虛擬SoC平臺上運行madplay。
在虛擬開發平臺上運行madplay。運行結束后,在工程目錄下會看到“test.wav”文件,如圖2所示。這個文件可以在Windows Media Player進行播放,這樣就驗證了madplay移植到Andes平臺上的正確性。
4.晶心科技在MCU層級的mp3解決方案
晶心科技基于Andes Core N903A處理器對MCU層級的音頻應用提供了全方位的解決方案,包括硬件平臺和軟件包支持。圖3展示了晶心科技提供的完整的音頻開發平臺。
--output=wave:PATH1/test.wav PATH2/test.mp3(輸出格式還可以為.pcm)。

圖3:晶心科技提供的音頻開發平臺。
考慮到從8位MCU升級到32位帶來的硬件成本的增加,晶心科技推出了N903A低功耗高性價比的32位處理器。N903A提供了完全可配置的處理器IP核,包括可配置的I/D cache大小,I/D local memory大小,GPR數量,硬件乘法器等等。這樣,客戶可以根據自己產品的需求,以最小的硬件成本獲得較8位系統更為優化的系統性能。在指令方面,N903A不僅包含了晶心科技自主知識產權的一套高效指令集,而且加入了為提高音頻數據處理能力而特別設計的四十余條音頻擴展指令。另外,針對現有及可預期未來的大多數軟硬件應用特性,晶心科技還提供一種16bit/32bit混合指令集形式,在提供功能之余,縮小了程序所需的內存空間,從而進一步實現降低成本的效益。
軟件方面,晶心科技同樣提供了全方面的支持。包括操作系統、設備驅動、開發工具、中間件、函數庫以及上層的各種應用程序。對于MP3的編解碼器,晶心科技對其代碼大小做了進一步的優化,并利用nds32架構的優勢以及音頻擴展指令集,使其在Andes平臺上運行的性能達到很高的水平。以48KHz/128Kbps的MP3歌曲為例,晶心科技優化的madplay解碼器正朝著10MHz的工作頻率邁進。表1為晶心科技優化的MP3編解碼器在N903A處理器上運行的結果。

表1:晶心科技提供的MP3編解碼器數據。
|