Main Content

Zynq ボードを使用したライブ オーディオ入力のオーディオ フィルターの実行

この例では、オーディオ システムをモデル化し、オーディオ リファレンス設計を使用して Zynq® ボードに実装する方法を示します。

はじめに

この例では次を行います。

  1. ローパス、バンドパス、ハイパス フィルターを使用するオーディオ システムをモデル化する

  2. オーディオ リファレンス設計を使用して Zynq ボードに実装する

この例の目的は、ZedBoard または Zybo ボードのライン入力からオーディオ入力を受け取り、FPGA で処理してから、処理されたオーディオをスピーカーに送ることです。上の図は、このようなシステムの高度なアーキテクチャを示しています。周辺装置とのインターフェイスやアナログ信号とデジタル信号の間の変換には、オーディオ コーデックを使用します。Audio Codec IPs は、オーディオ コーデックの構成、および Zynq Soc とオーディオ コーデックの間でのオーディオ データの転送に使用されます。フィルター IP は、オーディオの処理に使用されます。ARM プロセッサは、使用するフィルターのタイプ (ローパス、バンドパス、ハイパス) を制御するために使用されます。

はじめる前に

この例を実行するには、次のソフトウェアとハードウェアをインストールして設定していなければなりません。

  • HDL Coder Support Package for Xilinx Zynq Platform

  • Embedded Coder Support Package for Xilinx Zynq Platform

  • Xilinx Vivado version 2019.1

  • ZedBoard または Zybo ボード

ZedBoard ボードを設定するには、Xilinx Zynq プラットフォームをターゲットにする方法の概要の例の「Zynq ハードウェアとツールの設定」の節を参照してください。以下に示すように ZedBoard で、モバイルまたは MP3 プレーヤーのオーディオ入力を LINE IN ジャックに接続し、イヤフォンまたはスピーカーを HPH OUT ジャックに接続します。Zybo ボードも同じように設定できます。Zybo ボードの設定については、Zynq ワークフロー用のカスタムのボードとリファレンス設計の定義の例の「Set up the Zybo board」の節を参照してください。

はじめに

次のモデルでは、DUT サブシステム Audio_filter への入力としてオーディオ ファイルが使用されます。このモデルを Simulink でシミュレートすると、処理されたオーディオ エフェクトが Audio Device Writer ブロックを通じて聞こえ、フィルター処理されたオーディオ出力のスペクトログラムが Spectrum Analyzer ブロックで表示されます。

modelname = 'hdlcoder_audio_filter_biquad';
open_system(modelname);

ローパス、バンドパス、ハイパス フィルターを使用するシステムのモデル化

フィルター係数は、MATLAB® 関数を使用して生成するか、Simulink® で生成されます。このモデルでは、filterDesigner ツールを使用して各タイプのフィルターのフィルター係数が生成されます。その後、それらのフィルター係数がエクスポートされて MATLAB ファイルとして保存されます。これらのフィルター係数が Simulink でのフィルターの設計に使用されます。このモデルでは、対応するフィルター係数に応じて、Simulink の離散 IIR フィルター ブロックが双二次ローパス、バンドパス、またはハイパス フィルターとして使用されます。

このモデルは、モデルを Simulink でシミュレートしてテストできます。Spectrum Analyzer で表示される周波数の範囲と Audio Device Writer ブロックを通じて聞こえるオーディオ エフェクトが、選択したフィルターのタイプに応じて変わるはずです。オーディオ入力に対して実行するフィルター処理のタイプは、Filter Select ブロックを使用して選択されます。

Zynq ボードのモデルのカスタマイズ

このモデルを ZedBoard に実装するには、最初に、ZedBoard のオーディオ入力を受け取り、処理されたオーディオを ZedBoard に送り返すリファレンス設計を作成しなければなりません。オーディオ フィルター モデルを統合するリファレンス設計を作成する方法の詳細については、Zynq ボードのオーディオ システム用のリファレンス設計のオーサリングの例を参照してください。

Zybo ボードの場合は、ZYBO ボードのオーディオ システム用のリファレンス設計のオーサリングを参照してください。

