LabVIEW FPGA でフィードバックノードを長遅延に使用した時の注意


こんにちは、ドルフィンシステムの笹生です。

さて今回はLabVIEW FPGA でのコンパイル時間とフィードバックノード関係について少し注意したほうが良いことについてです。

フィードバックノードを遅延素子として使用する際は注意が必要??


 LabVIEW FPGA のプログラミングでは信号間のタイミングを調整したり、揃えたりするためにフィードバックノードを使うことが良くあります。
 
フィードバックノード

フィードバックノードについての以前の解説はこちら

このタイミング調整のためにフィードバックノードを使うこと自体はもちろん当然のように行うのですが、長い遅延をさせたい時には注意が必要です。
例えば、U32 (32bit) のデータを 2048サイクル遅延させたい場合があったとします。
(こんなに長遅延は普通ないだろうと思われるかもしれませんが、無線関係だと OFDM での CP 付与など意外と随所で大きな遅延をさせて調整することがあります)
そこでフィードバックノードで2048サイクル遅延をさせたものを作成します。

当然シミュレーションも正しく動きますし、特にこの時点でエラーも起きません。
簡単に遅延を実現できてしまうのでつい使ってしまいます。

問題はコンパイル時間に現れた

これは条件にもよって違うと思いますので一概に言えないのですが、長遅延をさせるフィードバックノードがあるとFPGAコンパイル時間(特にシンセシス時間)が非常に長くなる傾向があるようです。

私の確認した限りでは、単体でコンパイルしてフィードバックノードで遅延させたときにははシンセサイズの時間が 1時間20分程度かかっていたものが、FIFOベースの遅延に変更したところ 14分に短縮された例もありました。

実はこのフィードバックノードによる遅延の記述方法は LabVIEW NXG ではコンパイル時間の影響はあまりないようです。
私がNXGと比較した際の Xilinx FPGA コンパイラは同じ Vivado 2015.4 なので、LabVIEW FPGA VI の解釈による中間ファイル生成(HDL生成) LabVIEW NXG の中間ファイル生成(HDL生成)アルゴリズムに違いがあるのかもしれません。

まとめ

程度にもよりますが LabVIEW FPGA で長遅延をさせる場合には、フィードバックノードではなくメモリ・FIFO ベースで遅延をさせたほうがよさそうです。FPGAコンパイル時間は元々長時間かかるものですがもし異常に時間がかかるようならフィードバックノードが原因ということもあるかもしれません。

0 件のコメント :

コメントを投稿