ハンドシェイク信号を使用してタイミングのスケジュールを作成する (FPGAモジュール)

ハンドシェイクとは、継続した通信を行うためのパラメータを確立する、2つのノード間の通信のことです。シングルサイクルタイミングループの指定されたブロックダイアグラムノードFでは、ハンドシェイクが動作の発生するタイミングを決定します。

  • F は先行ノードからのデータを破棄します。先行ノードは、F にデータを送信するノードです。
  • F は先行ノードからのデータを受け入れます。
  • 後続ノードは F からのデータを破棄します。後続ノードは F からデータを受信するノードです。
  • 後続ノードは F からのデータを受け入れます。

マルチサイクルノードでは有効なデータの計算に複数のサイクルが必要ですが、シングルサイクルタイミングループはこれらのノードが各クロックサイクルでデータを返すように強制するため、シングルサイクルタイミングループではハンドシェイクが必要です。そのため、マルチサイクルノードは各クロックサイクルで有効なデータを返しません。アルゴリズムの数値的有効性を確認するには、このデータに依存するノードがデータが有効か無効であるかを認識する必要があります。

NIは、シングルサイクルタイミングループの内側で特定のノードと使用できるハンドシェイクプロトコルを構築しました。このプロトコルには、以下の端子が含まれます。

  • 入力有効—次に処理するデータポイントを受信したことを示します。
  • 出力有効—ノードが生成したデータポイントが有効であり、後続ノードにより処理される準備ができていることを示します。
  • 出力準備完了—後続ノードで新規データポイントの受け入れが可能かどうかを示します。
  • 入力準備完了—次のクロックサイクルでノードが新規データの受け入れが可能かどうかを示します。
メモ  このプロトコルには4つの端子が含まれるため、FPGA VIのハンドシェイクは4線式プロトコルとしても知られています。

単一入力ノードが有効なデータを使用することを確認する

先行の関数 U 、関数 F 、後続の関数 D の3つの単一入力関数をシングルサイクルタイミングループで使用する場合を考えます。これらの関数は、入力値xを取得して、特定のクロックサイクル数の後に出力データを生成します。以下の図は、UF 、および D を配線して、NIが推奨するハンドシェイクプロトコルを使用する方法を示します。

上記の図では、ワイヤ上の数値は以下の手順に対応します。

  1. U が有効な値を F に送信すると、F入力有効端子の値はTRUEになります。TRUEは、U が有効な出力値を生成し、この値を F に送信することを示します。

    この論理を使用するには、U出力有効端子を F入力有効端子に配線します。これにより、FU が有効な出力値をいつ生成したか認識します。
  2. F入力有効端子がTRUEを受信した後に、F は結果の計算を開始します。F が結果を計算している間、F出力有効はFALSEを返します。

    出力有効端子は、以下の両方の条件が満たされる場合にTRUEを返します。
    • F が結果の計算を開始してから、少なくともLf クロックサイクル以上経過した場合。ここで、L fF のレイテンシです。関数のレイテンシは、関数の構成ダイアログボックスで表示できます。関数をダブルクリックして、このダイアログボックスにアクセスします。
    • F出力準備完了端子がTRUEの場合。この端子は、DF の入力値を受け入れる準備が完了すると F に通知します。

      この論理を使用するには、フィードバックノードを介して D入力準備完了端子を F出力準備完了端子に配線します。デフォルトでは、フィードバックノードの実行には1クロックサイクルかかるため、 FD が送信した1クロックサイクル後にこの値を受信します。
  3. F出力有効端子を D入力有効端子に配線した場合、DF が有効な値を生成したことを認識し、D にこの値を送信します。この論理は、上記の手順1の論理と同じです。F が先行の関数になる以外は、D にも同じ手順が繰り返されます。
  4. 次のクロックサイクルで F が他の有効な入力データを受信できる場合、F入力準備完了端子はTRUEを返します。

    この論理を使用するには、フィードバックノードを介して F入力準備完了端子を U出力準備完了端子に配線します。これにより、UF で新規入力値の受け入れ準備が完了したことを認識します。デフォルトでは、フィードバックノードの実行には1クロックサイクルかかるため、 FD が送信した1クロックサイクル後にこの情報を受信します。
ヒント  高スループットレートを確立するには、Fスループット制御器に小さな値を入力します。F が有効な入力を受信し、結果の計算を開始した後に F が他の有効な入力を受信するには、少なくとも Tf クロックサイクル以上経過している必要があります。ここで、Tf は、Fスループット制御器の値です。そのため、スループット制御器の値が小さいと、大きなスループット値を指定した場合よりも速く F が他の有効な入力データを受信できます。また、小さなスループット値を使用すると、大きなスループット値を使用する場合よりも F入力準備完了端子がTRUEを速く返すことができます。

