共有リソースを管理する
- 更新日2025-03-06
- 5分で読める
一部のLabVIEW FPGAモジュールアプリケーションには、関数またはサブVIなどの複数のオブジェクトがFPGA VIでアクセスする共有リソースが含まれています。共有リソースとして考えられるものには、以下があります。
- デジタル出力ライン
- アナログライン
- レジスタ項目
- メモリ項目
- FIFO
- ハンドシェイク項目
- 割り込みライン
- ローカル変数とグローバル変数
- 非再入可能サブVI
各共有リソースには、1つまたは複数のリソースインタフェースが含まれます。リソースインタフェースは、以下の図に示すように、オブジェクトおよび共有リソース間で通信します。
同じリソースインタフェースを介して同じ共有リソースへのアクセスを同時に要求する複数のオブジェクトをFPGA VIのブロックダイアグラムに含めると、リソースの競合が発生します。前述の図では、オブジェクトが共有リソースへのアクセスを2つの異なるリソースインタフェースを介して要求しているため、リソースの共有が発生していません。
ただし、以下の図では、2つのメモリメソッドノードが、同じリソースインタフェースを介して同じ共有リソース (マイメモリ項目) へのアクセスを要求しています。2つのメモリメソッドノードが、同時に共有リソースへのアクセスを要求すると、リソースの競合が起こります。
アービトレーションを使用してリソースの競合を回避する
FPGAモジュールには、リソースの競合を回避するために役立つ、複数のオブジェクトが同時にアクセスを要求する場合にアクセスできるオブジェクトを決定するためのアービトレーションオプションがあります。選択するアービトレーションオプションによって、LabVIEWでアービタが使用されるかどうかが決定します。選択可能なアービトレーションオプションは、リソースによって異なります。
リソースインタフェースを介してリソースを要求するオブジェクトは、リクエスタと呼ばれます。以下の図に示すように、アービタがリソースへのアクセスを許可すると、リクエスタはアクセサになります。
通常、オブジェクトは一つのリソースインタフェースと対話します。ただし、複数のインタフェースと対話するオブジェクトも場合によってあります。たとえば、双方向デジタルラインでFPGA I/Oノードを使用する場合、以下の図に示すように、FPGA I/Oノードは出力データおよび出力有効化インタフェースと対話します。
前述の図は、以下の回路図に示す回路に大体割り当てられます。
前述の図では、回路が出力有効化および出力データを個別に管理するため、LabVIEW FPGAモジュールは出力有効化および出力データを個別のリソースインタフェースとして表示します。
FPGA I/Oの各リソースインタフェースのアービトレーションオプション、そしてFPGA VIの最適化が必要な場合はメモリ項目を構成することができます。FPGA VIの設計が終了し、サイズがFPGAの容量に収まり、予測性能を満たし、エラーなしでコンパイルが終了したら、デフォルトのアービトレーションオプションを維持してください。I/Oのデフォルトのアービトレーションオプションは、FPGAターゲットおよびI/Oリソースにより異なります。FIFOおよびメモリ項目のデフォルトのアービトレーションオプションは、リクエスタが複数の場合のみアービトレートです。アービトレーションを含む制御器およびグローバル変数などのその他のリソースアービトレーション設定は固定です。そのようなリソースのアービトレーションオプションは変更できないため、場合によってはブロックダイアグラムのコードを編集してリソースの競合を回避する必要がある場合もあります。