AN65974 SF_loopback.imgでの通信ミスについて

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_2424341
Level 1
Level 1
5 replies posted First question asked First reply posted

SF_loopback.imgのサンプルデザインを用いた通信において、稀にIN転送データがAll0に化ける現象があります。

当方の検証しているシステムは以下になります。

・CYUSB3KIT-003にSF_loopback.imgをプログラムし、USB3.0で通信
・GPIF2にAlteraFPGA評価ボードを接続し、AN65974のloopbackデザインを書き込み
・ホストPC上でVisual studio2012 (C#)からコマンドを連続送受(Out転送→IN転送を繰り返し)

ここで、FPGAのHDLデザインがデフォルトのままだと問題ないのですが、
ループバック前にFPGA内でデータ加工を施すなど、何かしら追加の処理時間が生じると
稀に通信ミスが発生し、IN転送のコードがAll0に変化する場合があります。
(デフォルト時:200k回以上ミス無く送信データがループバック、
処理時間有り時:0.5k-1k回に1回程度の頻度で、All0データがホストPCに返る)

単純化のために、デフォルトのHDLコードに記述追加し、loop_back_wait_flagaのステート時に
待ち時間(100msec程度)を設けるのみの変更で現象は再現しており、BulkInEndPtの受信待ち状態で
待機しているうちにデータ化けが発生しているように見受けられます。

なお、GPIF2部をロジックアナライザでモニタした結果、およびCYUSB3KIT-003のJTAGデバッグモードにて
CyFxSlFifoPtoUDmaCallback内のbuffer_pが指すメモリ番地(バッファ)を見に行った結果では、異常発生時にも
データの化け(ALL0)は無いように見受けられるため、FPGA->FX3への転送は成功したうえで、

FX3->HOST-PCへの転送時にデータが化けているかのように見えるのですが、

何か原因は考えられますでしょうか?

田中

0 件の賞賛
1 解決策

田中様

Bulkloopでの確認ありがとうございます。

問題が起こらない件、承知しました。

サイプレス側としては、Bulkloopアプリケーションのソースコードを参照しながら問題を探していくことを推奨致します。

C#のbulkloopアプリケーションも以下にございますので、ソースコードをご覧いただけます。

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\c_sharp\bulkloop

Form1.cs 等を参照しながら、CommunicationTest(ご提供いただいたプロジェクト)との違いを検証していくのが良いと思います。

安全な実装を目指す点では、CyUSB.dllを活用し実装をすることをお勧めします。

Cypress CyUSB .NET Programmer's Referenceを必要に応じてご参照ください。

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\SuiteUSB\CyUSB.NET.pdf

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

Hirotaka Takayama

元の投稿で解決策を見る

0 件の賞賛
7 返答(返信)
HirotakaT_91
Moderator
Moderator
Moderator
500 replies posted 250 replies posted 100 replies posted

loop_back_wait_flagaステート時に100msを設けるという変更を試したそうですが、その際に、FX3でバッファオーバーランエラーは発生していませんか?

buffer_pの指すメモリ番地を見に行った上で問題がないように見えたということですので、FPGA->FX3の転送はうまくいっているように思われます。そうするとALL0が出力されているのはFX3->Host側であるとは思います。(また、FPGA側でデータの欠落がないことをご確認いただいていると思いますし、バッファオーバーランエラーなどは起きていない気がします)

こちらでも同じような環境を用意して確認し、ご連絡致します。

引き続きよろしくお願い致します。

Hirotaka Takayama

0 件の賞賛

高山様

ご回答ありがとうございます。

バッファオーバーランエラーですが、発生していないと思われます。

All0受信発生時にVisual Studio上で確認すると、

BulkInEndPt.XferDataの戻り値はTrueであり、メンバ変数を確認したところ、

NtStatusやUsbdStatusは0のままとなっております。

確認方法に問題あればご指摘お願いします。

一点気になることとして、LastErrorが997になっている点ですが、

今回のAll0受信発生とは関係なく、正常受信していると思われる際にも

常にLastErrorが997になるのは正しいでしょうか?

現象の再現性をご確認いただけるとのことで、お手数をお掛けします。

念のため、こちらでFPGAのVerilogコード(slaveFIFO2b_loopback.v)を

修正した点は以下になります。

----------------252行目辺りのコードを以下に修正-------------------------

loop_back_wait_flaga :begin

  if ((flaga_d == 1'b1) && (wait_count[31:0] >= 32'd10000000))begin

   next_loop_back_state = loop_back_wait_flagb;

  end else begin

   next_loop_back_state = loop_back_wait_flaga;

  end

end

----------------以下を追記-----------------------------------------------------

reg [31:0]wait_count;

always @(posedge clk_100, negedge reset_)begin
if(!reset_)begin
  wait_count[31:0] <= 32'd0;
end else if(current_loop_back_state == loop_back_wait_flaga) begin
  wait_count[31:0] <=  wait_count[31:0] + 32'd1;
end else begin
  wait_count[31:0] <= 32'd0;
end
end

------------------------------------------------------------------------------------------

もう一点、以下スレッドが今回の現象と関連しているかが

気になっているのですが、確認して原因切り分けする方法はございますでしょうか?

https://community.cypress.com/thread/37169

田中

0 件の賞賛

田中様

ご返信遅くなり大変申し訳ございません。

社内で確認を進めているのですが、こちらでは現在まだ現象を確認できておりません。

Xilinx Spartan 6 SP601, Altera Cyclone V GX Starter KitにてBulkloopアプリケーションを実行し、データを取得し続けましたが、IN転送のデータが正しく送れないといった現象は確認できませんでした。

確認方法としては良いと思いますが、Last Error 997が常に発生するというのが気になります。

使用しているホストアプリケーションのベースはBulkloopでしょうか?

Error 997はタイムアウト発生時に起こるものなのですが、正常に通信できていてもこれが出るのは妙です。

CYUSB.NETのissueとの関連性についてはまた後ほど回答させていただければと思います。

ご質問ばかりで恐縮ですが、以下の点を追加で教えていただけますか?

・使用しているホストアプリケーション(Bulkloopや他のアプリケーションをベースにしている、またはそのまま使っているなど)

・ご使用のAltera FPGA評価ボード、及びその設定(sdc, ピン配置などもご提供可能であれば)

・その他気になること

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

Hirotaka Takayama

0 件の賞賛
lock attach
Attachments are accessible only for community members.
user_2424341
Level 1
Level 1
5 replies posted First question asked First reply posted

Takayama様

ご確認を進めていただき誠にありがとうございます。

ご質問の件にご回答差し上げます。

>・使用しているホストアプリケーション(Bulkloopや他のアプリケーションをベースにしている、またはそのまま使っているなど)

この点に関しまして、社内のソフトウェア部門に一任しているため実装方法には明るくないのですが、VisualStudio2012 Express上にて、CyUSB.dllを取り込んでAPIを実行していると認識しています。今回、検証用のホストアプリケーション(0xA5…をOut転送→LoopBack→In転送のループをし、受信データが0x00にヒットするとエラー停止)を作成させましたので、添付致します。本ホストアプリでも現象が再現することは確認できました。

>・ご使用のAltera FPGA評価ボード、及びその設定(sdc, ピン配置などもご提供可能であれば)

ボードはSodia(Cyclone V SoC)を使用しております。sdc制約はAN65974そのままを使用しております。

ピン配置(csv)、デフォルトから変更したコード(.v)を添付致します。

>・その他気になること

数点ございます。

1, 本日上記検証時に、ホストとして使用するPCを変えると現象が出ないものがあることに気づきました。

 そこで、何らかのタイミングが関係していることを疑い、FPGA側で用意していた待ち時間を固定値ではなく、パラメータとして通信毎に

 カウントアップしていくようFPGA側のファイルを修正しました(添付:SlaveFIFO2b_loopback.v)。

 結果として、固定の待ち時間時は再現しなかったPCでも、エラー再現させることができましたが、程度の差があり、確実に発生させる

 条件はまだ見つけられていません。

 OSはWindows7(64bit)または10(64bit)のもの3台で試して3台ともエラー発生しました。

2, 今回の通信エラーと関係するかわかりませんが、USB(kit)のエニミュレーション時に、先にFPGAが接続されているとUSBを認識しないです。

 イメージ書き込み後にFPGAの電源を入れて回避しています。

0 件の賞賛

田中様

1. ご提供いただきました検証用ホストアプリケーションについて

こちらの環境でも、ご用意いただいた検証用ホストアプリケーションを用いることで、0x00を受け取ることがあることを確認できました。

2. Altera FPGA評価ボード環境について

ご連絡いただきありがとうございます。

"1."にて現象が確認できたため、ハードウェアに依存するものではないように思えます。

3. ホストとして使用するPCを変えると現象が出ないものがある

このverilogファイルを使わない場合でも"1."の通りこちらで現象は確認されました。

4. CYUSB3KIT-003のEnumerationよりも先にFPGAが接続されていると認識されない件

これはAN65974の使用手順にもございます。CYUSB3KIT-003に電源を印加後、FPGAの電源をお入れください。

さて、田中様のほうでもBulkloopアプリケーションを試してみていただきたく思います。

Bulkloopは、シンプルにOUT転送->loopback->IN転送 をし、OUT dataとIN dataを比較しています。0x00が返ってくればFailureとなります。

こちらの環境では、サイプレスの用意しているBulkloopアプリケーションではエラーが起こっておりません。

(実行ファイルのあるフォルダはこちらです。C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\cpp\bulkloop\x86\Release

Bulkloopを実行し、問題が起きたかどうかご連絡いただけますか?

 問題が起きなかった場合:ご用意いただいているホストアプリケーションが問題の可能性があります。

 問題が起きた場合:まだ問題の所在が明らかではありません。こちらでもより多くの環境で調べてみます。Sodiaボードも可能であれば入手し検証します。

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

Hirotaka Takayama

0 件の賞賛
user_2424341
Level 1
Level 1
5 replies posted First question asked First reply posted

高山様

ご返信ありがとうございます。

>1,

現象が再現したとのことで、ご確認ありがとうございました。

>2, 3

承知しました。

>4,

確認不足失礼いたしました。

Bulkloopでの確認結果ですが、このホストアプリを用いる限り、こちらの環境でも現象は再現しませんでした。

(Out転送とIn転送の値が同じように増加し続けます。Fixコード、Incrementalコードどちらも試しました)

このため、ご指摘いただいた内容から、ホストアプリケーション因の可能性が高いということになると思いますが、

原因の切り分け方法や、安全な実装とするために試すべきことなどあればご教授いただけますでしょうか。

田中

0 件の賞賛

田中様

Bulkloopでの確認ありがとうございます。

問題が起こらない件、承知しました。

サイプレス側としては、Bulkloopアプリケーションのソースコードを参照しながら問題を探していくことを推奨致します。

C#のbulkloopアプリケーションも以下にございますので、ソースコードをご覧いただけます。

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\c_sharp\bulkloop

Form1.cs 等を参照しながら、CommunicationTest(ご提供いただいたプロジェクト)との違いを検証していくのが良いと思います。

安全な実装を目指す点では、CyUSB.dllを活用し実装をすることをお勧めします。

Cypress CyUSB .NET Programmer's Referenceを必要に応じてご参照ください。

C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\SuiteUSB\CyUSB.NET.pdf

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

Hirotaka Takayama

0 件の賞賛