複数入力ノードが有効なデータを使用することを確認する

高スループット加算」関数には、xおよびyの2つの入力が含まれるため複数入力関数です。シングルサイクルタイミングループでは、同じクロックサイクルでxyの両方が有効であることを確認する必要があります。1つの入力が有効でもう1つの入力が無効な場合、この関数は有効な入力値と無効な入力値をそれぞれ使用して出力データを計算してしまいます。

同じクロックサイクルで有効なxyが受信されることを確認するには、xに送り込まれるすべてのノードのレイテンシの合計を求めます。その後、yに送り込まれるすべてのノードのレイテンシの合計を求めます。2つのレイテンシの合計は等しい必要があります。レイテンシの合計が異なる場合は、短い方のパス (レイテンシの合計が小さい方) にxyパスのレイテンシの合計が等しくなるまでフィードバックノードを追加します。

メモ  デフォルトでは、フィードバックノードは1クロックサイクルをパスのレイテンシに追加します。ただし、この遅延は各フィードバックノードで変更できます。この設計方法は、同じパスのパイプラインのステージ数が異なる場合に役立ちます。

複数入力ハンドシェイクアプリケーションでレイテンシパスを調整する方法を示すサンプルについては、labview\examples\target_type\FPGA Fundamentals\FPGA Math and Analysis\High-Throughput Math\Vector Normalization\Vector Normalization.lvprojを参照してください。ここで、target_typeは、インストールしたドライバによってCompactRIOまたはRシリーズになります。

ハンドシェイク端子をサポートするノード

以下のノードはハンドシェイク端子をサポートします。

複数チャンネルのハンドシェイクをサポートするノード

以下のノードは複数チャンネルを使用したハンドシェイクをサポートします。

複数チャンネルのノードの場合、最初の有効データが最初のチャンネルに、2番目の有効データが2番目のチャンネルに、というようにデータがチャンネルへ順番に渡されるように、LabVIEWは値をインタリーブします。入力有効端子がチャンネルスキャン中にFALSEになる場合、以下の図が示すように、次に有効な入力がシーケンスの次のチャンネルに即時に適用されます。

この図で、d0、d1、およびd2はデータを受信する3つのチャンネルです。入力有効端子がFALSEになった後に再びTRUEになるたびに、後に続く有効なデータがシーケンスの次のチャンネルに即時に適用されることに注目してください。

最速許容スループットレートを決定する

シングルサイクルタイミングループの内側で接続される一連のノードの場合、最速スループットレートは、経過した後に一連のノードにより多くのデータを送信できる最小クロックサイクル数を示します。最速スループットレートは、最遅ノード (スループット制御器の値が最大のノード) のスループットレートと等しくなります。このノードは、一連のすべてのノードのボトルネックです。システムがこの最速レートよりも速いレートでこの一連のノードにデータを送信すると (システムが最小許容クロックサイクル数より少ないクロックサイクル数待機して、一連のノードにデータを送信する)、LabVIEWはデータを破棄します。

一連のノードの最速スループットレートを決定するには、まずはノードのスループット制御器を確認して各ノードのスループットレートを判断します。この制御器を表示するには、ノードをダブルクリックするか、ノードの詳細ヘルプウィンドウを表示します。最大値 (最遅ノード) が含まれるスループット制御器は、システムがこの一連の関数にデータを送信できる最速レート (最小サイクル数) です。

たとえば、一連のノードの最遅ノードのスループットレートが32サイクル/サンプル、FPGAターゲットのクロックレートが40 MHz、入力サンプルレートが2 MS/sの場合があります。システムのスループットレートは、「クロックレート/入力サンプルレート」で求めることができ、結果は40,000,000サンプルまたは20サイクル/サンプルです。この場合、システムは20サイクルごとに一連のノードにデータを送信し、32サイクルの最速スループットレートよりも速くなります。この違いは、LabVIEWがデータポイントを破棄する原因になります。

メモ  システムのスループットはシステム内のチャンネル数に反比例し、チャンネルのスループットはシステム内のチャンネル数に比例します。以下の式は、システムのスループットとチャンネルのスループットとの関係を示します。

システムのスループット = チャンネルのスループット / チャンネル数

チャンネルのスループット = システムのスループット Χ チャンネル数


たとえば、システムのスループットが200サイクル/サンプルで、チャンネル数が4つの場合、各チャンネルのスループットは800サイクル/サンプルになります。


この記事は役に立ちましたか。

役に立たなかった