解決策
LabVIEW FPGA VIはデフォルトで再入可能です。再入可能VIが複数回呼び出される場合、各インスタンスはFPGAデバイスの個別のハードウェアリソースを占有します。非再入可能VIが使用される場合、複数回並行して呼び出されるか、1回だけ呼び出されるかに関係なく、1つのハードウェアインスタンスのみが作成され、そのVIに使用されます。
このデフォルトの動作は、非FPGAターゲットで実行されるVIの反対です。この場合、VIはデフォルトで再入不可であり、一度にメモリ内で開くことができるインスタンスは1つだけです。すべての呼び出し元は、この同じインスタンスにアクセスする必要があります。ただし、VIが非FPGAターゲットで再入可能である場合、VIが呼び出されるたびに新しいインスタンスがメモリで開かれます。
非再入可能サブVIを使用する理由:
- FPGAのハードウェア スペースとリソースを節約するためです。
- 非再入可能VIは、ハードウェアで1つのスペースのみを使用します。 FPGAアプリケーションでスペースが問題になる場合は、再利用可能な複製コードを再入不可VIに配置して、スペースを節約し、リソースの使用を最小限に抑えることができます。
- 非再入可能サブVIを使用して、独立したループ間でデータを保存および転送できます。
- VIのすべての発呼者が同じゲートのセットを使用するため、そのVIの最後の呼び出しからの値が次の発呼者に利用可能になります。
再入可能なサブVIを使用する理由:
- メインVIで使用されているサブVIのインスタンスは1つだけです。
- インスタンスが1つしかない場合、どちらの実行モードでも違いはなく、デフォルトの動作から変更する必要はありません。
- 2つ以上の独立したループに同じサブVIがあります。
- 並列ループでサブVIを再入不可として設定すると、そのサブVIが同時に呼び出されるか、実行中に呼び出されるたびに、ループが互いに待機する可能性があります。これにより、望ましくないジッタが発生し、実行が遅くなる可能性があります。
- 速度は重要であり、FPGA のリソース使用率の限界に達していません。
- プログラムは比較的小さいですが、高い頻度で決定論を維持する必要があります。
- サブVIの呼び出しから次の呼び出しにデータが転送されないように、並列プロセスにはサブVIの独自のインスタンスが必要です。
詳細については、以下の LabVIEW FPGA ヘルプ記事を参照してください。