リファレンス設計では、左右のチャネルのオーディオ データが 1 つに組み合わされて単一チャネルが形成されます。下位 24 ビットを左チャネル、上位 24 ビットを右チャネルとして連結されます。上記の Simulink モデルでは、Data_in が左右の 2 つのチャネルに分割されます。それらの振幅が 2 つに分けられ、2 つのチャネルが一緒に追加されて単一チャネルが形成されます。このチャネルでフィルター処理が実行されます。

Data_inValid_in は AXI4-Stream 信号です。AXI4-Stream インターフェイスの使用方法を理解するには、Zynq ワークフローでの AXI-Stream インターフェイスを使用したモデルの展開の例の「簡易ストリーミング プロトコルを使用するストリーミング アルゴリズムのモデル化」の節を参照してください。Data_in は処理するデータを格納し、Valid_in はイネーブル信号として動作します。各フィルターは ZedBoard または Zybo ボードの LED にマッピングされており、そのフィルターがオンとオフのどちらであるかが視覚的に示されます。

FilterSelect 入力は AXI4 LITE インターフェイスで制御されます。

AXI4-Stream インターフェイスを使用した HDL IP コアの生成

次に、HDL ワークフロー アドバイザーを起動し、Zynq ハードウェア ソフトウェア協調設計ワークフローを使用して、この設計を Zynq ハードウェアに展開します。詳しい手順については、Xilinx Zynq プラットフォームをターゲットにする方法の概要の例を参照してください。

1.MATLAB コマンド ウィンドウで次のコマンドを使用して Xilinx Vivado 合成ツール パスを設定します。コマンドを実行するときに独自の Vivado インストール パスを使用します。

hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2019.1\bin\vivado.bat');

2. 次のコマンドを使用して、IP リポジトリ フォルダーと ZedBoard 登録ファイルの両方を MATLAB パスに追加します。

unzip('ipcore.zip');
unzip('ZedBoard.zip');
addpath(genpath('ipcore'));
addpath(genpath('ZedBoard'));

Zybo ボードの場合は、次のコマンドを使用します。

unzip('ipcore.zip');
unzip('ZYBO.zip');
addpath(genpath('ipcore'));
addpath(genpath('ZYBO'));

3. DUT サブシステム hdlcoder_audio_filter_biquad/Audio_filter から HDL ワークフロー アドバイザーを起動するか、モデルの [Launch HDL Workflow Advisor] ボックスをダブルクリックします。

このモデル例では、ZedBoard のターゲット インターフェイスの設定は既に保存されているため、タスク 1.1 ~ 1.3 の設定は自動的に読み込まれます。モデルのターゲット インターフェイス設定の保存の詳細については、Save Target Hardware Settings in Modelの例を参照してください。

タスク 1.1 では、[ターゲット ワークフロー] については [IP Core Generation] が選択され、[ターゲット プラットフォーム] については [ZedBoard] が選択されます。Zybo ボードを使用している場合は、[ZedBoard] の代わりに [ZYBO][ターゲット プラットフォーム] として選択します。

タスク 1.2 では、[リファレンス設計] については [Audio System with AXI4 Stream Interface] が選択されます。

リファレンス設計と Filtering Algorithm IP の間のオーディオ データの転送には、AXI4-Stream インターフェイスが使用されます。AXI4-Stream インターフェイスにはデータ (Data) に加え、データ有効 (Valid)、バック プレッシャー (Ready)、データの境界 (TLAST) などの制御信号が含まれます。AXI4-Stream IP コアの生成には、少なくとも Data 信号と Valid 信号が必要です。タスク 1.3 では、次の図に示すように [ターゲット プラットフォーム インターフェイス テーブル] が読み込まれます。オーディオ データ ストリーム端子 Valid_inData_inValid_out、および Data_out は AXI4-Stream インターフェイスにマッピングされ、Pass_through_LED、BiQuad_LPF_LED、BiQuad_BPF_LED、BiQuad_HPF_LED は ZedBoard の LED にマッピングされ、制御パラメーター端子 Filter_select は AXI4-Lite インターフェイスにマッピングされます。Zybo ボードを使用している場合は、[LEDs General Purpose[0:4]] を選択して LED をフィルターに手動でマッピングします。

AXI4-Stream インターフェイスはマスター/スレーブ モードで通信します。このモードでは、マスター デバイスがデータをスレーブ デバイスに送信します。したがって、データ端子が入力端子である場合、これを AXI4-Stream スレーブ インターフェイスに割り当て、データ端子が出力端子である場合、これを AXI4-Stream マスター インターフェイスに割り当てます。

