WB_MP3DEC - Wishbone MP3 デコーダ
Language
Contents
Parent article: Wishbone Components
Wishbone MP3 デコーダコンポーネント (WB_MP3DEC) により、オーディオデータ ('MP3') をエンコードした MPEG-2 Layer 3 を容易にデュアルチャンネル 16ビットのサンプルへデコードできます。WB_MP3DEC は、選択した外部の 'scratch' メモリへ接続するオプション機能があります。もし、このようなメモリを使用しない場合、Block RAM(FPGA 内の)を代わりに使用します。
公式でない条件で、WB_MP3DEC は MPEG-1 Audio Layer 3 decoder と呼びます。その公式の名称は limited accuracy ISO/IEC 11172-3 Layer 3-only constant bit-rate audio decoder になります。しかし、これは ISO/IEC 基準で認識された公式のカテゴリのデコーダではありません。ISO/IEC で認識されたデコーダは limited accuracy ISO/IEC 11172-3 Layer 3 audio decoder になります。しかし、それは Layer 1/2 をデコードする必要があります。WB_MP3DEC は、Layer 1/2 のエンコードされたデータのデコードをサポートしません。
また、'free format' はより高く、標準でないビットレートを許可するオプションをサポートします。そして、emphasis は WB_MP3DEC を実行しません。
WB_MP3DEC は、サンプルレート 32/44/48kHz とビットレート 32-320kbit/s の全ての 'MP3' オーディオデータをデコードできます。しかし、それはビットレートが 8/16/24kbit/s まで下がりサンプルレート 16/22.05/24kHz で ISO13818-3 (MPEG-2 Audio Layer 3) low bit-rate extensions をデコードしません。
WB_MP3DEC は、Altium Designer で利用できる 32 ビットプロセッサで使用できます。
特徴的な機能
- 入力を読み、出力を書き込む DMA インターフェース
- 'Scratch' メモリへアクセスするメモリを分割
- サポートした MP3 オーディオデータ サンプルレート: 32/44/48kHz
- サポートした MP3 オーディオデータ ビットレート: 32-320kbit/s
- Wishbone-compliant
利用可能な部品
OpenBus System ドキュメントに配置する部品として、MP3 デコーダコンポーネントは OpenBus Palette パネルの Peripherals 欄にあります。
回路図ドキュメントに配置する部品として、WB_MP3DEC コンポーネントはインストールフォルダ(\Library\Fpga
)の FPGA Peripherals (Wishbone) 統合ライブラリ (FPGA Peripherals (Wishbone).IntLib
) にあります。
ピンの説明
以下のピンの説明は、回路図で使用する WB_MP3DEC コンポーネントです。OpenBus System で同じ信号がありますが、抽象的なシステムではピンレベルの Wishbone インターフェースを隠します。外部のインターフェースの信号は、基礎となる OpenBus System を参照するために使用した親シートシンボルに関連したシートエントリとして利用できます。
作業中
設定
WB_MP3DEC は設定ダイアログを使用して OpenBus System ドキュンメント、または回路図シートに配置後、設定できます。このダイアログへのアクセスは作業しているドキュメントに依存します:
- OpenBus System ドキュメントで – コンポーネントを右クリックしてダイアログを表示し、メニューから Configure コマンドを選択します。あるいは、コンポーネントをダブルクリックし直接、ダイアログを表示します。
- 回路図ドキュメントで – デバイスを右クリックし、メニューから Configure コマンドを選択します。あるいは、デバイスをダブルクリックし Component Properties ダイアログの Configure ボタンをクリックします。
外部の 'scratch' メモリを使用するかどうか指定するためにダイアログを使用。もし、このオプションが無効な場合、FPGA 内の Block RAM を使用します。
操作概要
以下の項目では、WB_MP3DEC の初期化と MP3 データのデコード方法を説明します。
MP3データのデコード
MP3 データ(の最初の部分)は出力バッファ(576 x 32-bit words)と同様にメモリで利用できる必要があります。そして、双方ともデータメモリバスへアクセスできる必要があります。
- STATUS.Reset へ '1' を書いてコアをリセット。
- 必要に応じて SCRATCHADDRESS を書く。
- MP3 データ領域の開始アドレスで READSTARTADDRESS を書く。
- MP3 データ領域の終了アドレスで READENDADDRESS を書く。
- 出力データバッファの開始で WRITEADDRESS を書く。
- STATUS.Start へ '1' を書いてコアを開始。
STATUS.ReadEmpty と STATUS.WriteReady フラグを(polling、または割り込みで)監視します。
もし、デコードされた新しいフレームオーディオを STATUS.WriteReady で設定した場合:
- オーディオを処理します。
- STATUS.WriteReady へ '1' を書いてデコードを続行します。
もし、STATUS.ReadEmpty を設定した場合、コアはデータを処理しません。もし、同じ MP3 ストリームから利用できるデータがある場合、データ領域へそれをロードします。そして:
- MP3 データ領域の開始アドレスと共に READSTARTADDRESS を書きます。
- STATUS.ReadEmpty へ '1' を書いてデコードを続けます。
ダブルバッファ
複数の入出力バッファを使用して MP3 データは読むことができます。そして、コアがデコードしている時、出力オーディオを処理できます。この場合に、WriteReady と ReadEmpty フラグの処理を延長すべきです。
もし、STATUS.WriteReady を設定した場合:
- オーディオを処理します。
- 新しい出力バッファの開始アドレスで WRITEADDRESS を書きます。
- STATUS.WriteReady へ '1' を書いてデコードを続けます。
STATUS.ReadEmpty を設定した場合:
- 新しい MP3 データ領域の開始アドレスで READSTARTADDRESS を書きます。
- 新しい MP3 データ領域の終了アドレスで READENDADDRESS を書きます。
- STATUS.ReadEmpty へ '1' を書いてデコードを続けます。
DMA インターフェース
データ DMA インターフェースは 32-bit wishbone compliant マスターバスから成り、下位 2 ビットは '0' に固定されます。Read と write は常に word-wide、または halfword-wide のどちらかです。VERSION.LittleEndian に依存して、データは big-endian、または little-endian のどちらかです。
scratch DMA インターフェースは 32-bit wishbone compliant マスターバスから成り、下位 2 ビットは '0' に固定されます。Read と write は常に word-wide(M2_SEL_O[3..0] は '1' に固定されます)です。このバスのデータはコアのみで、内部で使用するためのものです。外部の scratch メモリを使用するためにコアを設定する場合、ユーザに見えない FPGA block メモリをコアが使用する場合、このインターフェースは利用できます。
レジスタ インターフェース
Main article: WB_MP3DEC - Accessible Internal Registers
アドレス | 名称 | 関数 |
---|---|---|
0000 (0h) | STATUS | Status and control |
0001 (1h) | INTMASK | Interrupt mask |
0010 (2h) | READADDRESS | Start of Read area |
0011 (3h) | READENDADDRESS | End of Read area |
0100 (4h) | WRITEADDRESS | Start of Write area |
0101 (5h) | SCRATCHADDRESS | Start of Scratch area |
0110 (6h) | HEADER | Header word of last MP3 frame |
1111 (Fh) | VERSION | Core version and endianness |
Software Platform のサポート
WB_MP3DEC は Software Platform でサポートされます。全てのペリフェラルのレジスタは per_mp3dec.h
で記述されます。デバイスドライバは drv_mp3dec.c
と drv_mp3dec.h
で利用できます。そのインターフェースの記述についてはオンライン資料を確認してください。
リソースの使用
MP3 デコーダは多くの scratch メモリが必要です(現在、6080 32-bit words でそれにアクセスするために多くのバンド幅が必要です)。現在のコアを具体化するために、これは分割されたメモリバスへアクセスします。どちらかの BLOCK RAM(off-chip RAM を分割、または CPU と共有した multi-master を使用して)にそれを置くことができます。
320k ビットレート、34MHz で 48kHz ステレオ MP3 ファイルを扱うことができます。本来、外部の scratch メモリを使用している場合、これは wait 状態やバス数にも依存します。
サンプルデザイン
MP3 デコーダペリフェラルを使用している2つのサンプルデザインは、Altium Designer インストール時に含まれています:
MP3_Decoder.PrjFpg
–\Examples\Soft Designs\Audio\MP3 Decoder
フォルダに保存されています。
NB3000_MP3_Decoder.PrjFpg
–\Examples\Soft Designs\Audio\NB3000 MP3 Decoder
フォルダに保存されています。