NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

FPGAからHOSTへ複数のFIFOを同期を取りながら送りたい

解決済み
解決策を見る

FPGA側で2つの周期の異なる三角波を作成し、その値をDMA FIFOでHOAT側へ送ります。その際に、その瞬間でのアナログ入力の電圧値も同時にDMA FIFOでHOST側に送ります。

HOST側では、三角波1と三角波2とアナログ入力モジュールの電圧値を読み出して、3列の行列をどんどん記録していくシステムを構築したいと考えております。

 

三角波1 | 三角波2 | A-IN

1050      | -1450    |   4

1051      | -1449    |   8

1052      | -1448    |   0

1053      | -1447    |   2

 

のようなリストデータを取得したいのです。試しに三角波1の信号をアナログ出力モジュールから出力して、そのままアナログ入力モジュールに接続してみました。1ループ分(40us)くらいのディレイはあるとは思うのですが、2ms程の時間差が生じておりました。

しかもアナログ入力モジュールの方が早く、三角波の信号のほうが遅くなっておりました。

このズレはどこからくるのでしょうか。

HOST側では、2000要素ずつ取り出しています。ちょうどFIFOで2000要素溜まる時間で取り出すようにしているので、タイムアウトは起きません。

 

また、このように複数のFIFOを同期を取りながらHOST側で取得したい際に適した方法などがありましたらご教授お願い致します。

 

すべてをダウンロード
0 件の賞賛
メッセージ1/5
2,326件の閲覧回数
解決策
トピック作成者yoshi-kが受理

FIFOを3つお使いですが、それを1つにまとめてしまう方法はどうでしょう?

 

三角波1/三角波2/A-INを3要素の配列にまとめて1つのFIFOで転送します。

イメージとしては以下のヘルプ「Interleaving Data on the FPGA Target」です。

Transferring Multi-Channel Data in DMA Applications (FPGA Module)

 

受け取りは上記ヘルプの「Decimating Data on the Host Computer」のようにすればよいです。

今回は"Samples to read per channel"は2000になりますね。

 

この方法を使う場合、転送するデータタイプがすべて同一である必要があるので、

SBLか何かに型変換する必要があります。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ2/5
2,284件の閲覧回数

返信有難うございます。

貴重な情報ありがとうございました。

 

FPGA側で3つの情報をインターリーブし、HOST側でデシメートするシステムに変えましたところ、遅延は数msから900us弱まで小さくすることができました。

 

しかし、依然として840usの遅延があります。FPGA側は1ループ40usで回しているので21ループ分遅れています。

 

この遅れは一体どこから来るのでしょうか。VIの構造上1ループは遅れることはわかりますが、ここまで遅れるのは不思議です。

AOから出力するまでのラグ?現在考えているシステムでは900us程度のラグは許容できません。

 

なにか原因として思い当たるところは無いでしょうか。

 

よろしくお願い致します。

すべてをダウンロード
0 件の賞賛
メッセージ3/5
2,274件の閲覧回数

FPGAクロックの周波数はどれほどでしょう。
LabVIEW FPGAにおいては「有効チェーン」が存在しますので、
Single-Cycle Timed Loop (SCTL)外の処理は各関数の実行に1tick以上かかります。

Dataflow and the Enable Chain in FPGA VIs (FPGA Module)

 

FPGA VIを拝見すると、AI0から信号を集録してから実際に信号が出力されるまで、
数tickは遅延があるように見受けられます。

 

使用できる箇所にはSCTLを用いて遅延を減らすなど、SCTLを積極的に使ってみてはいかがでしょう?

シングルサイクルタイミングループを使用してFPGA VIを最適化する(FPGAモジュール)

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 件の賞賛
メッセージ4/5
2,263件の閲覧回数

40MHzで動いています。アナログ入出力や各処理にかかるティックカウントを計測したり、SCTLを使ってティックカウントを節約したりしてみましたが変化ありません。

800usも遅れているので、クロックとかの話ではないような気がします。

AOに出力指示を出してから実際に出力されるまでにそれくらい時間があるのかなあ、と思えてきました。

これはまた別の記事で質問したいと思います。

ありがとうございました。

0 件の賞賛
メッセージ5/5
2,248件の閲覧回数