基於晶心科技 Andes 平臺的 MP3 移植

Facebook
Twitter
LinkedIn

晶心科技 (Andes)作為亞洲首家原創性 32 位元微處理器 IP 與系統晶片開發平臺的設計公司, 面向 32 位市場推出了 Andes Core N9,N10,N12 三個系列低功耗高性價比的 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:Fedora8

2.2 開發環境:
AndeSight1.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‐linux os=‐
                linux
                ;;
然後依次執行:
#CC=nds32le‐linux‐gcc ./configure ‐‐prefix=$PREFIX/MP3_Decoder ‐‐host=nds32‐linux
‐‐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‐linux
#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‐linux 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 平臺上了。

3.3 測試與驗證
為了驗證移植的正確性,這裡我們採用在虛擬的 Andes 硬體平臺上運行的方式,也就是在AndeSight 中通過 AndESLive 提供的虛擬 SoC 平臺進行模擬。這裡選用 Andes_demo.vep 這個虛擬開發平臺,它與真實的 Andes demo 開發板是一樣的。
選取一首 MP3 格式的歌曲“test.mp3"拷貝到工程 mp3decoder 的目錄下,然後在運行視窗的Arguments 選項中加入指定輸入檔和輸出的檔的格式:
‐‐output=wave:PATH1/test.wav PATH2/test.mp3(輸出格式還可以為.pcm)。

圖 2 在虛擬 SoC 平臺上運行 madplay

這裡 madplay 運行在虛擬開發平臺的 linux 環境下。運行結束後,在工程目錄下會看到“test.wav"文件,如圖 2 所示。這個檔可以在 Windows Media Player 進行播放,這樣就驗證了 madplay 移植到 Andes 平臺上的正確性。如果希望 madplay 運行在無操作系統的環境中, 只需對 madplay 的源代碼做一些修改(處理與系統調用相關的函數),然後使用 nds32le‐elf‐gcc這款交叉編譯器進行編譯即可。

4. 晶心科技在 MCU 層級的 mp3 解決方案
隨著人們對於音訊電子產品功能的需求越來越高,8 位及 16 位 MCU 逐漸向 32 位 MCU 轉型已經成為市場趨勢。晶心科技基於 Andes Core N903A 處理器對 MCU 層級的音訊應用提供了全方位的解決方案,包括硬體平臺和套裝軟體支援。圖 3 展示了晶心科技提供的完整的音訊開發平臺。

圖 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 處理器上運行的結果。