3. タスク 3.2 [RTL コードと IP コアの生成] を右クリックして、[選択したタスクまで実行] を選択し、IP コアを生成します。生成された IP コア レポート内の IP コアについては、レジスタ アドレス マッピングおよびその他のドキュメントを参照してください。

AXI4-Stream Audio に互換するリファレンス設計への IP の統合

次に、HDL ワークフロー アドバイザーで、[組み込みシステムの統合] タスクを実行して、生成された HDL IP コアを Zynq ハードウェアに展開します。

1.タスク 4.1 [プロジェクトを作成] を実行します。このタスクでは、生成された IP コアが Audio System with AXI4 Stream Interface リファレンス設計に挿入されます。最初の図に表示されているように、このリファレンス設計には、ZedBoard で送受信される内外のオーディオ データを処理する IP が含まれます。生成されたプロジェクトは完全な Zynq 設計であり、アルゴリズム部分 (生成された DUT アルゴリズムの IP) とプラットフォーム部分 (リファレンス設計) が含まれます。オーディオ フィルター モデルを統合するリファレンス設計を作成する方法の詳細については、Zynq ボードのオーディオ システム用のリファレンス設計のオーサリングまたはZYBO ボードのオーディオ システム用のリファレンス設計のオーサリングの例を参照してください。

2. [結果] ペインのリンクをクリックして、生成された Vivado プロジェクトを開きます。Vivado ツールで、[Open Block Design] をクリックして Zynq 設計図を表示します。これには、生成された HDL IP コア、その他のオーディオ処理、および Zynq プロセッサが含まれます。

3. HDL ワークフロー アドバイザーで、残りのタスクを実行してソフトウェア インターフェイス モデルを生成し、FPGA ビットストリームを作成およびダウンロードします。[ターゲット デバイスをプログラム] タスクで [ダウンロード] プログラミング メソッドを選択して、FPGA ビットストリームを Zynq ボード上の SD カードにダウンロードし、Zynq ボードの電源をオフ/オンすると設計が自動的に再読み込みされるようにします。

FPGA ファブリックでパラメーターを調整するための ARM 実行可能ファイルの生成

ソフトウェア インターフェイス モデルはタスク 4.2 [ソフトウェア インターフェイス モデルを生成] で生成されます。

1. ソフトウェア インターフェイス モデルからコードを生成する前に、オーディオ入力ソースとオーディオ出力シンク、つまり From Multimedia File、Data Type Conversion、Buffer、Audio Device Writer、および Spectrum Analyzer の各ブロックをコメントアウトします。これらのブロックは ARM プロセッサで実行する必要はありません。Audio_filter IP は FPGA ファブリックで *Filtering_Algorithm" として実行されています。ARM プロセッサは、フィルター タイプ (双二次ローパス、バンドパス、ハイパス、またはパススルー) の選択に AXI4-Lite インターフェイスを使用しています。

  1. 生成されたモデルで、[ハードウェア] ペインをクリックして [ハードウェア設定] に移動し、[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [ソルバー] を選択して [終了時間] を [inf] に設定し、[OK] をクリックします。

  3. [ハードウェア] ペインから [監視と調整] ボタンをクリックします。

  4. モデル ツールストリップで [実行] ボタンをクリックします。Embedded Coder は、モデルを構築し、ARM 実行可能ファイルを Zynq ボード ハードウェアにダウンロードして、これを実行し、モデルを Zynq ボード ハードウェアで実行しているこの実行可能ファイルに接続します。

使用するフィルターのタイプは、Filter Select ブロックのドロップ ダウン オプションを使用して選択できます。

フィルター処理されたオーディオ出力は、Zynq ボードの HPH OUT ジャックにイヤフォンまたはスピーカーを接続して聴くことができます。選択されたフィルターに応じて、Zynq ボードの対応する LED がオンになります。この例では、パススルー (フィルターを使用しない) オプションが選択されると LD0 がオンになり、双二次ローパス フィルターが選択されると LD1 がオンになり、双二次バンドパス フィルターが選択されると LD2 がオンになり、双二次ハイパス フィルターが選択されると LD3 がオンになります。