LabVIEWは、データフローモデルを使用してコードを実行する際、FPGAの論理を同期します。デフォルトでは、実行する各処理の利用可能な伝播時間を最大限にするため、ブロックダイアグラムで論理関数間に自動的にレジスタが配置されます。

伝播遅延とは、信号が1つのレジスタから次のレジスタに到達するまでの時間です。組み合わせパスとは、信号が1つのレジスタから次のレジスタに移動する間に通過する論理と配線の集合体です。

レジスタはクロックサイクルごとに更新されるため、伝播遅延はクロックサイクルを超えてはなりません。伝播遅延は、論理遅延および経路遅延の2つの要素から構成されています。論理遅延は、信号が通過する論理ゲートの数およびタイプの関数で、伝播遅延の最も大きな要素です。経路の遅延は、信号が通過するワイヤパスの長さの関数で、FPGAコンパイラが組み合わせパスのコンポーネントをできるだけ密着させてクラスタを作成するため、通常はわずかです。ただし、FPGA VIがFPGAのサイズ制限に近づくと、関数間の物理的距離が増加し、2つのレジスタ間の伝播遅延全体で経路遅延が占める割合が大きくなる可能性があります。FPGAコンパイラは、2つのレジスタ間の伝播遅延がFPGAクロックレートを超えると、タイミングエラーを返します。このタイミングエラーは、時間制約違反または周期制約違反とも呼ばれます。

メモ 関数の論理遅延はターゲットにより異なります。経路遅延はFPGA VIをコンパイルするたびに異なります。

LabVIEW FPGAモジュールは、シングルサイクルタイミングループの外側では少なくとも40 MHzのクロックレートで実行可能な回路を生成するように設計されています。40 MHzのクロックレートは、25ナノ秒クロックサイクルに対応します。2つのレジスタ間の伝播遅延が25 nsを超えるのを防ぐために、ほとんどのLabVIEW関数には出力レジスタが含まれており、実行に1クロックサイクルが必要です。2つのレジスタ間の伝播遅延が25 nsを超える場合、FPGA VIはデフォルトの40 MHzクロックレートでコンパイルできません。

たとえば、関数Aに6 nsの論理遅延、関数Bに14 nsの論理遅延が必要な場合を考えます。関数Aおよび関数Bの間にレジスタを配置せずに連続して配線すると、論理遅延の合計は20 nsになり、関数がデフォルトの40 MHzクロックレートでコンパイルするためには、経路遅延には5 nsの余裕があります。FPGAコンパイラが関数間でどのようにワイヤを経路設定するかにより、経路遅延は、以下のシナリオ1および2に示すように、25 nsを超える場合も超えない場合もあります。

シナリオ1では、設計は40 MHzクロックのタイミング制約を満たしています。シナリオ2では、設定は40 MHzクロックのタイミング制約を満たさず、FPGA VIをコンパイルしようとするとタイミング違反のエラーが発生します。反対に以下のシナリオ3では、2つの関数間に1つのレジスタを配置しています。このレジスタを配置すると、2つの異なる伝播遅延が生じます。この場合、経路遅延が長くても40 MHzでコンパイルされます。

関数がシングルサイクルタイミングループ内にない場合、FPGAコンパイラによって関数の論理レベル間に標準間隔でレジスタが配置され、論理演算がデフォルトのFPGAクロックレートで実行可能な大きさに分割されます。メモリメソッドノードなどの内部レジスタを含む関数をFPGAで実行する場合、関数の実行には関数内に含まれるレジスタ数と同じ数のFPGAクロックサイクルが必要です。

論理をより短いレイテンシで実行する必要がある場合は、シングルサイクルタイミングループを使用します。シングルサイクルタイミングループの内側に関数を配置すると、コンパイラは関数の出力レジスタを除外するため、シングルサイクルタイミングループが1クロックサイクルで実行を完了します。「スケールされた窓」や「FFT」Express VIなどの一部の関数は、シングルサイクルタイミングループ内に配置されていても複数のクロックサイクルを必要とします。これらの関数のデータのタイミングを調整するには、ハンドシェイクを使用します。

シングルサイクルタイミングループの内側の論理の伝播遅延がクロックサイクルを超える場合、タイミング違反解析ウィンドウにタイミング要件を満たさないシングルサイクルタイミングループが表示されます。場合によっては、フィードバックノードまたはシフトレジスタを使用してパイプライン型設計を実行することにより、組み合わせパスの長さを減らすことができます。

メモ 高スループット数学関数をシングルサイクルタイミングループで使用する場合は、内部レジスタを追加して、関数間の組み合わせパスの長さを短縮することができます。

大規模FPGAアプリケーションのリソースに関する注意事項

各FPGAターゲットには、限られた数のフリップフロップが含まれています。レジスタはフリップフロップを使用して構成されるため、FPGA VIが使用するレジスタの数とタイプによって、FPGA VIがFPGAターゲットに収まるかどうかが決まります。通常、レジスタが使用するフリップフロップの数は、データタイプの幅に対応します。たとえば、I64レジスタではデータの格納に64個のフリップフロップが必要ですが、ブールレジスタで必要なフリップフロップは1つのみです。

ほとんどの場合、FPGAでフリップフロップ数が少なくても問題ありません。ただしFPGAでスペースが制限されている場合は、FPGA VIのサイズを最適化する必要があります。