FIFOを使用してデバイスまたはストラクチャ間でデータを転送する
- 更新日2025-03-06
- 6分で読める
FPGA VIの異なる部分間、FPGAターゲットのVI間、またはデバイス間でデータを転送するには、FIFOを使用します。FIFOは受信された順番で要素を保持し、先入れ先出しのアクセスポリシーでこれらの要素へのアクセスを提供するデータストラクチャです。
以下の図は、FIFOを移動する要素の動作を示しています。
以下の方法で、FIFOを使用してデータを転送します。
- 1つのクロック領域内の並列ループ間
- クロック領域間
- ピアツーピアターゲット間
- ホストコンピュータとFPGA間
FIFOプロパティダイアログボックスで、FIFOの作成と構成を実行します。
VI定義FIFOを除くすべてのFIFOには、プロジェクトの対応項目があります。そのため、VI定義FIFO以外のFIFOを使用してFPGA VIを別のユーザに送信する場合は、プロジェクト全体を送信する必要があります。そうしないと、FPGA VIを実行することはできません。
次のフローチャートを使用して、お使いのアプリケーションの要件に最適なFIFO構成を確認してください。
以下の図は、同じFPGA VI内の2つのシングルサイクルタイミングループ間でデータを転送する際に使用するターゲット指定FIFOの例を示しています。シングルサイクルタイミングループは2つの異なるクロック領域にあります。上位ループは80 MHzクロックを使用して、下位ループは40 MHzクロックを使用します。この例では、80 MHzクロック領域のFPGA I/Oノードはデバイスからの温度の読み取り値を集録します。FIFOメソッドノードはFIFOにデータを書き込みます。FIFOの空の要素を即時に書き込めない場合、ノードがタイムアウトしてループが停止し、書き込みタイムアウト?表示器がTRUEに設定されます。FIFOメソッドノードは40 MHzクロック領域でデータを読み取り、その後にデータを「0より小さい?」関数に渡します。温度が0未満の場合、関数はデバイスが凍結?表示器をTRUEに設定します。データを即時に読み取れない場合、FIFOメソッドノードがタイムアウトしてループが停止し、読み取りタイムアウト?表示器がTRUEに設定されます。
データ転送タスク
以下の方法でデータを転送することができます。
- 1つのFPGAターゲット内―これらのタイプのFIFOを使用して、VI間、1つのVI内のループからおよびループへ、またはクロック領域間にデータを転送します。
- ターゲット指定FIFO―FIFOを表示しプロジェクトエクスプローラウィンドウから構成可能にしたい場合は、ターゲット指定FIFOを使用します。ターゲット指定FIFOには、プロジェクトの対応項目があります。プロジェクト項目を更新すると、FIFOのすべてのインスタンスに影響があります。ターゲット指定FIFOは、プロジェクトエクスプローラウィンドウの同じFPGAターゲットの下のすべてのVIからアクセスできます。ターゲット指定FIFOを使用してFPGA VIを別のユーザに送信したい場合は、プロジェクト全体を送信する必要があります。プロジェクトなしでは、そのFPGA VIは実行できません。
- VI定義FIFO―VI定義FIFOをFIFO名前制御器と使用して、再入可能サブVIを作成してリソースの競合を回避します。VI定義FIFOを再入可能なFPGA VIで構成すると、VIのインスタンスごとに独立したFIFOのコピーが作成されます。
- ホストとFPGA間―ダイレクトメモリアクセス (DMA) FIFOを使用して、ホストとFPGA間で大量のデータを転送します。このタイプのFIFOは直接メモリにアクセスしてFPGAターゲットVIからホストVIへ、そしてホストVIからFPGAターゲットVIへデータを転送します。DMA FIFOは、ホストコンピュータおよびFPGAターゲットの両方にメモリを割り当てますが、単一のFIFOとして動作します。DMA FIFOは、ホストとFPGA間の通信においてフロントパネル制御器および表示器を使用する場合よりも優れたパフォーマンスを提供します。
- 2つのピアツーピアターゲット間―ピアツーピアFIFOを使用して、ホストを介してデータを送信せずにピアツーピアターゲット間でデータを転送します。ピアツーピアストリーミングを使用してFPGAターゲットとFPGA以外のターゲット間でデータを送信できますが、ターゲットがピアツーピアストリームアーキテクチャに対応している必要があります。ピアツーピアFIFOには、プロジェクトの対応項目があります。