パイプライン処理を使用してFPGA VIを最適化する
- 更新日2025-03-06
- 7分で読める
パイプライン処理は、FPGA VIのクロックレートとスループットを高めるための手法です。パイプライン型設計では、シーケンシャルなコードの効率を上げるためFPGAの並列処理機能を利用します。パイプラインを実行するには、コードを複数のステップに分割して、各ステップの入力と出力をループ内のフィードバックノードまたはシフトレジスタに配線します。
シングルサイクルタイミングループで標準実行を行ったFPGA VIとパイプライン実行を行ったFPGA VIを以下のセクションに示します。
シングルサイクルタイミングループで標準実行を行った場合
以下のブロックダイアグラムでは、サブVI A、B、およびCが、シングルサイクルタイミングループの内側で順々に実行されます。このため、シングルサイクルタイミングループのクロックレートを、3つのすべてのサブVIの実行時間の合計が収まるように設定します。
シングルサイクルタイミングループでフィードバックノードを使用してパイプライン実行を行った場合
以下のブロックダイアグラムでは、サブVIの入力と出力がフィードバックノードに配線されているため、サブVIのパイプライン処理がLabVIEWによって行われています。このFPGA VIでは、すべてのサブVIは1クロックサイクル内で並列実行され、最大クロックレートは最大の組み合わせパスを含むサブVIのみにより制限されます。
シングルサイクルタイミングループでシフトレジスタを使用してパイプライン実行を行った場合
また、シフトレジスタを使用して、以下のブロックダイアグラムに示すようにパイプライン処理をしたコードを実装することができます。
パイプライン処理をしたコードを実装する
パイプライン処理をしたコードを実装する際には、以下の動作を考慮してください。
- 最終ステップの出力は入力よりパイプラインのステップ数分だけ遅れた状態になります。
- パイプラインが一杯になるまで各クロックサイクルの出力は無効な値になります。
- パイプラインのステップ数をパイプライン深度と呼びます。
- パイプラインのクロックサイクルを単位とするパイプラインのレイテンシはこの深度に一致します。深度 N のパイプラインの場合、結果は N 回目のクロックサイクルまで無効となり、有効な各クロックサイクルの出力は入力より N-1回のクロックサイクル分遅くなります。
以下の例について検証します。
この例では、サブVI A、B、Cを実行するのに3つの異なる実行ステップがあるため、3つのパイプライン深度ができています。このコードには3つの実行ステップが必要なため、出力はクロックサイクル3まで有効になりません。有効な各クロックサイクルCの出力は、必ずクロックサイクルC – (N – 1) の入力に対応しています。
| クロックサイクル | 説明 |
| クロックサイクル1 | クロックサイクル1では、サブVI Aで最初の測定値 (Meas1) が処理される間に、サブVI BとサブVI Cの両方でシフトレジスタのデフォルト値 (Default) が処理されるため、無効な出力が生じます。 |
| クロックサイクル2 | クロックサイクル2では、サブVI Aで2番目の測定値 (Meas2) が処理される間に、サブVI Bでクロックサイクル1からのサブVI Aの出力が処理され、サブVI CによってサブVI Bからの無効な入力が処理されるため、無効な出力が生じます。 |
| クロックサイクル3 | クロックサイクル3では、すべての入力が有効になり、サブVI Cの出力が初めて有効になるため、パイプラインが一杯になります。サブVI Aで3番目の測定値(Meas3)が処理されると、サブVI Bでクロックサイクル2のサブVI Aの出力が処理され、サブVI Cでクロックサイクル2のサブVI Bの出力が処理されるため、最初の測定値(Meas1)に対応する出力が生じます。パイプラインが一杯になると、それ以降のすべてのクロックサイクルで、2つのクロックサイクルの定数遅延がある状態の有効出力が発生します。 |
パイプライン処理をしてスループットを増やす
パイプライン処理をシングルサイクルタイミングループで使用することにより、より高速なクロック領域を利用でき、スループットを向上することができます。
パイプライン処理をしない場合 (40 MHz)
下記の図の上のセクションは非パイプライン型のループの実行タイミングを示します。このコードは3つのサブVIで構成されており、それぞれに12.5 nsの伝播遅延が必要です。サブVI AからサブVI Cの合計伝播遅延は、40 MHzでコンパイルするのに長すぎる37.5 nsです。
パイプライン処理をした場合 (40 MHz)
図の中央のセクションは、コードのパイプライン処理により伝播遅延が12.5 nsに減少し、ループが40 MHzでコンパイル可能になる方法を示します。
パイプライン処理をした場合 (80 MHz)
図の下のセクションは、パイプライン処理をしたループの伝播遅延が12.5 nsしかないために、80 MHzもの高いクロックレートでループがコンパイルされる様子を示します。