FPGA設計の異なる部分からデータの保存とアクセスを実行する (FPGAモジュール)

複数のクロック領域からアクセスする必要があるデータをFPGAアプリケーションを使用して保存する場合は、以下のオプションから選択してください。

メソッド 使用例
レジスタ項目
  • 単一データを保存する必要がある場合
  • 転送したデータの損失が許容される場合
  • 各クロックサイクルでステータスを更新する必要がある場合
ブロックメモリを使用して実装されたメモリ項目
  • 複数のデータを保存する必要がある場合
  • 転送したデータの損失が許容される場合
ハンドシェイク項目
  • 読み取りノードおよび書き込みノードが同期されている場合
  • 無損失のデータ転送である必要がある場合

レジスタ項目

複数のクロック領域または設計の異なる部分からのデータへのアクセス、および再利用可能なコードの書き込みが必要な場合は、レジスタ項目を使用してデータを保存します。レジスタ項目はFIFOよりも少ないFPGAリソースを消費し、FPGAリソースの制限されたタイプであるブロックメモリは消費しません。

メモ  レジスタ項目はタイプ定義をサポートしていません。アプリケーションがタイプ定義を使用する必要がある場合は、レジスタ項目の代わりにグローバル変数を使用します。

LabVIEW FPGAモジュールには、2つのタイプのレジスタ項目があります。

  • VI定義レジスタ項目: VI定義レジスタ項目を使用し、再入可能サブVIを作成してリソースの競合を回避します。VI定義レジスタ項目を再入可能なFPGA VIで構成すると、VIのインスタンスごとに独立したレジスタ項目のコピーが作成されます。
  • ターゲット指定レジスタ項目: レジスタ項目を表示しプロジェクトエクスプローラウィンドウから構成可能にしたい場合は、ターゲット指定レジスタ項目を使用します。ターゲット指定レジスタ項目は、プロジェクトエクスプローラウィンドウの同じターゲットの下のすべてのFPGA VIで使用可能です。

以下のブロックダイアグラムは、ターゲット指定レジスタ項目に構成されたレジスタメソッドノードを使用してレジスタ項目の読み取りと書き込みを実行する方法を示しています。このVIは、XYの2つの制御器の値の追加、レジスタ項目へ合計値の書き込み、保存された値の読み取り、保存された値の増分、および表示器への結果の表示を実行します。書き込みメソッドと読み取りメソッドが、2つの異なるクロック領域にあることに注意してください。

プロジェクトエクスプローラウィンドウからターゲット指定レジスタ項目を作成する

以下の手順に従って、プロジェクトエクスプローラウィンドウからターゲット指定レジスタ項目を作成します。

  1. プロジェクトエクスプローラウィンドウで、FPGAターゲットを右クリックします。
  2. 新規→レジスタを選択して、FPGAレジスタプロパティダイアログボックスを表示します。
  3. OKをクリックして、レジスタ項目の作成を終了します。
  4. レジスタ項目をプロジェクトエクスプローラウィンドウからブロックダイアグラムにドラッグします。LabVIEWはレジスタ項目に構成したレジスタメソッドノードを追加します。
メモ  このメソッドを使用してレジスタ項目を作成する場合、レジスタ項目はプロジェクトで対応する項目に名前でバウンドされるため、プロジェクト項目への更新はブロックダイアグラムにあるレジスタ項目のすべてのインスタンスに影響します。

ブロックダイアグラムからレジスタ項目を作成する

ターゲット指定またはVI定義レジスタ項目のいずれかをブロックダイアグラムから作成できます。

ターゲット指定:

  1. FPGA VIのブロックダイアグラムを表示します。
  2. 関数パレットから、レジスタメソッドノードをブロックダイアグラムに追加します。 

  3. レジスタメソッドノードを右クリックし、新規レジスタを追加を選択してFPGAレジスタプロパティダイアログボックスを表示します。
    ヒント  レジスタメソッドノードを右クリックして、レジスタを選択→x (xは既存のレジスタ項目) を選択することもできます。
  4. OKをクリックして、レジスタ項目の作成を終了します。

リファレンスをレジスタ入力に配線して既存のレジスタ項目を指定することもできます。LabVIEWは、レジスタメソッドノードをデフォルトのメソッドである書き込みで構成します。レジスタ項目を指定してからレジスタメソッドノードを右クリックし、メソッドを選択→y (yは特定のメソッド) を選択します。

VI定義:

  1. FPGA VIのブロックダイアグラムを表示します。
  2. 関数パレットから、VI定義レジスタ構成ノードをブロックダイアグラムに追加します。 

  3. VI定義レジスタ構成ノードを右クリックして構成を選択すると、FPGAレジスタプロパティダイアログボックスが開きます。
  4. OKをクリックして、レジスタ項目の作成を終了します。

ハンドシェイク項目

ハンドシェイク項目は単一要素FIFOのように動作します。ハンドシェイク項目を使用して、1つのデータ要素をあるクロック領域の書き込みノードと同じまたは別のクロック領域の読み取りノードに転送します。ハンドシェイクを使用することにより、書き込み領域から読み取り領域への無損失データ転送と、読み取り側がデータを受信した際に書き込み側への通知を実行できます。ハンドシェイク項目はFIFOよりも少ないFPGAリソースを消費し、FPGAリソースの制限されたタイプであるブロックメモリは消費しません。

