共有リソースを管理する (FPGAモジュール)

一部のLabVIEW FPGAモジュールアプリケーションには、関数またはサブVIなどの複数のオブジェクトがFPGA 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およびメモリ項目のデフォルトのアービトレーションオプションは、リクエスタが複数の場合のみアービトレートです。アービトレーションを含む制御器およびグローバル変数などのその他のリソースアービトレーション設定は固定です。そのようなリソースのアービトレーションオプションは変更できないため、場合によってはブロックダイアグラムのコードを編集してリソースの競合を回避する必要がある場合もあります。

メモ  アービトレーション処理には、数クロックサイクルかかります。アービトレーションには、追加の時間およびFPGA領域が必要で、アプリケーションにジッタが追加される場合もあります。ジッタを回避するようにFPGA VIを設計できます。


この記事は役に立ちましたか。

役に立たなかった