高スループット数学関数をシングルサイクルタイミングループに配置する
- 更新日2025-03-06
- 6分で読める
高スループット数学関数はすべてシングルサイクルタイミングループの内側に配置できます。ただし、その場合以下の点に注意してください。
- 高スループット数学関数は通常マルチサイクルです。これは、関数が有効な結果を返すのに複数サイクル必要であるということです。マルチサイクルな高スループット数学関数をシングルサイクルタイミングループの内側に配置しても、関数は入力パラメータに対する適切な値をそのクロックサイクル内で返しません。関数のスループットレートおよびハンドシェイク端子の値により、どのクロックサイクルで関数が有効な値を生成するかが決定します。
- 複数の高スループット数学関数をシングルサイクルタイミングループの内側に配置すると、組み合わせパスが長くなり、FPGA VIのコンパイル時にタイミング違反が起こる可能性があります。このため、高スループット数学関数では、さまざまな方法で組み合わせパスの長さを短縮することができます。
シングルサイクルとマルチサイクル関数
高スループット「加算」、「減算」、および「固定小数点に変換」関数はシングルサイクル関数です。これらの関数は、1FPGAクロックサイクルで実行します。その他のすべての高スループット数学関数はマルチサイクル関数です。これらの関数の実行には複数回のクロックサイクルが必要です。複数のマルチサイクル関数をシングルサイクルタイミングループに配置すると、組み合わせパスが1クロックサイクルで実行する上で長すぎます。
高スループットレートを確立する
シングルサイクルタイミングループ内のマルチサイクル高スループット数学関数には、関数の構成ダイアログボックスにあるスループット制御器で関数のスループットレートを指定します。スループットレート (サイクル/サンプル) は、関数が有効な入力データを受信するまでに経過する必要のあるFPGAクロックサイクルの最小数です。そのため、スループット制御器の値が小さい場合、関数で有効な入力データの受信準備が完了するまでに経過するクロックサイクル数がより少ないため、関数の実行がより速くなります。
スループット制御器の重要性を理解するためには、ハンドシェイク端子で接続される3つのマルチサイクル高スループット数学関数を使用してください。この3つの接続された関数の中で、最遅スループットレート (最大値が含まれるスループット制御器) が接続されたすべての関数で確立される最速スループットレートとなります。シングルサイクルタイミングループ内で接続される関数のすべてにこのような制約があります。
ハンドシェイク
マルチサイクル高スループット数学関数は、シングルサイクルタイミングループの各クロックサイクルで実行しますが、毎サイクルで有効な値を返すわけではありません。これらの関数を構成して、関数アイコンに4つのハンドシェイク端子を表示できます。これらの端子を使用して以下の動作が起こるタイミングを決定します。
- 関数が先行の関数からのデータを破棄する。
- 関数が先行の関数からのデータを受け入れる。
- 後続の関数が関数からのデータを破棄する。
- 後続の関数が関数からのデータを受け入れる。
組み合わせパスの長さを短縮する
複数の高スループット数学関数をシングルサイクルタイミングループの内側に配置すると、組み合わせパスの長さが原因で、FPGA VIが必要なクロックレートでコンパイルできない場合があります。この場合、コンパイルステータスウィンドウでFPGA VIのコンパイル時にエラーが返されます。パイプラインステージ数を増やすか入力および/または出力レジスタを関数に追加することで、エラーを防ぐことができます。
パイプラインステージ数を増やす
「高スループット複素数の乗算」関数または「高スループット乗算」関数をシングルタイミングループの内側に配置し、大きなパイプラインステージ数を指定することで、組み合わせパスの長さを短縮できます。大きなパイプラインステージ数を指定する場合、関数が必要なクロックレートでコンパイルできる可能性がLabVIEWで高くなります。
入出力レジスタを追加する
関数の入力および/または出力にレジスタを追加して、組み合わせパスの長さを短縮することもできます。レジスタを追加することでコンパイルエラーを防ぐことができます。ただし、レジスタの各セットは関数のレイテンシを1クロック増加するため、有効な出力値の受信時に余分に1サイクル待機する必要があります。
以下の図は、データがこれらの内部レジスタが追加された関数をどのように通過するかを示します。
構成ダイアログボックスのレジスタセクションを使用して、入力および/または出力レジスタを追加します。