FPGAターゲットからホストコンピュータへの複数I/Oチャンネルからのデータ転送にDMAを使用する必要がある場合、NIはDMAバッファにデータを書き込む前に各チャンネルからのデータを1つの配列に組み合わせることを推奨します。このようにデータを統合することはインタリーブとして知られています。複数チャンネルのデータをインタリーブする利点は、インタリーブされた配列の転送は1つのDMAチャンネルのみを必要とするため、別のDMAチャンネルを他のタスクに使用できることです。DMAバッファからインタリーブされたデータを読み取った後に、配列をデシメートしてそれぞれチャンネルごとにデータを取得します。

メモ インタリーブはすべてのチャンネルからのデータが同じタイプの場合に最も適しています。それ以外の場合は、LabVIEWはバッファへの書き込みにデータを強制変換し、それによって精度が下がることがあります。

FPGAターゲットでデータをインタリーブする

以下の図は、データの集録とインタリーブを行うFPGA VIを示しています。

前の図にあるVIは、AI0、AI1、およびAI2の3つの入力チャンネルからデータを集録します。VIは「配列連結追加」関数を使用して、これらのチャンネルからデータを1つの配列にインタリーブします。最後に、FIFOメソッドノードはこの1つの配列をDMAチャンネルに書き込みます。DMAチャンネルは、FPGAターゲットからホストコンピュータに一度に1つの要素ずつこの配列を転送します。

インタリーブにより、配列には以下の要素が含まれています。

配列要素 データ
0 AI0からサンプル1
1 AI1からサンプル1
2 AI2からサンプル1
3 AI0からサンプル2
4 AI1からサンプル2
5 AI2からサンプル2
メモ NIは、バッファの要素数をインタリーブするチャンネル数の整数倍数に設定することを推奨します。この設計によって、バッファは各チャンネルでデータポイントを同数保持します。この例では、バッファは6つの要素を持つため、3つのチャンネルでそれぞれ2つの測定用のスペースがあります。

ホストコンピュータでデータをデシメートする

以下の図は、ホストコンピュータでデータを読み取るVIを示しています。

前の図で、以下の動作を確認します。

  • DMAチャンネルから読み取りを行う場合は、読み取る要素数を指定します。この例でこの数を計算するには、各チャンネルをサンプルした回数をチャンネル数で乗算します。この例では、チャンネル数は3です。
  • 「デシメート1D配列」関数で3つの出力端子を含むようにサイズ変更します。この関数はインタリーブされた配列を3つの別々の配列に分割します。最初の配列にはAI0からの測定、2番目の配列にはAI1からの測定、3番目の配列にはAI2からの測定が含まれます。
    メモ データに4つ目のチャンネルがある場合は、4つ目の出力端子を含むように「デシメート1D配列」関数をサイズ変更します。
  • 「配列連結追加」、「2D配列転置」、「倍精度浮動小数に変換」関数の目的は、データを波形チャートに表示する準備をすることです。これらの関数は、使用するアプリケーションで間引きされたデータの処理に最も適した関数と置き換えることができます。