09-09-2010 07:22 AM
いつも大変お世話になっております。
「計測ファイルへ書き込み」関数に関する質問です。
画像を添付いたしますが、
①FPGA VI(SCTLを使用)で0から65535までの数字をループさせ、FIFOに出力(depthは16383に設定)
②Host VIでFIFOに格納されたデータをそのまま計測ファイルへ書き込み関数に出力
上記①②の行程により、lvmファイルには0-65535の数字が繰り返し書き込まれているのが所望の動作ですが、添付画像③のように、初めから65535の数字しか出てきません。また、Elements Remainingの値は16382で飽和します。
FIFOのConfigureやStartを外した場合も同様に65535の値で飽和します。
Depthを16838より大きくした場合には、フロントパネルの表示器(Numbers)は0となり、lvmファイルは出力されませんでした。
他にも色々とFIFOの設定を変えたりして原因を追究しましたが上手くいきません。
lvmファイルに書き込まれる値が飽和する原因をご教授いただけますでしょうか。
また、Elements Remainingに残っているデータを、VIを動作させる前に消去する方法があるかどうかについても教えていただけると助かります。
よろしくお願い申し上げます。
解決済! 解決策の投稿を見る。
09-12-2010 07:52 PM
Medphys_ST 様
平素より弊社ディスカッションフォーラムをご利用頂きまして誠に有難うございます。
日本ナショナルインスツルメンツ黒須と申します。
FPGA側のFIFOのサイズはどの様になっておりますでしょうか?
もしこれが添付イメージのように小さい場合、すぐに上書きされてしまいFPGAのFalseのケースから配線されたデータがホストで読み取られる可能性はあります。
これはFPGA側が高速で実行され(25nsec)FIFOに値がアップされているのに対して、ホスト側が遅い速度で読み取っている為に(CPUにより異なるが数ミリ~数十ミリ秒)、
FIFOのデータがすぐに上書きされてしまっているために、ホスト側からは値がすぐに65535に達している様に見えるのではないかと思います。
もしよろしければ、FPGAのVI、HostのVI、プロジェクトファイル、ビットファイルなど一式を添付していただければこちらで確認してみます。
よろしくお願いいたします。
09-13-2010 11:21 PM
黒須様
ご回答くださりありがとうございます。
VI一式を添付いたしました。確認していただけると幸いです。
よろしくお願い申し上げます。
09-14-2010 03:03 AM
Medphys_ST 様
平素より弊社ディスカッションフォーラムをご利用頂きまして誠に有難うございます。
日本ナショナルインスツルメンツ黒須と申します。
まずFPGAのVIについてですが、こちらは作成いただいた際にウィンドウで開発したものなどをコピーしていただいたのではないかと思うのですが、
FPGAのVIでタイミングループを使用した場合、デフォルトでシングルサイクルタイミングループとなりループをFPGA上の1クロック(25usec)で実行を行ないます。
したがってFPGAのプログラムは25usecで実行されていることになります。
もしFPGAのループを制御する際には下図の様にタイミング関数を用いてループを制御してください。
Windowsホストの方で65535しか出力されない理由ですが、
考えられる原因としましてはFPGAのVIをコンパイルの際に実行させてその後Windowsホストを走らせた場合、
FPGA側は25usecで超高速でループを処理しておりますので、ループカウント端子の"i"の値が50数秒でI32の最大値の"2,147,483,647"に飽和してしまいます。
もし"i"の値が飽和すれば16ビットに変換処理をした値もすべてが1のビットとして出力されるため"65535"しか出力されない原因として考えられます。
Windowsホストから実行する場合には下図のように最後にFPGAリファレンスを閉じることを行わないとFPGAがそのまま動き続けてしまいます。
そのため次回実行した際には"i"のカウントが最大値に飽和していて、帰ってくる値が"65535"ということにも十分なるかと思います。
一度これらをご確認してみてください。
よろしくお願いします。