解決策
シングルサイクルタイミングループとは何ですか?シングルサイクルタイミングループ(SCTL)は、LabVIEWタイミングループストラクチャの特別な使用用途です。タイミングループストラクチャは、FPGA VIで使用する場合は常にSCTLです。FPGAターゲットで使用すると、このループは選択したFPGAクロックの1チック内ですべての関数を実行します。デフォルト設定は、40 MHzのFPGAグローバルクロックです。派生クロックでSCTLを使用することで、40 MHz以外のクロックレートでループを実行することができます。FPGAターゲットで使用する場合、タイミングループのタイミングプロパティを動的に変更することはできません。
SCTLを使用するとどのくらい高速にプログラムを実行されますか?従来のWhileループをFPGA VIで使用すると、各繰り返しを実行するために最低3ティックの実行が必要です。これは、コンパイルされたFPGA VIで使用される有効チェーンが原因です。有効チェーンの説明はこのドキュメントの範囲を超えていますが、FPGA VIがビットファイルにコンパイルされたときのデータフローを保証するために使用されます。
さらに、Whileループ内の各関数は少なくとも1チックを実行する必要がありますが、データの依存関係がない場合、関数は並列に実行されます。SCTLでは、ループ内にあるすべての関数を1ティック内で実行する必要があります。
FPGA VIでSCTLを使用することによるパフォーマンスの長所は、ループの内容によって異なります。コードが通常のループではなくSCTL内で正常にコンパイルできる場合は、パフォーマンスが大幅に向上します。
SCTLはFPGAリソースのブロック効率がより高くなりますか?はい。 ロジックがハードウェアで連結的に実装されているため、コードによって生成されるFPGA構成は、より少ないリソースを使用します。加算をおこなって結果を保存し、結果を乗算して保存する代わりに、SCTLは1ティックで実行し、その間に結果を保存する必要はありません。これにより、前の各操作の結果を保存するための操作間にフリップフロップが必要ないため、FPGAリソースが節約されます。
すべての関数とストラクチャをSCTL内部で使用できますか?いいえ。アナログI/O関数や待機関数など、1ティック以上の関数はSCTL内部では使用できません。また、実行中に1クロックより長い時間がかかるループ内のロジックチェーンがある場合、このロジックをSCTL内で使用することはできず、VIはコンパイルに失敗します。
シーケンスストラクチャはSCTL内に配置できますが、FPGA上で実行される前にコードから削除されます。
シングルサイクルタイミングループヘルプページには、SCTLで使用できない関数のリストを示します。 各VIのSCTLサポートとタイミング情報の詳細については、LabVIEWヘルプを参照してください。
- アナログ周期測定VI
- バタワースフィルタ VI
- 離散遅延VI
- 商関数
- FIFOクリア関数
- FPGA I/Oメソッドノード(特定のFPGAターゲットを使用する場合を除く)
- FPGA I/Oプロパティノード(特定のFPGAターゲットを使用する場合を除く)
- 割り込みVI
- ルックアップテーブル1D(データ補間が有効な場合)
- ループタイマ Express VI
- 同じI/Oリソースを使用する複数のFPGA I/Oノード(ループ内とループ外に少なくとも1つずつ以上ノードがある場合)
- 非再入可能サブVI(複数インスタンスを使用する場合)
- ノッチフィルタVI
- PID VI
- 商&余り関数
- 逆数関数
- 1D配列回転関数
- 正弦波発生器VI
- 単精度浮動小数点演算
- 平方根関数
- タイミングループ
- 待機Express VI
- オカーレンスを待機関数
- Whileループ
パイプラインを使用して、SCTL内でより多くのロジックを実行できるようにすることはできますか?はい。シフトレジスタまたはフィードバックノードを使用すると、ロジックを並列に実行し、SCTLの後続の反復間でデータを渡すことができます。したがって、ロジックチェーン全体が複数のSCTL反復にわたって実行されます。FPGA VIの任意の並列実装と同様に、これは追加のFPGAリソースを使用します。
SCTL内のロジックが1ティックで実行できない場合、エラーメッセージが表示されますか?FPGA VIをコンパイルしようとするまで、LabVIEWは通常、タイミング関連のエラーを返しません。コンパイルには、SCTL関連のエラーが発生する可能性のある2つの異なる点があります。まず、LabVIEW FPGAがVIからVHDLコード(中間ファイルの生成)をコンパイルしようとすると、サポートされていない関数(例:商&余り関数)をSCTLで使用した場合、エラーダイアログボックスが表示されます。このボックスが表示されるまで数秒かかるだけです(完全なVHDLコンパイルプロセスは開始されません)。
SCTLでサポートされていない関数を使用しないようにしても、ループが1クロックティックで実行できないほどのロジックがSCTLに含まれていると、コンパイルはタイミング違反で失敗します。このタイプのエラーは、ザイリンクスツールの実際のコンパイル時に発生し、コンパイルに数分(またはそれ以上)かかることがあります。このようなエラーが発生した場合は、SCTLのロジックを減らすか、アルゴリズムをパイプライン化してVIが正常にコンパイルされるようにしてください。
SCTLは高度機能ですか? はい。いくつかのタスクはSCTLで非常に簡単に実装できますが、場合によっては難しいことがあります。たとえば、SCTLを使用している場合は、待機関数を使用して高速デジタルプロトコルを実装することはできません。ステートマシンを使用して、ループの各反復が1ティックだけを実行にするようにする必要があります。SCTLは、それを必要とするアプリケーション速度と効率を提供しますが、使用するのは難しい場合があります。場合によっては、従来のWhileループを使用する方が適切かもしれません。
より速いグローバルクロックでSCTLを使用できますか? はい。ただし、80 MHz以上でコンパイルされたSCTLでは、より少ない関数しか実行できません。