FPGA設計の異なる部分からデータの保存とアクセスを実行する
- 更新日2025-03-06
- 10分で読める
複数のクロック領域からアクセスする必要があるデータをFPGAアプリケーションを使用して保存する場合は、以下のオプションから選択してください。
| メソッド | 使用例 |
|---|---|
| レジスタ項目 |
|
| ブロックメモリを使用して実装されたメモリ項目 |
|
| ハンドシェイク項目 |
|
レジスタ項目
複数のクロック領域または設計の異なる部分からのデータへのアクセス、および再利用可能なコードの書き込みが必要な場合は、レジスタ項目を使用してデータを保存します。レジスタ項目はFIFOよりも少ないFPGAリソースを消費し、FPGAリソースの制限されたタイプであるブロックメモリは消費しません。
LabVIEW FPGAモジュールには、2つのタイプのレジスタ項目があります。
- VI定義レジスタ項目: VI定義レジスタ項目を使用し、再入可能サブVIを作成してリソースの競合を回避します。VI定義レジスタ項目を再入可能なFPGA VIで構成すると、VIのインスタンスごとに独立したレジスタ項目のコピーが作成されます。
- ターゲット指定レジスタ項目: レジスタ項目を表示しプロジェクトエクスプローラウィンドウから構成可能にしたい場合は、ターゲット指定レジスタ項目を使用します。ターゲット指定レジスタ項目は、プロジェクトエクスプローラウィンドウの同じターゲットの下のすべてのFPGA VIで使用可能です。
以下のブロックダイアグラムは、ターゲット指定レジスタ項目に構成されたレジスタメソッドノードを使用してレジスタ項目の読み取りと書き込みを実行する方法を示しています。このVIは、XとYの2つの制御器の値の追加、レジスタ項目へ合計値の書き込み、保存された値の読み取り、保存された値の増分、および表示器への結果の表示を実行します。書き込みおよび読み取りメソッドが2つの異なるクロック領域にあることに注意してください。
プロジェクトエクスプローラウィンドウからターゲット指定レジスタ項目を作成する
以下の手順に従って、プロジェクトエクスプローラウィンドウからターゲット指定レジスタ項目を作成します。
- プロジェクトエクスプローラウィンドウで、FPGAターゲットを右クリックします。
- 新規→レジスタを選択して、FPGAレジスタプロパティダイアログボックスを表示します。
- OKをクリックして、レジスタ項目の作成を終了します。
- レジスタ項目をプロジェクトエクスプローラウィンドウからブロックダイアグラムにドラッグします。LabVIEWはレジスタ項目に構成したレジスタメソッドノードを追加します。
ブロックダイアグラムからレジスタ項目を作成する
ターゲット指定またはVI定義レジスタ項目のいずれかをブロックダイアグラムから作成できます。
ターゲット指定:
- FPGA VIのブロックダイアグラムを表示します。
- 関数パレットから、レジスタメソッドノードをブロックダイアグラムに追加します。
- レジスタメソッドノードを右クリックし、新規レジスタを追加を選択してFPGAレジスタプロパティダイアログボックスを表示します。

ヒント レジスタメソッドノードを右クリックして、レジスタを選択→x (xは既存のレジスタ項目) を選択することもできます。 - OKをクリックして、レジスタ項目の作成を終了します。
リファレンスをレジスタ入力に配線して既存のレジスタ項目を指定することもできます。LabVIEWは、レジスタメソッドノードをデフォルトのメソッドである書き込みで構成します。レジスタ項目を指定してからレジスタメソッドノードを右クリックし、メソッドを選択→y (yは特定のメソッド) を選択します。
VI定義:
- FPGA VIのブロックダイアグラムを表示します。
- 関数パレットから、VI定義レジスタ構成ノードをブロックダイアグラムに追加します。
- VI定義レジスタ構成ノードを右クリックして構成を選択すると、FPGAレジスタプロパティダイアログボックスが開きます。
- 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つの異なるクロック領域にあることに注目してください。この設計方法により、より速いクロック領域に対してすべてのデータポイントの書き込みを行う、無損失のデータ転送が可能です。
プロジェクトエクスプローラウィンドウからターゲット指定ハンドシェイク項目を作成する
以下の手順に従って、プロジェクトエクスプローラウィンドウからターゲット指定ハンドシェイク項目を作成します。
- プロジェクトエクスプローラウィンドウで、FPGAターゲットを右クリックします。
- 新規→ハンドシェイクを選択して、FPGAハンドシェイクプロパティダイアログボックスを表示します。このダイアログボックス内のオプションを使用してハンドシェイク項目を構成します。
- OKをクリックして、ハンドシェイク項目の作成を終了します。
- ハンドシェイク項目をプロジェクトエクスプローラウィンドウからブロックダイアグラムにドラッグします。LabVIEWはハンドシェイク項目に構成したハンドシェイクメソッドノードを追加します。
ブロックダイアグラムからハンドシェイク項目を作成する
ターゲット指定またはVI定義ハンドシェイク項目のいずれかをブロックダイアグラムから作成できます。
ターゲット指定:
- FPGA VIのブロックダイアグラムを表示します。
- ハンドシェイクメソッドノードをブロックダイアグラムに追加します。
- ハンドシェイクメソッドノードを右クリックし、新規ハンドシェイクを追加を選択してFPGAハンドシェイクプロパティダイアログボックスを表示します。

ヒント ハンドシェイクメソッドノードを右クリックして、ハンドシェイクを選択→x (xは既存のハンドシェイク項目) を選択することもできます。 - OKをクリックして、ハンドシェイク項目の作成を終了します。
リファレンスをハンドシェイク入力に配線してハンドシェイクを指定することもできます。LabVIEWは、ハンドシェイクメソッドノードをデフォルトのメソッドである書き込みで構成します。ハンドシェイク項目を指定してからハンドシェイクメソッドノードを右クリックし、メソッドを選択→y (yは特定のメソッド) を選択します。
VI定義:
- FPGA VIのブロックダイアグラムを表示します。
- ハンドシェイクメソッドノードをブロックダイアグラムに追加します。
- VI定義ハンドシェイク構成ノードをダブルクリックして、FPGAハンドシェイクプロパティダイアログボックスを表示します。
- OKをクリックして、ハンドシェイク項目の作成を終了します。