Main Content

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

Ready-to-Capture 信号を使用してインテル FPGA ボードからオーディオ信号をストリーミングする

この例では、FPGA データ キャプチャでキャプチャ準備完了信号を既存の HDL コードとともに使用して、FPGA ストリーミング信号を読み取る方法を示します。この例は、オーディオ信号をサンプリングするためのオンチップ アナログ デジタル コンバーター (ADC) を実装する既存の FPGA デザインから始まります。ADC の知的財産 (IP) は、制御用の Avalon® メモリマップ (MM) スレーブ インターフェイスとデータ出力用の Avalon ストリーミング インターフェイスを公開します。既存の例には、ADC を開始するための単純な Avalon MM マスターが含まれています。FPGA データ キャプチャを使用して、Avalon ストリーミング インターフェイスから ADC 出力データを収集し、そのデータをMATLAB®ワークスペースにストリーミングします。

ready_to_capture信号は、FPGA データ キャプチャ HDL IP から出力されます。FPGA データ キャプチャ HDL IP の前に先入れ先出し (FIFO) を配置し、データ キャプチャ IP にデータをストリーミングする前にready_to_capture信号をチェックすると、この出力は連続データをキャプチャします。FIFO が空でないことも確認する必要がある場合があります。この図は、継続的なデータ キャプチャのワークフローを示しています。

Avalon ストリーミング・インターフェースからのオーディオ・データは FIFO に書き込まれ、 ready_to_capture信号がアサートされると FIFO が読み取られます。データのオーバーフローを回避するには、 ready_to_captureがアサート解除されたときにデータをキャプチャできる十分な大きさの FIFO が必要です。この例では、FIFO の深さは 16 k に設定され、オーディオ サンプリング周波数は 50 kHz です。

要件と前提条件

  • MATLAB

  • HDL Verifier™

  • インテル® FPGA ボード用HDL Verifier・サポート・パッケージ

  • Fixed-Point Designer™

  • サポートされている EDA ツールとハードウェアにリストされているサポート対象バージョンのインテル Quartus® Prime ソフトウェア

  • Arrow® DECA MAX® 10 FPGA 評価キット

  • DSP System Toolbox™

FPGA開発ボードのセットアップ

1. 電源スイッチがオフになっていることを確認します。

2.JTAG ダウンロード ケーブルを FPGA 開発ボードとホスト コンピュータの間に接続します。

3.(オプション) 3.5 mm オーディオ ケーブルを介して、FPGA ボードのライン入力ポートを携帯電話などのオーディオ ソースに接続します。このステップをスキップすると、キャプチャされたデータはランダムなノイズになります。

サンプルリソースの準備

インテル Quartus をセットアップします。この例では、 インテル Quartus 実行可能ファイルがファイルC:\altera\18.0\quartus\bin\quartus.exeにあることを前提としています。実行可能ファイルの場所が異なる場合は、代わりにパスを使用してください。

  hdlsetuptoolpath('ToolName','Altera Quartus II', ...
                   'ToolPath','C:\altera\18.0\quartus\bin\quartus.exe');

FPGA データ キャプチャ コンポーネントの生成

MATLABでこのコマンドを実行して、 FPGA Data Capture Component Generator ツールを起動します。

  generateFPGADataCaptureIP

この例では、オーディオ システムの既存の HDL コードからの 1 つの信号を監視します。信号は 12 ビットadc_outです。adc_out信号は、オーディオ ライン入力信号のデジタル サンプルです。この信号で動作するようにデータ キャプチャ コンポーネントを設定するには、次の手順に従います。

1. ポート テーブルで信号にadc_outという名前を付けます。

2.信号のビット幅を 12 に変更します。

3.FPGA ベンダーAlteraとして選択します。

4.「生成された IP 言語」をVerilogとして選択します。

5.サンプル深度8192として選択します。この値は、トリガーが検出されるたびにデータ キャプチャ ツールがMATLABに返す各信号のサンプル数です。

この図は、これらのツール設定を示しています。

FPGA データ キャプチャ コンポーネントを生成するには、Generate をクリックします。レポートには生成の結果が表示されます。

FPGA データ キャプチャ HDL IP を統合

生成された HDL IP コアをサンプル FPGA デザインに含める必要があります。生成されたレポートからモジュール インスタンス コードをコピーできます。この例では、生成された HDL IP を FIFO 経由で ADC 出力に接続します。

この例で提供されているreadyToCapture_top.vファイルを開きます。このコードのコメントを外します。

datacapture u0(
.clk(clock),
.clk_enable(adc_valid),
.ready_to_capture(ready_to_capture),
.adc_out(adc_out)
);

readyToCapture_top.vを保存し、変更した FPGA デザインをコンパイルし、次の Tcl スクリプトを使用して FPGA プログラミング ファイルを作成します。

  system('quartus_sh -t readyToCapture_deca_max10.tcl &')

この例に含まれる Tcl スクリプトは、次の手順を実行します。

1. 新しいQuartusプロジェクトを作成します。

2.サンプル HDL ファイルと生成された FPGA データ キャプチャ HDL ファイルをプロジェクトに追加します。

3.設計をコンパイルします。

4.FPGAをプログラムします。

Quartus プロセスが正常に終了するまで待ってから、次のステップに進みます。このプロセスには約 5 ~ 10 分かかります。

データのキャプチャ

FPGA データ キャプチャ コンポーネントが生成されるディレクトリに移動します。

  cd hdlsrc

FPGA データ キャプチャでキャプチャ準備完了信号を使用するには、キャプチャ モードをImmediateに設定する必要があります。即時モードでデータをキャプチャするには、次の手順に従います。

1. FPGA データ キャプチャSystem object™を作成し、これらのプロパティを構成します。

DataCaptureObj = datacapture;
DataCaptureObj.TriggerPosition = 0;
DataCaptureObj.NumCaptureWindows = 1;
setRunImmediateFlag(DataCaptureObj,1);

2.FPGA データを継続的にキャプチャします。この例では、データのNumberOfSampledepthスナップショットをキャプチャします。必要に応じて、NumberOfSampledepthの値を変更できます。

NumberOfSampledepth = 10;
Sample_depth = 8192;
adc_out =  int16(zeros(NumberOfSampledepth*Sample_depth, 1));
for i = 1:NumberOfSampledepth
   [~,~,adc_out(i*Sample_depth-(Sample_depth-1):i*Sample_depth)] = step(DataCaptureObj);
end

3.キャプチャしたオーディオ データを.wav形式で書き込み、キャプチャしたオーディオ データを保存します。キャプチャしたデータを後で処理または再生します。

audiowrite('captured_audio_file.wav',adc_out,50000)

4.Logic Analyzer ツールでキャプチャされたデータを表示します。「Logic Analyzer」ツールは、キャプチャされたデータのスナップショットをロードするのに数秒かかる場合があります。

scope = dsp.LogicAnalyzer('NumInputPorts',1, ...
                          'DisplayChannelFormat','Analog', ...
                          'DisplayChannelHeight',100);
tags = getDisplayChannelTags(scope);
modifyDisplayChannel(scope,tags{1},'Name','adc_out');
scope(adc_out);

この図は、Logic Analyzer ツールのオーディオ データの 8,000 サンプルを示しています。

参考

ツール

  • |

関数

関連するトピック