LabVIEW FPGAモジュールには、2つのタイプのハンドシェイク項目があります。

  • VI定義ハンドシェイク項目: VI定義ハンドシェイク項目を使用し、再入可能サブVIを作成してリソースの競合を回避します。VI定義ハンドシェイク項目を再入可能なFPGA VIで構成すると、VIのインスタンスごとに独立したハンドシェイク項目のコピーが作成されます。
  • ターゲット指定ハンドシェイク項目: ハンドシェイク項目を表示しプロジェクトエクスプローラウィンドウから構成可能にしたい場合は、ターゲット指定ハンドシェイク項目を使用します。ターゲット指定ハンドシェイク項目は、プロジェクトエクスプローラウィンドウの同じターゲットの下のすべてのFPGA VIで使用可能です。

ハンドシェイクメソッドノードを使用してデータを読み取る

ハンドシェイクメソッドノードを使用してデータを読み取る2つの方法があります。

メソッド 使用例
読み取りメソッド
  • データ要素を一度だけ読み取る必要がある場合に使用します。読み取りメソッドは自動的にデータに肯定応答するため、次の転送に備えてデータを削除します。
肯定応答メソッドおよび「肯定応答なしで読み取り」メソッドを組み合わせる
  • ノードがデータ転送を肯定応答するタイミングを制御する必要がある場合に使用します。「肯定応答なしで読み取り」メソッドノードは、肯定応答メソッドが呼び出されるまで、同じデータを何度も読み取ることができます。

以下のブロックダイアグラムは、ターゲット指定ハンドシェイク項目に構成されたハンドシェイクメソッドノードを使用してハンドシェイク項目の読み取りと書き込みを実行する方法を示しています。このVIは値を1つずつ増分して、データをハンドシェイク項目に書き込み後、保存された値を読み取り、自動的に読み取りに対する肯定応答を行います。入力準備完了がTRUEの場合、入力有効はTRUEになります。その後、VIは出力有効がTRUEの際に保存された値を表示器に書き込みます。書き込みメソッドと読み取りメソッドが、2つの赤枠で示されるように2つの異なるクロック領域にあることに注目してください。この設計方法により、より速いクロック領域に対してすべてのデータポイントの書き込みを行う、無損失のデータ転送が可能です。

メモ  VIを中断して再開始しても、ハンドシェイク項目はリセットされません。クリアメソッドを使用して、ハンドシェイク項目をデフォルトの状態に戻します。

プロジェクトエクスプローラウィンドウからターゲット指定ハンドシェイク項目を作成する

以下の手順に従って、プロジェクトエクスプローラウィンドウからターゲット指定ハンドシェイク項目を作成します。

  1. プロジェクトエクスプローラウィンドウで、FPGAターゲットを右クリックします。
  2. 新規→ハンドシェイクを選択して、FPGAハンドシェイクプロパティダイアログボックスを表示します。このダイアログボックス内のオプションを使用してハンドシェイク項目を構成します。
  3. OKをクリックして、ハンドシェイク項目の作成を終了します。
  4. ハンドシェイク項目をプロジェクトエクスプローラウィンドウからブロックダイアグラムにドラッグします。LabVIEWはハンドシェイク項目に構成したハンドシェイクメソッドノードを追加します。
メモ  このメソッドを使用してハンドシェイク項目を作成する場合、ハンドシェイク項目はプロジェクトで対応する項目に名前でバウンドされるため、プロジェクト項目への更新はブロックダイアグラムにあるハンドシェイク項目のすべてのインスタンスに影響します。

ブロックダイアグラムからハンドシェイク項目を作成する

ターゲット指定またはVI定義ハンドシェイク項目のいずれかをブロックダイアグラムから作成できます。

ターゲット指定:

  1. FPGA VIのブロックダイアグラムを表示します。
  2. ハンドシェイクメソッドノードをブロックダイアグラムに追加します。 

  3. ハンドシェイクメソッドノードを右クリックし、新規ハンドシェイクを追加を選択してFPGAハンドシェイクプロパティダイアログボックスを表示します。
    ヒント  ハンドシェイクメソッドノードを右クリックして、ハンドシェイクを選択→x (xは既存のハンドシェイク項目) を選択することもできます。
  4. OKをクリックして、ハンドシェイク項目の作成を終了します。

リファレンスをハンドシェイク入力に配線してハンドシェイクを指定することもできます。LabVIEWは、ハンドシェイクメソッドノードをデフォルトのメソッドである書き込みで構成します。ハンドシェイク項目を指定してからハンドシェイクメソッドノードを右クリックし、メソッドを選択→y (yは特定のメソッド) を選択します。

VI定義:

  1. FPGA VIのブロックダイアグラムを表示します。
  2. ハンドシェイクメソッドノードをブロックダイアグラムに追加します。 

  3. VI定義ハンドシェイク構成ノードをダブルクリックして、FPGAハンドシェイクプロパティダイアログボックスを表示します。
  4. OKをクリックして、ハンドシェイク項目の作成を終了します。

関連情報

FPGAターゲットにデータを保存する

複数クロック領域を実装する

サブVIでI/O、クロック、レジスタ項目、メモリ項目、FIFO、およびハンドシェイク項目を使用する

再入可能または非再入可能サブVIを使用する場合を判断する

FPGAレジスタプロパティダイアログボックス

メモリプロパティダイアログボックス

FPGAハンドシェイクプロパティダイアログボックス

レジスタメソッドノード

メモリメソッドノード

ハンドシェイクメソッドノード

「データ通信方法」ホーム



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

役に立たなかった