01-19-2017 11:33 PM
LabVIEW_FPGAでcompactRIOに書き込むプログラムを作成しています。
入力信号に応じて、処理Aか処理Bの演算値のどちらかを出力するプログラムですが、
どちらの処理も大規模でFPGAのリソース使用量がギリギリという状況です。
プログラムの動作としては、入力信号を用いて処理Aと処理Bが同時平行で演算し、
「選択関数(三角形のブロック)」で演算値の選択をし、外部へ出力しています。
そこで、ケースストラクチャに処理A、処理BをそれぞれTrueケース、Falseケースに入れ、
入力信号に応じて処理を選択するようなプログラムに変更しようと考えています。
このような、プログラムの変更でFPGAのリソース量が減らせることは可能でしょうか。
解決済! 解決策の投稿を見る。
01-20-2017 07:25 AM
やったことがないので確証はありませんが、どちらの処理もFPGAに焼かなければならないので、原理的には減らないと思います。
海外で過去にも同様の質問があったようなので、もし参考になれば。
http://forums.ni.com/t5/LabVIEW/case-structure-execution-on-a-FPGA/td-p/1076046
やり直しも効きますし、ハードウェアとVIがお手元にあるようなので、とりあえずやってみてはいかがでしょう。もちろん、コンパイルに時間はかかってしまいますが。
01-22-2017 08:59 PM
Merly さん
ご回答ありがとうございます。
先ほど試しにやってみたところ、使用率が98%⇒92%になるくらいでした。
01-23-2017 07:26 PM
FPGAの演算ということですが、割り算などFPGAリソースを大量に使用してしまうような関数はお使いではありませんでしょうか。FPGAでは一部の関数はリソースを大量に使用するため使用は避けるべきです。
割り算を使用しない演算方法についてこのようなサンプルがありますがご覧になったことはありますでしょうか。
01-23-2017 08:26 PM
pipipi0405 さん
コメントありがうございます。
「割り算」関数、「商&余り」関数は使用しておりません。
その代りに、「掛け算」関数、「逆数(高スループット)」関数を使用しております。
・定数で割る場合
定数の逆数を「掛け算」関数で掛ける。
(ex. 4で割る→1/4(0.25)を掛ける)
・変数で割る場合
変数を「逆数(高スループット)」関数に通し、「掛け算」関数で掛ける。
01-24-2017 12:30 AM
ご報告ありがとうございます。なるほど、少しは減るんですね。
ランダムなコンパイルを行う中で平均的にどれだけ減るのかは分かりませんが、ホントにギリギリの時には有効なのかもしれませんね。