Main Content

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

キャプチャ可能な信号を使用して Intel FPGA ボードからオーディオ信号をストリーミングする

この例では、既存の HDL コードを使用して FPGA データ キャプチャでキャプチャ準備完了信号を使用し、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 です。

要件と前提条件

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

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

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

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

サンプルリソースを準備する

Intel Quartus をセットアップします。この例では、Intel 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. FPGA ベンダーAltera に設定します。

2. 生成された IP 言語Verilog に設定します。

3. ポート テーブルで信号の名前を adc_out に変更します。

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

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

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

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

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

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

この例に付属する readyToCapture_top.v ファイルを開きます。このコードのコメントを解除します。

datacapture1 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 = datacapture1;
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. キャプチャしたデータを ロジック アナライザー ツールで表示します。ロジック アナライザー ツールでは、キャプチャされたデータのスナップショットを読み込むのに数秒かかる場合があります。

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

この図は、ロジック アナライザー ツールの 8k サンプルのオーディオ データを示しています。

参考

ツール

関数

関連するトピック