サンプルコードとドキュメント

DMA FIFOを使用してアナログ入力を行う (myRIO編)

製品と環境

このセクションは、サンプルの作成に使用された製品およびOSを反映します。

以下に示された製品を含め、NIのソフトウェアをダウンロードするには、ni.com/downloadsをご覧ください。

    ハードウェア

  • myRIO-1900

コードとドキュメント

添付

すべてをダウンロード

Description

概要

DMA FIFOを使用し、myRIOで集録したアナログ入力データをWindows PCへ転送します。

このプロジェクトは、Windows (ホスト)とmyRIO(FPGAターゲット)を使用して作成されています。

※プロジェクトは他のRTデバイスでも応用が可能です。

 

詳細

myRIOで集録したアナログ入力データを、DMA FIFOを使用してホスト側へ転送します。

FPGAアプリケーションでDMA FIFOを使用するメリットはこちらをご覧ください。

『ダイレクトメモリアクセスを使用してデータを転送する(FPGAモジュール)』

http://zone.ni.com/reference/ja-XX/help/371599K-0112/lvfpgaconcepts/fpga_dma_communication/

 

<FPGA VI>

FPGAターゲット側のVIでは、別々のタイミングで4つのmyRIO LEDを点滅させるデモを行います。

平行して一番上のループで、ConnectorA/AI0の値をDMA FIFOに渡します。

DMA FIFOの設定は、プロジェクトエクスプローラ内のFIFO上で右クリック >> プロパティ から可能です。

今回はmyRIO -> ホスト というデータフローのため、「ターゲットからホスト(DMA)」のタイプを選択します。

 

<Host VI>

ホスト側では、DMA FIFOからデータを受け取り表示します。

まずFIFO読み取りメソッドを要素数"0"で実行し、FIFO内に残るデータ数を確認します。

その値を次のFIFO読み取りメソッドの要素数に指定することで、FIFO内のデータをすべて読み取ることができます。

 

読み取った値はRawデータのままですから、電圧値に変換する必要があります。

myRIOの場合は下記資料によると、Rawデータに"0.001220703"を掛け合わせれば電圧値になるようです。

『NI myRIO-1900 User Guide and Specifications (10ページ目)』

http://www.ni.com/pdf/manuals/376047a.pdf

 

 

注意点としてターゲット側のFIFOへのデータ書き込みが速すぎる場合、

FIFOがオーバーフローし、タイムアウトエラーが発生する可能性があります。

この場合、ホスト側で読み取られる電圧値は正しいものになりません(同じ値を2度続けて読み取ってしまうなど)

そのため例えば以下のことに気をつけてください。

========================================

・バッファにデータを書き込む速度を下げる。

・ホストで読み取る要求する要素数を増やす。

・ホストがデータを読み取る速度を上げる。

・ホストバッファ、FPGAバッファ、または両方のサイズを増やす。

・ホストでCPUの負荷を減らす。CPU速度と競合するタスクの存在によって、ホストバッファからアプリケーションメモリへの転送レートが減少します。

========================================

『DMAアプリケーションでバッファエラーを回避する(FPGAモジュール)』より

http://zone.ni.com/reference/ja-XX/help/371599K-0112/lvfpgaconcepts/fpga_dma_fifo_buffer_size/

 

 

 

DMA FIFOの詳細は、他にも下記資料がご参考いただけます。

『Transferring Data between the FPGA and the Host (FPGA Module)』

http://zone.ni.com/reference/en-XX/help/371599F-01/lvfpgaconcepts/pfi_data_transfer/

『Simple DMA FIFO Example for FPGA』

https://decibel.ni.com/content/docs/DOC-9893

 

実装・実行方法

1. プロジェクトを開き、myRIOのIP等を設定します。

2. プロジェクトからmyRIOへ接続します。

3. FPGA VIをコンパイルします。

4. コンパイル完了後、ホストVIの「FPGAリファレンスを開く」関数を修正します。

5. ホストVIを実行します。

 

必要なもの

ソフトウェア

・LabVIEW 2013以降

・FPGA Module

・myRIO Toolkit or myRIO Module

 

ハードウェア

・myRIO (他のFPGAデバイスでも応用可能)

 

VIスニペット

○ホスト側

FP.png

 

○myRIO側

BD.png

 

 

NIコミュニティのサンプルコード交換のサンプルコードは、MIT Licenseによりライセンス供与されています。

コメント
Lexilighty
Member
Member

Hi,

Thank you for sharing. One thing I am not entirely clear about is the possiblity of transferring data from host RAM to FPGA block memory.

Is there a way to do this? The whitepaper on high speed data acquisition only does the other way around.

Also, I tried to run your code on my myRIO but I kept getting the following from the Open FPGA REference: "One or more required inputs to this function are not wired or are wired incorrectly. Show the Context Help window to see what the connections to this function should be."

I've tried changing the configuration of my myRIO but no luck.

Looking forward to your reply.

Thanks!

Yusuke.T
NI Employee (retired)

Hi, sorry for the delay.

I want to see your source code but on this thread, we cannot add any file.

Would you post your question to our DF?

A lot of LabVIEW user can answer your question.

Best Regards !!

T.Minami
NI Employee (retired)

Hi Lexilighty,

Sorry for the late response, but this is also for the reference of any future users: we received a similar question earlier, and the solution turned out to be that the program first needs to be unzipped to a folder, and then opened through the file called "myRIO_FPGA_Example.lvproj". Otherwise, the FPGA vi doesn't know how the myRIO is supposed to be set up.

Hopefully this solves the issues you've been having with this sample.

Cheers!

日本語版:

今回弊社のYtochigi投稿したサンプルではまずmyRIO_FPGA_ExampleのzipファイルをホストPC上のフォルダへ展開し、その中の「myRIO_FPGA_Example.lvproj」というファイルからLabVIEWのプロジェクトを開いて頂く必要があります。これはmyRIOの端子などをプログラム内で指定するにあたってまずはLabVIEWプロジェクト内で構成を定義する必要があるので、今回のサンプルでは必要な構成をmyRIO_FPGA_Example.lvproj」というLabVIEWプロジェクトにて行っているためです。

以上、よろしくお願い致します。