アービトレーションオプションを理解する
- 更新日2025-03-06
- 6分で読める
以下は、FPGAモジュールで利用できるアービトレーションオプションです。
- 常にアービトレート
- 複数リクエスタの場合のみアービトレート
- アービトレーションなし
アービタは、アービトレーション中に以下の手順を実行します。
- 1つまたは複数のリクエスタを待機する。複数のリクエスタがアクセスを要求すると、アービタはアクセサになるリクエスタを決定します。 メモ アービタが複数のリクエスタにアクセス権を与える順序は、確定的ではありません。
- アクセサからリソースインタフェースにデータを渡す。
- リソース実行を開始する。
- リソースの実行完了を待機する。
- データをアクセサに戻す。
- その他の実行用にリソースを準備する。
- 次のリクエスタを待機する。
アービトレーションには、FPGAで大きな領域が必要です。FPGA VI階層全体でリソースインタフェースのリクエスタ数を1つだけにすることができる場合、リクエスタが複数の場合のみアービトレートまたはアービトレーションなしオプションを使用してください。リクエスタが1つの場合はアービトレーションは必要ありません。
常にアービトレート
常にアービトレートオプションが選択されたリソースインタフェースでは、1つのみのリクエスタがアクセスを要求する場合であっても、リクエスタは常にアービタを使用します。常にアービトレートアービタは、共有リソースに対して順次アクセスを保証する正しいラウンドロビンアービタです。アービタは、その他の待機中のすべてのリクエスタがアクセサになるまで、同じリクエスタがアクセサに再度なることを許可しません。その結果、同時に複数のリクエスタが発生した場合にジッタが起こります。
単一のリクエスタチャンネルを複数のリクエスタチャンネルに同期させる必要がある場合は、常にアービトレートオプションを使用します。チャンネル間の同期については、アービトレーションを有効にしたFPGA VIのタイミング設計を参照してください。
複数リクエスタの場合のみアービトレート
リクエスタが複数の場合のみアービトレートオプションが選択されたリソースインタフェースは、FPGA VIに1つのリクエスタのみが含まれる場合にアービタを使用しません。リソースインタフェースに複数のリクエスタが含まれる場合、LabVIEWは要求が同時でない場合もアービトレーション回路を生成します。FPGA VI階層全体で共有リソースに1つのリクエスタのみが含まれる場合、リクエスタが複数の場合のみアービトレートアービトレーションオプションを使用すると、FPGA VIの領域および時間を節約できます。
以下の状況でリクエスタが複数の場合のみアービトレートオプションを使用します。
- FPGA VIが大きく、領域を節約する必要がある場合。
- FPGA VI階層全体でリソースインタフェースにつきアクセサが1つしかない場合。
- 単一のリクエスタチャンネルが複数のリクエスタチャンネルに同期される必要がない場合。チャンネル間の同期については、アービトレーションを有効にしたFPGA VIのタイミング設計を参照してください。
- シングルサイクルタイミングループ内で読み取りまたは書き込みメソッドで構成したFIFOメソッドノードを使用する場合。
- シングルサイクルタイミングループ内で読み取りまたは書き込みメソッドで構成したメモリメソッドノードを使用する場合。
- シングルサイクルタイミングループ内にデジタル出力がある場合。
アービトレーションなし
リソースインタフェースにアービトレーションなしオプションを選択すると、LabVIEWはアービトレーション要素を追加せず、FPGAの領域が大幅に節約されます。アービトレーションなしオプションは、領域を節約する他に、FPGA I/OおよびFIFO関数が単一クロックサイクル内に実行されることを可能にします。ただし、複数アクセサがある場合は、複数の信号が1つの信号に組み合わされて追加の論理になります。アービトレーションなしオプションを使用するには、以下のブロックダイアグラムに示すように、FPGA VIのデータフローにおけるリソースインタフェースへの順次アクセスを保証する必要があります。
上記のブロックダイアグラムでは、フラットシーケンスストラクチャにより2つのFIFOメソッドノードが同時に実行しないことが明らかなため、競合リソースが起こりません。このような場合、アービトレーションなしが適切なオプションです。ただし、アービトレーションなしオプションを選択したにもかかわらず同時要求を行うと、FPGA VIの動作が定義されず、データの破損が起こる場合があります。
複数のアクセサを持つメモリ項目が入ったFPGAアプリケーションをシミュレーションしたときに、アービトレーションなしオプションを選択すると、不正な動作が引き起こされる場合があります。たとえば、アプリケーションに複数のライタが含まれている場合、シミュレーションの間、それぞれのライタで指定されたメモリアドレスの更新が行われる可能性があります。さらに、アプリケーションに複数のリーダが含まれている場合、シミュレーションの間、それぞれのリーダで指定されたメモリアドレスの評価が行われる可能性があります。